JSTAcademy
0 XP
Dashboard
Technology
APIs & Integrations
13 min
Masters+155 XP
Technology · Masters

APIs & Integrations

Webhooks, REST, OAuth, and how modern systems talk to each other
13 min read+155 XP on completionCert: Technology
Tap any word in the text below to start reading from there.

APIs & Integrations

Every piece of software you build will talk to other software. Payment providers, authentication systems, AI models, CRMs, email platforms, social media APIs — the value of your product increasingly comes from how intelligently it orchestrates these external services, not from what it builds from scratch.

REST: The Lingua Franca

REST is not a protocol — it is a set of conventions that emerged as the most practical way to design HTTP APIs. The conventions:

  • Resources as nouns, not verbs: /users/123 not /getUser?id=123
  • HTTP verbs carry intent: GET (read), POST (create), PUT/PATCH (update), DELETE (remove)
  • Stateless requests: the server holds no session state between requests; the client sends auth credentials (typically a Bearer token in the Authorization header) with every call
  • Standard status codes: 200 OK, 201 Created, 400 Bad Request, 401 Unauthorized, 404 Not Found, 429 Too Many Requests, 500 Internal Server Error

When consuming a third-party REST API, the first things to check: authentication method, base URL, rate limits, and pagination strategy. Most production APIs paginate results — they return 25–100 items plus a cursor or page number, not the full dataset in one call.

Webhooks: Event-Driven Integration

Polling is asking "is it done yet?" every N seconds. Webhooks are the system telling you when it is done. The difference in efficiency is massive at scale.

Stripe uses webhooks to notify you when a payment succeeds. GitHub uses them to trigger your CI pipeline when code is pushed. Twilio uses them to tell you when an SMS is delivered.

Setting up a webhook endpoint:

  1. You expose a public HTTPS URL on your server (/webhooks/stripe)
  2. You register that URL with the external service
  3. When an event fires, the service sends a POST request to your URL with event data as JSON
  4. Your server processes the event and returns HTTP 200 within ~5 seconds (or the service will retry)

Critical: always verify webhook signatures. Stripe, for example, includes a header Stripe-Signature containing an HMAC-SHA256 signature of the payload. If you do not verify it, any attacker who knows your webhook URL can send fake events.

OAuth 2.0 Flows

OAuth is about delegation: a user grants your app permission to act on their behalf, without giving you their password.

The Authorization Code flow (used for web apps):

  1. User clicks "Connect with Stripe" on your app
  2. Your app redirects to Stripe's OAuth server with your client_id and requested scopes
  3. User logs in to Stripe and approves the permissions
  4. Stripe redirects back to your app with a code parameter
  5. Your server exchanges that code (plus your client_secret) for an access_token
  6. You use the access token in API calls on the user's behalf

The access token is short-lived (often 1 hour). A refresh_token (long-lived) allows you to get new access tokens without re-prompting the user.

Error Handling and Retries

Network calls fail. Database connections drop. Third-party APIs go down for maintenance. Robust integrations handle failure gracefully.

The retry pattern for transient failures:

  • Catch HTTP 500, 503, or network timeout errors
  • Wait before retrying (exponential backoff: 1s, 2s, 4s, 8s)
  • Set a maximum retry count (3–5 attempts)
  • Log every retry with the error and attempt number

For critical operations (payments, data writes), use idempotency keys: include a unique ID with every request so that if you retry a timed-out request, the server recognizes the duplicate and returns the original result rather than processing twice.

API Design Principles

When you are building an API others will consume:

  • Version from day one (/v1/...) — you will need to make breaking changes
  • Return consistent error shapes: { error: { code: "NOT_FOUND", message: "..." } }
  • Document with OpenAPI/Swagger so developers can generate client code automatically
  • Use pagination for any collection endpoint that could return more than 50 items
  • Never expose internal database IDs in public APIs — use UUIDs
0%