Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Lessons from helping developers integrate 1,000 APIs with Zapier

Lessons from helping developers integrate 1,000 APIs with Zapier

Fokke Zandbergen

February 21, 2018
Tweet

More Decks by Fokke Zandbergen

Other Decks in Programming

Transcript

  1. ZAPIER.COM/ABOUT > September 2011 Idea > May 2012 Y Combinator

    Graduation > September 2012 Raised $1.3M > May 2014 Profitable > June 2016 At 1M Users, $10M ARR > August 2017 At 100 Zapiens (or Zorps) > January 2018 At 1K Apps, $35M ARR
  2. INTEGRATE WITH ZAPIER TO INTEGRATE WITH 1,000 > Define Triggers

    (GET or Webhooks) > Define Actions (POST) > Watch users build Zaps across Apps > Profit
  3. DON'T REINVENT THE WHEEL > REST JSON > OAuth 2.0

    w/refresh > REST Hooks > OpenAPI ❋ Zapier is heavily optimized for these standards.
  4. DON'T SAVE ON DOCS > Exists > Complete > Versioned

    > Public: Developer Marketing Material > Standard: OpenAPI (Swagger) Zapier will support scaffolding integrations with OpenAPI.
  5. SECRET TOKENS ARE SACRED > Never expire... > unless we

    have a Refresh Token... > (which should never expire) > ...until the user revokes.
  6. WORK THAT BODY > Limiting: limit, since > Pagination: page,

    since, meta > Filtering & Searching > Field Masks: fields GraphQL is awesome at all this, but at the cost of more complexity and no builtin support by Zapier.
  7. ORDER! > Field: created_at > Direction: DESC > Ideally multiple

    combinations Worst Case? Sorted from old to new, with pagination but no meta data.
  8. CONSIDER REST HOOKS > We won't call you... you call

    Us > Better UX than (Static) Webhooks +24% > Reduces server Load & Traffic 66x > Triggers Zaps Instantly Zapier has started to require REST Hooks for Public Apps.
  9. HTTP STATUS CODES ARE THERE FOR A REASON HTTP/1.0 200

    OK Content-Type: application/json { "status": "error", "code": 404, "message": "Object is not found." }
  10. ...AND CONTENT-TYPE HEADERS > Send what you say you will

    HTTP/1.0 400 Bad Request Content-Type: application/json Parameter 'id' is missing. > Don't mix content types HTTP/1.0 401 Unauthorized Content-Type: text/html <html> <title>Login</title> ...