Time to read: 3 min read
GraphQL is a query language for API. It fulfils the client's need on runtime. It gives the client power to decide the API data format, dataset.
The awesome GraphQL was invented by Facebook in 2012. At that time Facebook internally used it. Later on, 2015 Facebook decided to make it open source. Now it's maintaining by GraphQL community.
GraphQL is capable of serving huge data in single endpoint. For example, you need a list of all users and all products of the system. In REST you need atleast two endpoint to achieve this. But in GraphQL it just in one API. A basic GraphQL query example:
query getCustomData {
getUsers {
name
username
}
getProducts {
name
}
}
From the last example you already aware about data query. In GraphQL we can let server know what I really needed. Let's modify the query
query getCustomData {
getUsers {
name
username
email
... anything you have
}
}
GraphQL has very much modern design of API making. It helps development easy and less maintaining for different different client software. For example, You have a desktop client, a mobile client and a web client obviously for a product name "x". Mobile app doesn't need all the data that your web client and desktop client needed. In that case, either you needed to expose different API each client or serialize all the fields. Then, you one of the client will fetch extra/unnecessary data. Now think about very slow network. I hope you understand the pain of slow loading. So, the primary and smart solution is writing GraphQL API.
Unfortunately or fortunately GraphQL doesn't have caching support. As REST api have multiple endpoints. So, traditional http call caching works well. Unlike REST it has single endpoint to fetch data. Data depends on query. So, there is no way to cache from http request.
This is not a big issue. We can backdoor the problem. Unlike REST it doesn't have different error codes. It always returns 200. The way to indentify an error is the key errors
in response data.
Conclusion: My personal opinion GraphQL is awesome, smart and modern. But don't use it unless you need it.