Often developers tend to feel a constant pull from REST while using GraphQL and vice-versa because of their similarities and functionalities, through this article I hope to help you find the best fit for your app depending upon your use-case and tailor made requirements. Let's start !
If you're not aware of GraphQL, I would highly recommend you to checkout one of the below:
- Awesome crash course by @eveporcello on Linkedin Learning
- GraphQL Tutorial by Net Ninja on Youtube
Similarities between GraphQL and REST
GraphQL and REST essentially accomplish the same task, i.e., communicate with a server and retrieve data. Here are a few similarities between the two:
- Both GraphQL and REST are based on the concept of a resource, and they specify IDs for those resources.
- Both GraphQL and REST rely on frameworks and libraries to handle the tiny networking details.
- Both can differentiate if an API request is intended to read data or write it.
Why GraphQL ?
1. One Unique Endpoint: GraphQL exposes a single endpoint that allows you to access multiple resources.
2. One request, Many resources: Query one or more resources in the same request. This will avoid making multiple API calls for an operation.
3. No Over Fetching or Under Fetching: The main advantage of GraphQl over REST is that REST responses contain too much data or sometimes not enough data, which creates the need for another request. GraphQL solves this problem by fetching only the exact and specific data in a single request.
4. Extending APIs: Adding functionality wouldn't affect existing client GraphQL queries.
5. Bandwidth: If your API is intended to be used on a mobile application or a large application like Facebook Newsfeed, use GraphQL since it offers better bandwidth usage.
Why REST over GraphQL ?
1. Handling complex queries: We have to specify everything we want to bring. “. If you’re not careful, a few big queries can bring your server down to its knees. In that sense, GraphQL’s greatest strength can also be its greatest weakness.”
2. Code vulnerability in GraphQL: If an attacker wants to carry out a DDoS (Denial-of-service-attack) to an unprotected server, all he has to do is execute an expensive nested query to overload your server.
3. HTTP Caching: REST allows data to be cacheable, which might improve performance and scalability whereas, GraphQL uses a single endpoint and custom requests, so caching is complicated.
4. Error Reporting: With REST, you can use API responses and build a monitoring system for error messages. But error reporting in GraphQL leaves a lot to be desired, with the ubiquitous “200 K Error — Something went wrong” message.
5. Data Formats: REST APIs support various data formats (XML, JSON, HTML, plain text, etc.) whereas, GraphQL only supports JSON.
6. Rate Limiting: Another problem with GraphQL is rate-limiting. In REST API, you can simply specify that we allow only this amount of requests in one day", but in GraphQL, it is difficult to specify this type of statement.
Conclusion:
If your API is intended to be used on a mobile application or a large application like Facebook Newsfeed, use GraphQL since it offers better bandwidth usage. Or, applications where we usually need nested data to be fetched. i.e. blog posts with their comments and people details.
If you need caching and monitoring facilities in your API, use REST. Or, public APIs where we want to determine what to expose to the clients.
You can also use a combination of GraphQL and REST for a project. It all depends on your data and performance requirements.
Must Read:
Always try to follow and learn from case studies. Below are the case studies from Netflix Tech Blog:
- https://netflixtechblog.com/how-netflix-scales-its-api-with-graphql-federation-part-1-ae3557c187e2
- https://netflixtechblog.com/our-learnings-from-adopting-graphql-f099de39ae5f
.
"Learn Together, Grow Together !"
.
That's It ! And don't forget to explore various tools available for GraphQL !
Top comments (41)
Just want to mention the many built-on-rest protocols like Odata, HAL, HATEOS, JSON-LD, and JSON-API. Most of these take care of all of the arguments for graphql, while still remaining RESTful and utilizing all of the wonderful functionality provided by standard browser usage like caching. Odata especially is pretty awesome in my experience, and still allows you to request a very specific structure of data.
That's a great comment - people often think that it's a contest between simple & low-level REST on the one hand, and complex/sophisticated GraphQL on the other hand, but you're right to point out that it's not as black and white as that, and that there's a middle ground!
Thanks for reading the post !
I just googled these terms and found interesting. Thanks for sharing the knowledge, it will surely help :)
Rest and graphql shouldn't be comparable.
It's like comparing low level sockets to HTTP
Why not compare something more apples to apples like
{ json:api }
and GraphQL?Hey, I compared as both can communicate with a server and retrieve data and accomplish the same task as I mentioned in similarities.
Although, I like your POV of comparing graphql with { json:api } but most of the people are replacing REST with graphql in indsutry so I thought I should throw some light on graphql vs REST so that people can make better choice.
And, I would love to hear your experience on json:api :)
Anyways, thanks for reading the post and sharing your knowledge. It will surely help :)
Very informative
Thank You :)
In the "Why Rest" part you can eliminate points 1 and 2 by implementing key-values pair of the server for key - "name of the query" and in the server will be the value - "actual implementation of the query.
and only responed to this keys provided.
Of course you can provide paramaters so it's kinda of like calling a method on the server, you don't really care what's in the method, only the parameters and what the method returns.
You can validate as well the parameters to prevent overloading the server.
Hope it helps...
Good to know where REST might still be useful over GraphQL. Also see migrating from REST to GraphQL: devopedia.org/rest-api-to-graphql-...
Thanks for reading the post !
I saw the article and found interesting. Thanks for sharing your knowledge :)
Also I noticed you're founder of devopedia. It feels good when someone like you read and appreciate the post. Thanks ☺️
You can also write on Devopedia platform. Given your background, you can write an article on "MERN Stack"
Thanks. Yes, I will explore and try to write few on Devopedia as well :)
Nice article, I enjoyed it quite a bit!
Thank You ! Glad to hear that. I am planning to write next blog on the implementation of same i.e. implementation in graphql vs REST. I hope you'll like that too...
Also, in case of any suggestion, I would love to hear that :)
I will surely look forward to that too! keep up the great work
Thanks. will share the link here :)
In my experience there is single to no advantages in using Graphql over Rest on small to medium projects. In only brings complexity.
Oh okay, I am going to post a new blog on implementing the listed features in graphql vs REST in around 1 week. I will read more on the same. BTW, thanks for reading :-)
I had the experience in a real project, in this project we use GraphQL only for html reports and REST for all other interactions
Thanks for reading and sharing your experience :-)
Very useful blog post, thanks for sharing it
You're welcome ! Thanks for reading :)
very instesting
Thanks !
Some comments have been hidden by the post's author - find out more