Skip to main content

Cloudflare Worker to Proxy Airtable API

  • September 8, 2018
  • 13 replies
  • 174 views

I’ve been working on a way to proxy Airtable API calls through a Cloudflare worker. What this library lets you do is add permissions and securely attach your API key to Airtable API requests without letting users see your credentials on the frontend.

Cloudflare Workers are $5/mo, and they run on Cloudflare’s edge network, so they’re really fast for clients. So this project is basically a serverless API proxy, and I’ve found it really useful for making the Airtable API client-side friendly.

Happy to answer questions about implementation or suggestions for improvements!

13 replies

  • New Participant
  • October 18, 2018

This project sounds pretty fantastic. At the moment, my main need for a proxy is for caching and to avoid rate limit issues. Does this project address caching in any way?

Thanks,
Greg


  • Author
  • Participating Frequently
  • October 18, 2018

This project sounds pretty fantastic. At the moment, my main need for a proxy is for caching and to avoid rate limit issues. Does this project address caching in any way?

Thanks,
Greg


Unfortunately the first version does not add any form of caching. I have created an issue to add it now that Cloudflare Workers have access to cache storage.


  • New Participant
  • October 18, 2018

Unfortunately the first version does not add any form of caching. I have created an issue to add it now that Cloudflare Workers have access to cache storage.


Karl,
Thanks for the reply. I’ll keep an eye out our giving adding some caching feature my self a try.

Thanks,
Greg


Forum|alt.badge.img+7
  • Known Participant
  • February 2, 2019

Karl, do you have an idiot’s guide to get started. I know nothing about APIs or cloudflare at the moment and keen to use my own html forms with airtable without showing my key.

Thanks


  • Author
  • Participating Frequently
  • February 4, 2019

Karl, do you have an idiot’s guide to get started. I know nothing about APIs or cloudflare at the moment and keen to use my own html forms with airtable without showing my key.

Thanks


Unfortunately, you have to have a little bit of programming experience to use this library.

One simple solution that doesn’t involve code would be to use a form (like Wufoo or Google forms) hooked up to Zapier. Then, Zapier can be set up to save your data to Airtable.


Forum|alt.badge.img+7
  • Known Participant
  • February 4, 2019

Hi Karl

I’d rather not use zapier.

I went on the GitHub page and seemed to have done everything right but when it comes to a uploading to cloudflare (not got an account yet) I get an error?


  • Author
  • Participating Frequently
  • February 4, 2019

Hi Karl

I’d rather not use zapier.

I went on the GitHub page and seemed to have done everything right but when it comes to a uploading to cloudflare (not got an account yet) I get an error?


What’s the error you see when you upload the code to Cloudflare?


Forum|alt.badge.img+7
  • Known Participant
  • February 4, 2019

Hi Karl

So basically I have (Detailed explanation I know)
• Created a folder in my local drive called ‘Airtable’
• Downloaded the repo from github and added to the ‘Airtable’ folder
• I’ve then opened Terminal, cd’s into that folder and ran ‘npm install’
• Added my base ID and API key to ‘webpack.config.js’ to the following lines

airtableBaseId: JSON.stringify(process.env.AIRTABLE_API_BASE_ID || ‘appABC12345678’),

and

airtableApiKey: JSON.stringify(process.env.AIRTABLE_API_KEY || ‘keyABC12345678’),

• Then ran ‘npm run build’ in Terminal
• Opened Dist/worker.js in Sublime and copied the contents
• Finally went to https://cloudflareworkers.com and pasted my the contents in the left sidebar and clicked Update.

I then get the error: {“error”:“NOT_FOUND”}

Have I missed something or and I not using the cloudflare part correctly?

I’m ok with doing the html/css side of things but not so great with javascript/php side, I learn some and then forget more lol.

Thanks


  • Author
  • Participating Frequently
  • February 5, 2019

What url are you going to to see the error?

I think you have to go to a route with the name of the table in it to get results.


Forum|alt.badge.img+7
  • Known Participant
  • February 6, 2019

I left the URL as per the original i.e.

airtableApiUrl: JSON.stringify(process.env.AIRTABLE_API_URL || ‘https://api.airtable.com’),

I went to my base > help > api documentation and got my url from the curl example i.e.

https://api.airtable.com/v0/appRIT0loMH2TYFKt/Furniture?api_key=keyABCDE123456

I still get an error though?

Thanks


Forum|alt.badge.img+7
  • Participating Frequently
  • March 12, 2019

If you use this proxy, what do the urls to access the API end up looking like? (I’m not familiar with Cloudflare).


  • Author
  • Participating Frequently
  • March 13, 2019

I left the URL as per the original i.e.

airtableApiUrl: JSON.stringify(process.env.AIRTABLE_API_URL || ‘https://api.airtable.com’),

I went to my base > help > api documentation and got my url from the curl example i.e.

https://api.airtable.com/v0/appRIT0loMH2TYFKt/Furniture?api_key=keyABCDE123456

I still get an error though?

Thanks


I updated the docs this morning to hopefully make it more clear.

Once you upload your script to Cloudflare’s test area, your Airtable’s tables will be available via the table name. For example, if my Airtable base has a table name posts , it would be available at https://tutorial.cloudflareworkers.com/posts.

If you still see a Not Found error, it means your API key or Base ID are not correct.


  • Author
  • Participating Frequently
  • March 13, 2019

I updated the docs this morning to hopefully make it more clear.

Once you upload your script to Cloudflare’s test area, your Airtable’s tables will be available via the table name. For example, if my Airtable base has a table name posts , it would be available at https://tutorial.cloudflareworkers.com/posts.

If you still see a Not Found error, it means your API key or Base ID are not correct.


@Nora_Brown this should answer your question too :grinning_face_with_smiling_eyes: