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 !
Oldest comments (41)
Very informative
Thank You :)
Awesome !! Insightful for me.
Thanks buddy :)
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 :)
personal opinion...
graphql = yuck
🤪
Hahaha, sometimes it is 😄
But sometimes GraphQL is the best fit 😝
Anyways, thanks for reading the post 😌
Very informative. Know your weaknesses and your strengths.
Thanks buddy !
Yes, I agree, only then you'll be able to make productive decisions for your project.
1001 article ...... poor arguments, thank you for spam, i dont know why i got notification for this...
The whole "why GraphQL" section is the same and for REST.
Same as in ?
Same as in the REST API.
Nice one👍
Thanks buddy :)
Thanks for reading the post and sharing your experience !
I started working on GraphQL few months back :)
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.
Thanks for reading the post !
I just googled these terms and found interesting. Thanks for sharing the knowledge, it will surely help :)
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!
Some comments have been hidden by the post's author - find out more