GraphQL vs REST -  Conclusion
Tags: graphql, rest, webservices, javascript
Published: 2021-06-28 20:09:09

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](https://www.linkedin.com/learning/learning-graphql) by @eveporcello on Linkedin Learning_
* _[GraphQL Tutorial](https://www.youtube.com/watch?v=Y0lDGjwRYKw&list=PL4cUxeGkcC9iK6Qhn-QLcXCXPQUov1U7f) 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:
1. Both GraphQL and REST are based on the concept of a resource, and they specify IDs for those resources.
2. Both GraphQL and REST rely on frameworks and libraries to handle the tiny networking details.
3. 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 !
![Cheers](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eq2zal0878wp735byq1c.png)