Discover Differences Between REST API and GraphQL

Jacob Mitchell
6 min readApr 8, 2023

--

REST API GraphQL Web development API design Client-server architecture Resource identification HTTP methods Query language Data fetching Data relationships Caching Scalability Performance Flexibility Efficiency Under-fetching Over-fetching Server-side implementation Client-side implementation API best practices. REST API GraphQL Web development API design Client-server architecture Resource identification HTTP methods Query language Data fetching Data relationships Caching Scalability Performanc
Discover Differences Between REST API and GraphQL for Web Developers

In the world of web development, there are several ways to build and consume APIs (Application Programming Interfaces). REST (Representational State Transfer) and GraphQL are two popular API architectural styles used for building web applications. Although both REST and GraphQL are used for building APIs, they are quite different in their approach and functionality. In this article, we will take a closer look at the differences between REST and GraphQL.

In the world of web development, there are several ways to build and consume APIs (Application Programming Interfaces). REST (Representational State Transfer) and GraphQL are two popular API architectural styles used for building web applications. Although both REST and GraphQL are used for building APIs, they are quite different in their approach and functionality. In this article, we will take a closer look at the differences between REST and GraphQL.

REST API

REST is an architectural style that was first introduced by Roy Fielding in his doctoral dissertation in 2000. REST APIs are built on top of HTTP (Hypertext Transfer Protocol) and use standard HTTP verbs like GET, POST, PUT, PATCH, and DELETE to communicate with the server. REST APIs are stateless, meaning that the server does not maintain any state between requests. Each request sent to the server contains all the necessary information for the server to complete the request.

REST APIs are resource-centric, meaning that each endpoint represents a specific resource. For example, if you have a blog, you might have endpoints for articles, comments, and users. Each endpoint is represented by a URL, and the HTTP verb determines what action should be performed on that resource. For example, a GET request to the /articles endpoint would return a list of articles, while a POST request to the same endpoint would create a new article.

REST APIs are widely used and are supported by many programming languages and frameworks. They are also very easy to cache, which can significantly improve performance.

GraphQL

GraphQL is a query language for APIs that was developed by Facebook in 2012 and was released as an open-source project in 2015. GraphQL APIs are also built on top of HTTP, but they use a single endpoint for all requests. Instead of having multiple endpoints for different resources, all queries and mutations are sent to a single endpoint, and the request body contains the necessary information for the server to complete the request.

GraphQL APIs are schema-based, meaning that the server defines a schema that describes all the available types, queries, and mutations. Clients can then query the server for specific fields, and the server returns only the requested data. This allows clients to fetch exactly what they need and reduces overfetching and underfetching of data.

GraphQL APIs also support real-time updates through subscriptions. Clients can subscribe to a specific query, and the server will send updates to the client whenever the data changes.

Differences between REST and GraphQL

Now that we have a basic understanding of REST and GraphQL, let’s take a closer look at the differences between the two.

Data fetching

One of the most significant differences between REST and GraphQL is how they fetch data. With REST, each endpoint represents a specific resource, and the server returns all the data for that resource. This means that if you need to fetch data for multiple resources, you need to make multiple requests to the server.

With GraphQL, clients can specify exactly what data they need, and the server returns only that data. This means that clients can fetch data for multiple resources with a single request, reducing the number of requests needed to fetch all the necessary data.

Schema

Another significant difference between REST and GraphQL is how they define their schemas. REST APIs do not have a defined schema and rely on the documentation to explain the available endpoints and their functionality. This makes it challenging for clients to understand the API and know what data is available.

GraphQL APIs, on the other hand, define a schema that describes all the available types, queries, and mutations. This schema is strongly typed and can be used to generate documentation and client-side code. This makes it much easier for clients to understand the API and know what data is available.

Caching

REST APIs are very easy to cache since each endpoint represents a specific resource, and the server returns

all the data for that resource. This makes it easy for clients to cache the data and avoid making unnecessary requests to the server.

GraphQL APIs, on the other hand, are more challenging to cache since clients can request different fields and nested data structures. However, GraphQL provides a solution to this by allowing clients to specify a unique identifier for each query. This identifier can be used to cache the result of the query and avoid making unnecessary requests to the server.

Real-time updates

GraphQL APIs support real-time updates through subscriptions, which allow clients to subscribe to a specific query and receive updates whenever the data changes. This makes GraphQL ideal for applications that require real-time updates, such as chat applications, online games, and financial applications.

REST APIs, on the other hand, do not support real-time updates natively. To implement real-time updates with REST, clients need to use technologies like WebSockets or Server-Sent Events, which can be more complicated to implement.

Error handling

With REST APIs, error handling can be challenging since errors are returned as HTTP status codes, which can be ambiguous. Clients need to rely on the documentation to understand the meaning of each status code.

With GraphQL APIs, errors are returned as part of the response, which includes a list of errors and their corresponding messages. This makes it easier for clients to understand and handle errors.

Examples

To illustrate the differences between REST and GraphQL, let’s look at some examples.

REST API Example

Suppose you have a blog with the following endpoints:

  • /articles — returns a list of articles
  • /articles/{id} — returns a specific article
  • /articles/{id}/comments — returns a list of comments for a specific article

To fetch the title and author of an article and its comments, you would need to make multiple requests to the server:

GET /articles/1
GET /articles/1/comments

The server would return the following responses:

GET /articles/1
{
"id": 1,
"title": "REST vs. GraphQL",
"author": "John Doe",
"content": "Lorem ipsum...",
"created_at": "2023-04-08T12:00:00Z"
}

GET /articles/1/comments
[
{
"id": 1,
"article_id": 1,
"author": "Jane Doe",
"content": "Great article!",
"created_at": "2023-04-08T12:05:00Z"
},
{
"id": 2,
"article_id": 1,
"author": "Bob Smith",
"content": "Thanks for sharing!",
"created_at": "2023-04-08T12:10:00Z"
}
]

GraphQL Example

With GraphQL, you could fetch the same data with a single query:

POST /graphql
{
"query": "query GetArticle($id: Int!) {
article(id: $id) {
title
author
comments {
author
content
created_at
}
}
}",
"variables": {
"id": 1
}
}

The server would return the following response:

{
"data": {
"article": {
"title": "REST vs. GraphQL",
"author": "John Doe",
"comments": [
{
"author": "Jane Doe",
"content": "Great article!",
"created_at": "2023-04-08T12:05:00Z"
},
{
"author": "Bob Smith",
"content": "Thanks for sharing!",
"created_at": "2023-04-08T12:10:00Z"
}
]
}
}
}

Conclusion

In conclusion, both REST and GraphQL have their advantages and disadvantages, and the choice between them depends on the specific needs of your application. REST is a good choice for simple, resource-based APIs, while GraphQL is ideal for complex, data-intensive APIs. REST is easy to learn and widely adopted, while GraphQL is more flexible and provides better performance and developer productivity.

When choosing between REST and GraphQL, consider factors such as the complexity of your data, the need for real-time updates, the importance of caching, and the experience of your development team. With the right choice, you can build a robust and scalable API that meets the needs of your users and your business.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Jacob Mitchell
Jacob Mitchell

Written by Jacob Mitchell

Software engineer, Technical writer, writing about software development </>

No responses yet

Write a response