Most RESTful APIs aren't really RESTful
Terminology & Semantic Drift
- Many argue that “REST API” now colloquially means “HTTP+JSON API with CRUD-ish verbs and maybe OpenAPI,” not Fielding’s original REST.
- Some prefer terms like “HTTP API”, “REST-like”, or “REST-ish” to avoid arguing about correctness.
- Several note this is similar to how terms like Agile, DevOps, or OOP have drifted from original definitions.
HATEOAS and “True” REST
- Core REST constraints (notably HATEOAS and media types) are rarely implemented.
- Critics say HATEOAS adds payload bloat, complexity, and requires hypermedia-aware clients that almost never exist outside browsers.
- Supporters claim it improves evolvability, discoverability, and decoupling, but mostly when the client is generic (browser, API browser, LLM) rather than a bespoke app.
HTTP APIs in Practice (RPC, JSON, GraphQL)
- Common real-world pattern: RPC-like JSON over HTTP (often POST-only or GET+POST) plus status codes.
- Many see this as pragmatic: easy to implement, test (curl/httpie), and integrate with OpenAPI, codegen, and tooling.
- Some mix “resource-ish” endpoints for data with explicit action endpoints (e.g.
/vote,/search) where REST semantics fit poorly. - GraphQL is praised for discoverability and flexible querying, but criticized for performance, complexity, and bypassing HTTP semantics.
HTTP Verbs, Status Codes, and Security
- Strong disagreement over strict verb usage:
- Purists want GET safe/idempotent and non-mutating; warn about crawlers, prefetching, caching, CSRF assumptions, SameSite cookies, etc.
- Others happily mutate via GET or use POST for reads when URLs/filters get complex.
- Status codes are widely misused; teams bike-shed on 4xx vs 5xx, PUT vs PATCH, etc., or collapse everything to 200 with JSON error fields.
- Some argue strict HTTP semantics aid proxies, caching, rate limiting; others say it adds little over application-level error handling.
REST, UI, and Clients (Humans vs Machines)
- One camp: REST/HATEOAS fundamentally targets human-driven hypermedia (the Web itself); browsers + people are the “evolvable client.”
- Machine clients generally rely on out‑of‑band knowledge (docs, schemas, generated code), so full HATEOAS brings little value and is hard to use.
- AI/LLM agents are mentioned as a possible future where hypermedia-style APIs and richer schemas could matter again.
Experiences & Trade-offs
- Several report trying to build fully RESTful/HATEOAS APIs and abandoning it: too much server and client complexity, little actual use of links.
- For most business apps, teams optimize for feature delivery speed, a workable contract (often OpenAPI), and predictable behavior, not academic purity.
- Consensus thread: understand REST’s ideas (statelessness, resource thinking, HTTP semantics), but design “HTTP APIs” pragmatically for your consumers.