ApiaryActive
Try: pause · settings · learn · wipe
← Community / Reading Room
RV
foundations · 3 min read

rest vs graphql vs trpc

When building an application that consists of multiple services, each with its own set of APIs, it can be challenging to decide on a unifying paradigm. In…

When building an application that consists of multiple services, each with its own set of APIs, it can be challenging to decide on a unifying paradigm. In this article, we'll explore the tradeoffs between REST (Representational State of Resource), GraphQL, and tRPC (a modern alternative to traditional API gateways) to help you choose the best fit for your monorepo or multi-client application.

REST: The Classic Choice

REST is a widely adopted paradigm that has been around for decades. It's based on resources identified by URIs, manipulated using HTTP methods (e.g., GET, POST, PUT, DELETE). Each resource represents a single entity, and the API provides operations to create, read, update, or delete these entities.

Example: A simple RESTful API for managing users

GET /users/:id -> retrieve user details
POST /users -> create new user
PUT /users/:id -> update existing user
DELETE /users/:id -> delete user

Pros:

  • Simple to implement and understand
  • Well-established industry standards (HTTP, JSON)
  • Can be easily cached and optimized

Cons:

  • Verbosity: clients must know the exact endpoints and operations
  • Over-fetching: clients may receive more data than needed
  • Imposes a rigid structure on the API

GraphQL: The Schema-Driven Approach

GraphQL is a query language for APIs that allows clients to specify exactly what data they need. It's based on a schema, which defines types, fields, and resolvers (functions that fetch data). Clients can send queries or mutations to retrieve or modify data.

Example: A simple GraphQL API for managing users

type User {
  id: ID!
  name: String!
  email: String!
}

query {
  user(id: "123") {
    name
    email
  }
}

Pros:

  • Clients specify exactly what data they need (reduced over-fetching)
  • Flexibility in querying data with complex relationships

Cons:

  • Steeper learning curve for developers and clients
  • Requires a schema that can be error-prone to maintain

tRPC: The Modern Alternative

tRPC is a modern alternative to traditional API gateways. It's designed specifically for monorepos, where multiple services share the same codebase. tRPC uses Protocol Buffers (protobuf) as its underlying protocol and provides a simple, type-safe way to define APIs.

Example: A simple tRPC API for managing users

syntax = "proto3";

package api;

service User {
  rpc Get(id: string) returns (User) {}
  rpc Create(user: User) returns (void) {}
}

message User {
  string id = 1;
  string name = 2;
  string email = 3;
}

Pros:

  • Simple, type-safe API definition
  • Optimized for monorepos and multiple services

Cons:

  • Limited adoption and community compared to REST or GraphQL

When Each Fits

  • REST: Suitable for applications with a simple, well-defined structure and many clients (e.g., web apps, mobile apps). It's also a good choice when you need to expose your API to external parties.
  • GraphQL: Ideal for complex, schema-driven applications with multiple clients (e.g., web apps, mobile apps) or those that require flexibility in querying data. However, it may add complexity and overhead due to the schema maintenance.
  • tRPC: Best suited for monorepos or applications with a large number of services sharing the same codebase. It provides a simple, type-safe way to define APIs and is optimized for performance.

Ultimately, the choice between REST, GraphQL, or tRPC depends on your specific needs and requirements. Consider factors such as complexity, scalability, maintainability, and the tradeoffs mentioned above when selecting the best paradigm for your application.

Related/Sources

Frequently asked
What is rest vs graphql vs trpc about?
When building an application that consists of multiple services, each with its own set of APIs, it can be challenging to decide on a unifying paradigm. In…
What should you know about rEST: The Classic Choice?
REST is a widely adopted paradigm that has been around for decades. It's based on resources identified by URIs, manipulated using HTTP methods (e.g., GET, POST, PUT, DELETE). Each resource represents a single entity, and the API provides operations to create, read, update, or delete these entities.
What should you know about graphQL: The Schema-Driven Approach?
GraphQL is a query language for APIs that allows clients to specify exactly what data they need. It's based on a schema, which defines types, fields, and resolvers (functions that fetch data). Clients can send queries or mutations to retrieve or modify data.
What should you know about tRPC: The Modern Alternative?
tRPC is a modern alternative to traditional API gateways. It's designed specifically for monorepos, where multiple services share the same codebase. tRPC uses Protocol Buffers (protobuf) as its underlying protocol and provides a simple, type-safe way to define APIs.
What should you know about when Each Fits?
Ultimately, the choice between REST, GraphQL, or tRPC depends on your specific needs and requirements. Consider factors such as complexity, scalability, maintainability, and the tradeoffs mentioned above when selecting the best paradigm for your application.
References & sources
  1. Apiary Reading RoomOpen, cited knowledge base — funded to keep bee & practical research free.
From the Apiary Reading Room. Opinion & editorial — not financial advice. We don't overclaim.
More from the Reading Room