API Design

Learn to design APIs that are understandable, consistent, evolvable, secure, observable, performant and difficult to misuse. Never memorize an endpoint convention without knowing what the client needs, what the contract guarantees, and how it can change without breaking anyone.

Start with the consumers

What are you designing?

Public REST API

Which consumers will you never meet, and what must the contract promise them without a conversation?

The learning loop

Every lesson and lab returns to the same chain. An endpoint is not designed until you can answer every step for it.

RequirementConsumersResource ModelStyleContractValidationAuthorizationErrorsIdempotencyPaginationVersioningObservabilityEvolutionTrade-offs

Flagship experiences

Learn → model → design → compare → simulate → break → review → evolve → practice → interview.

Learning modules

94 lessons
API Fundamentals8

An API is a behavioral contract, not a list of endpoints. Requirements before endpoints, consumer tasks before resources, granularity, ownership — and why internal APIs still need contracts.

Resource & Capability Modeling7

From domain to resources, from resources to operations. Resource vs action, state machines with explicit transitions, backend-for-frontend, and composition — without REST dogma.

HTTP Semantics8

Methods as promises: safety, idempotency, and what retries, proxies and caches are allowed to assume. Status codes that mean something, conditional requests, and caching as part of the contract.

API Styles7

REST, RPC, gRPC and GraphQL as tools with prices, not religions. What each buys, what each costs operationally, and how consumer environment decides — never “which one is best”.

Request & Response Design7

Required vs optional vs null, response models that are not database rows, over- and under-fetching, batch endpoints, size limits, and file uploads that bypass the API for the bytes.

Error Models5

A stable error contract: machine-readable codes, a taxonomy clients can branch on, field-level validation feedback, explicit retryability, and honest partial-failure semantics.

Pagination, Filtering & Search7

Every list endpoint is a query API. Offset vs cursor under concurrent writes, stable ordering, filter allowlists, search as a different contract — and the index each promise requires.

Idempotency & Concurrency8

The network loses responses, so clients retry. Idempotency keys, dedup vs idempotency, optimistic concurrency with versions, lost-update prevention, and consistency the contract admits to.

Real-Time & Async Operations7

When request/response stops fitting: WebSocket message contracts, SSE, streaming, the async job pattern for long-running work, and how completion actually reaches the client.

Webhooks5

Your contract running against someone else’s server: delivery states, retries, duplicate events, ordering you must not assume, and the signature that makes any of it trustworthy.

API Security Boundary6

Where authentication and authorization live in the contract: token placement, resource-level permission design, scopes, API keys, rate limits and quotas as documented behavior.

Versioning & Evolution11

The longest-lived part of the contract. Additive change, enum evolution, deprecation as a process, consumer telemetry before removal, schema-first vs code-first, docs and SDKs.

Performance & Observability8

The API-shaped levers: payload size, compression, request count, caching. Request IDs, metrics without high-cardinality labels, logs that never contain tokens, and contract tests.

Not a REST tutorial

01
Contract
what the client may assume
02
Guarantees
retries, ordering, consistency
03
Evolution
change without breakage
04
Trade-offs
what every choice costs

Engineer Atlas never teaches "REST endpoints should use nouns" as a rule. It teaches what contract the client actually needs, which guarantees the API should provide, and how that contract can evolve without breaking consumers — then lets you break your own design to see whether the guarantees hold.