![]() |
VOOZH | about |
Traditional REST APIs handle client–server communication well, but modern applications often need a more flexible and efficient way to fetch data. GraphQL addresses this by allowing clients to request exactly the data they need in a single query.
Example: Suppose we have a REST API for a blog. If we want to get a blog post and its author information then We have to make two separate requests to the server:
But In GraphQL, we will request both in one query and It will reduce network overhead.
Query:
query {
post(id: "1") {
title
content
author {
name
email
}
}
}Response:
{
"data": {
"post": {
"title": "Introduction to GraphQL",
"content": "GraphQL is a powerful query language for APIs...",
"author": {
"name": "Alice Smith",
"email": "alice@example.com"
}
}
}
}GraphQL consists of several core components that define how data is structured, queried, and modified in an API. Understanding these components helps developers build and interact with GraphQL services efficiently.
It defines the data types that can be queried and their relationships. GraphQL uses its own language that is Schema Definition Language (SDL) for writing the schema. It is a human-readable language and It does not depends upon any specific language or framework. Schemas has two main types:
GraphQL defines custom types to define the structure of data. There are two main types of Type:
It is used to retrieve data from a GraphQL server. A query specifies the fields and data that the client wants to retrieve. It is similar to GET requests in REST APIs but allow to request exactly the data we need. It is reducing over-fetching or under-fetching.
It is used to modify data on the server. It can be used for creating, updating, or deleting data. Mutations are similar to POST, PUT, or DELETE requests in REST APIs.
The GraphQL schema defines the structure of the API, including the available data types, queries, and mutations. The following example demonstrates a basic schema design for managing books.
type Book {
id: ID!
title: String!
author: String!
}
type Query {
books: [Book!]!
book(id: ID!): Book
}
type Mutation {
createBook(title: String!, author: String!): Book
updateBook(id: ID!, title: String, author: String): Book
deleteBook(id: ID!): Boolean
}
We have defined three main types:
1. Book Type:
The Book type represents a book object with three fields:
2. Query Type:
The Query type defines fields used to retrieve data from the server.
3. Mutation Type:
A mutation is used to modify data on the server. Mutations can perform operations such as:
GraphQL works by allowing clients to send queries to a GraphQL server to request specific data. The server processes these queries and returns only the requested fields in a structured format, usually JSON.
The working process of GraphQL typically involves the following steps:
GraphQL has several features that set it apart from traditional REST APIs, offering developers a more flexible and efficient way to manage data. Let's explore these features as follows:
GraphQL offers several advantages that make it a popular choice for modern API development.
Here are some key differences between GraphQL and REST API:
GraphQL | REST API |
|---|---|
GraphQL uses a single endpoint to perform all operations such as fetching, creating, updating, or deleting data. | REST APIs use multiple endpoints for different resources and operations. |
In GraphQL, the client specifies exactly what data it needs in the query. | In REST, the server defines the structure of the response returned by each endpoint. |
GraphQL reduces over-fetching and under-fetching of data by returning only the requested fields. | REST APIs may cause over-fetching or under-fetching, requiring multiple requests. |
GraphQL supports real-time data updates using subscriptions. | REST APIs usually rely on polling or WebSockets for real-time updates. |
GraphQL typically does not require versioning, as clients request only the needed fields. | REST APIs often use versioning (v1, v2, etc.) when the API changes. |
GraphQL has a strongly typed schema, which clearly defines available data types and relationships. | REST APIs do not always enforce a strict schema structure. |
GraphQL is commonly used in modern applications with complex data requirements. | REST APIs are widely used and have a large, mature ecosystem of tools and libraries. |