The question "should we use GraphQL, REST, or gRPC?" is the wrong question. The right question is "which communication boundaries exist in our system, and which protocol optimizes for each boundary's constraints?" A system might use gRPC between backend services for performance, GraphQL as a BFF (backend-for-frontend) layer for client applications, and REST for public-facing partner APIs. This is not over-engineering — it is matching the tool to the constraint.
The Trade-Off Matrix
| Dimension | REST | GraphQL | gRPC |
|---|---|---|---|
| Learning curve | Low | Medium-high | Medium |
| Over/under-fetching | Common problem | Solved by design | Solved by design |
| Performance | Good | Good with caching | Excellent |
| Browser support | Native | Via HTTP POST | Requires proxy |
| Streaming | SSE/WebSocket | Subscriptions | Native bidirectional |
| Schema/contract | OpenAPI (optional) | Built-in (SDL) | Built-in (protobuf) |
| Caching | HTTP caching native | Requires effort | No HTTP caching |
| Tooling ecosystem | Massive | Large, maturing | Good, growing |
| Best boundary | Public APIs, simple CRUD | Client-facing BFF | Service-to-service |
REST in 2026
REST is not dead. It remains the best choice for public APIs where broad client compatibility matters, for simple CRUD operations where the overhead of GraphQL or gRPC is not justified, and for systems where HTTP caching is critical to performance. The maturity of OpenAPI tooling for code generation, documentation, and testing is unmatched.
Where REST struggles is in client applications that need data from multiple resources. A mobile app rendering a dashboard might need to call 5-8 REST endpoints sequentially or in parallel, over-fetching data from each. GraphQL solves this by allowing the client to request exactly the data shape it needs in a single request.
GraphQL in 2026
GraphQL has matured past the hype cycle into practical production use. The type system provides a contract between frontend and backend teams that eliminates a category of integration bugs. Federation (via Apollo or similar) allows multiple backend services to contribute to a single graph, enabling organizational scaling without monolithic API layers.
The challenges remain: N+1 query problems require DataLoader patterns, caching is harder than REST (no native HTTP caching for POST requests), and the flexibility that makes GraphQL powerful also makes it harder to optimize on the server side — clients can construct pathologically expensive queries if rate limiting and query complexity analysis are not implemented.
gRPC in 2026
gRPC dominates service-to-service communication in systems where latency and throughput matter. Protobuf serialization is 3-10x faster than JSON. HTTP/2 multiplexing eliminates head-of-line blocking. Native streaming support enables real-time data flows without the ceremony of WebSocket management. The code generation from protobuf definitions eliminates hand-written serialization code across languages.
The main limitation is browser support. gRPC requires HTTP/2, which browsers support for server communication but not for gRPC's specific framing. gRPC-Web solves this with a proxy layer, but adds complexity. For client-facing applications, gRPC is typically behind a REST or GraphQL gateway.
The AI Agent API Pattern
AI agents are creating new API design challenges. An agent that orchestrates multiple tools needs a protocol that supports schema discovery (what tools are available?), typed inputs and outputs (what does each tool accept and return?), and streaming (long-running operations need progress updates). Anthropic's Model Context Protocol (MCP) addresses this with a JSON-RPC-based protocol specifically designed for AI-tool interaction.
For agent-to-service communication in production systems, the emerging pattern is gRPC with reflection for internal services and MCP-compatible interfaces for LLM orchestration layers.
- Public partner APIs → REST with OpenAPI specification
- Client-facing BFF → GraphQL with persisted queries and complexity limits
- Service-to-service → gRPC with protobuf contracts
- Real-time streaming → gRPC bidirectional streams or GraphQL subscriptions
- AI agent tool interfaces → MCP or JSON-RPC with schema discovery
“The protocol debate ended when teams stopped asking which protocol is best and started asking which protocol is best for each communication boundary in their system.”