Skip to content
Artwork for Software Engineer Interview Prep Podcast
Software Engineer Interview Prep Podcast · Saturday · 1 hr 10 min

Mastering REST API Design & Best Practices

"Design the backend for Twitter." Reciting HTTP verbs won't get you through that whiteboard session. In this deep dive we build a complete, staff-level blueprint for REST API design: the reasoning behind every rule, the trade-offs interviewers probe, and the patterns that keep large systems evolving safely. You'll learn: - Fielding's six REST constraints, and why statelessness unlocks horizontal scaling - The Richardson Maturity Model, from the "swamp of POX" to HATEOAS - URI design: stable identifiers, shallow nesting, filtering and sparse fieldsets - Safety and idempotency, PUT vs PATCH, and JSON Merge Patch vs JSON Patch - Status codes that show polish: 201 + Location, 409 Conflict, 410 Gone, 422 - Offset vs cursor pagination - Versioning, breaking changes, tolerant readers and the expand-contract pattern - Deprecation headers, RFC 7807 problem details and trace IDs - OAuth 2.0, API keys, JWTs and mutual TLS - Rate limiting: fixed window, sliding log, token bucket and leaky bucket - ETags, Cache-Control, and 202 Accepted for long-running jobs - OpenAPI and consumer-driven contract testing with Pact Chapters 00:00 The whiteboard challenge 01:35 An API as a city 02:20 Fielding's six constraints 03:28 Code on demand 04:38 Statelessness and scaling 07:44 The layered system 09:21 The Richardson Maturity Model 12:29 HATEOAS and server-driven state 15:13 Pragmatic hypermedia 15:59 URI design rules 17:30 Stable identifiers 18:38 Nesting vs flattening 20:12 Query parameters 20:59 Safety and idempotency 22:54 PUT vs PATCH 25:39 JSON Merge Patch vs JSON Patch 27:39 201, 202 and 204 28:25 409 Conflict and optimistic locking 30:19 410 Gone 31:07 400 vs 422 31:54 Response envelopes 32:41 Offset pagination 34:39 Cursor pagination 36:11 API versioning 38:55 Breaking vs non-breaking changes 40:30 Tolerant readers 41:40 The expand-contract pattern 44:46 Deprecation and Sunset headers 45:52 RFC 7807 problem details 46:41 Trace IDs 47:27 Never leak internals 48:14 Returning all validation errors 49:24 OAuth 2.0 and API keys 51:25 JWTs and mutual TLS 52:57 Rate-limiting algorithms 56:29 429 and Retry-After 57:15 ETags and Cache-Control 1:01:11 Async jobs with 202 Accepted 1:03:58 OpenAPI 1:05:30 Consumer-driven contracts with Pact 1:08:39 Recap: API design is empathy #RESTAPI #APIDesign #SystemDesign #BackendEngineering #SoftwareArchitecture #InterviewPrep Interview Prep Podcast

0:00-1:10:55

transcript

No transcript — this publisher did not publish one.

show notes

"Design the backend for Twitter." Reciting HTTP verbs won't get you through that whiteboard session. In this deep dive we build a complete, staff-level blueprint for REST API design: the reasoning behind every rule, the trade-offs interviewers probe, and the patterns that keep large systems evolving safely.


You'll learn:

- Fielding's six REST constraints, and why statelessness unlocks horizontal scaling

- The Richardson Maturity Model, from the "swamp of POX" to HATEOAS

- URI design: stable identifiers, shallow nesting, filtering and sparse fieldsets

- Safety and idempotency, PUT vs PATCH, and JSON Merge Patch vs JSON Patch

- Status codes that show polish: 201 + Location, 409 Conflict, 410 Gone, 422

- Offset vs cursor pagination

- Versioning, breaking changes, tolerant readers and the expand-contract pattern

- Deprecation headers, RFC 7807 problem details and trace IDs

- OAuth 2.0, API keys, JWTs and mutual TLS

- Rate limiting: fixed window, sliding log, token bucket and leaky bucket

- ETags, Cache-Control, and 202 Accepted for long-running jobs

- OpenAPI and consumer-driven contract testing with Pact


Chapters

00:00 The whiteboard challenge

01:35 An API as a city

02:20 Fielding's six constraints

03:28 Code on demand

04:38 Statelessness and scaling

07:44 The layered system

09:21 The Richardson Maturity Model

12:29 HATEOAS and server-driven state

15:13 Pragmatic hypermedia

15:59 URI design rules

17:30 Stable identifiers

18:38 Nesting vs flattening

20:12 Query parameters

20:59 Safety and idempotency

22:54 PUT vs PATCH

25:39 JSON Merge Patch vs JSON Patch

27:39 201, 202 and 204

28:25 409 Conflict and optimistic locking

30:19 410 Gone

31:07 400 vs 422

31:54 Response envelopes

32:41 Offset pagination

34:39 Cursor pagination

36:11 API versioning

38:55 Breaking vs non-breaking changes

40:30 Tolerant readers

41:40 The expand-contract pattern

44:46 Deprecation and Sunset headers

45:52 RFC 7807 problem details

46:41 Trace IDs

47:27 Never leak internals

48:14 Returning all validation errors

49:24 OAuth 2.0 and API keys

51:25 JWTs and mutual TLS

52:57 Rate-limiting algorithms

56:29 429 and Retry-After

57:15 ETags and Cache-Control

1:01:11 Async jobs with 202 Accepted

1:03:58 OpenAPI

1:05:30 Consumer-driven contracts with Pact

1:08:39 Recap: API design is empathy


#RESTAPI #APIDesign #SystemDesign #BackendEngineering #SoftwareArchitecture #InterviewPrep


Interview Prep Podcast