Communication & APIs
A query language for APIs that lets clients request exactly the fields they need in a single request, eliminating over- and under-fetching.
GraphQL is a query language and runtime for APIs developed at Facebook in 2012. Instead of exposing many fixed-shape REST endpoints, a GraphQL server exposes a single endpoint and a typed schema. Clients send queries that declare exactly which fields they need, and the server returns only that data — no over-fetching, no under-fetching, no need for round-trips to assemble related entities.
GraphQL excels for clients with diverse data needs (mobile apps, dashboards, complex UIs) and for products that evolve quickly: changing what data the UI shows is a client-side change, not a backend release. The schema doubles as documentation and enables strong client tooling (Apollo, Relay, urql, code generation, autocompletion).
The operational reality: GraphQL pushes complexity onto the server. Each field can fan out into expensive resolvers; without DataLoader-style batching, the n+1 problem returns. Caching is harder (GET-with-query-string is replaced by POST-with-body, defeating naive HTTP caching). Authorization must be enforced at the field level, not the endpoint.
Use GraphQL when you have one backend serving many clients with different data needs, or when the UI evolves faster than the API.
GraphQL servers require careful resolver design, custom caching, query complexity limits to prevent abuse, and discipline around schema evolution.
An architectural style for web APIs based on HTTP verbs (GET, POST, PUT, DELETE) acting on resources identified by URLs.
A high-performance RPC framework using HTTP/2, Protocol Buffers, and code generation for type-safe, low-latency service-to-service communication.
A single entry point that routes external requests to internal services, handling concerns like authentication, rate limiting, and request transformation in one place.
Storing copies of frequently accessed data in fast memory so that subsequent requests can be served without recomputing or refetching.
A persistent, bidirectional communication channel between client and server over a single TCP connection — the standard for real-time web features.
A buffer that holds messages between producers and consumers, enabling asynchronous processing and decoupling of services.