GraphQL vs REST: How to make the right choice?
Published: 2020-11-06 13:20:33

---
title:GraphQL vs REST: How to make the right choice?
published: true
description: 
tags: 
//cover_image: 
---

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ng18ovheli42ojj1zksc.png)
## When to Use GraphQL vs REST?

In the GraphQL vs REST battle, the latter is often cited as a point of reference. However, many advocates in favor of the more advanced technology GraphQL supposedly boasts. How do these two API design architectures really stack up against one another?

In this article, we will look at the differences and similarities between both solutions and compare their benefits and limitations. Let us try and determine which one truly surpasses the other or certain automation needs may call for one solution in particular.

## What is the Difference Between GraphQL vs REST?

The core difference between GraphQL and [REST API](https://strapi.io/documentation/v3.x/content-api/api-endpoints.html) is that the former is a specification, a query language, as well as a set of tools that utilizes HTTP to operate over a single endpoint. REST, on the other hand, serves as an architectural concept used to implement web services. Recently, GraphQL has been employed to optimize the performance and flexibility of existing APIs, whereas REST has often been the option of choice to create new ones. 

## What is REST?

REST operates on the logic that everything is a resource identified by a URL. In the REST paradigm, the textual representations of web resources can be manipulated by RESTful web service systems. To that end, the architecture relies on a predefined set of stateless operations such as POST, PUT, DELETE, GET, etc. For instance, one would put a GET request through to the resource’s URL. The response would then arrive in a JSON format, or in any format, the API calls for.

The main benefit of REST is that it is scalable and decouples client and server, allowing developers to work on products and applications independently. Compatible with a wide range of formats, it can meet a variety of needs.

A key issue, however, is that multiple requests must be sent in order to access and combine data from different endpoints. In addition, developers often have to deal with over-fetching (information downloaded in excess of what the application needs) and under-fetching (not enough information received by the client, which then has to make several requests.

## What is GraphQL ?

The GraphQL vs REST debate stems from the fact that GraphQL is ruled by the same constraints as REST APIs. What sets it apart, however, is that the data is organized in a single graph-type interface. [The GraphQL schema](https://strapi.io/documentation/v3.x/getting-started/graphql.html) is used to define objects in the form of nodes, whose relationships are represented by edges within the graph. A resolver then backs up the object and accesses the data on the server. The implication is that the GraphQL query language gives the option to tailor requests to some very particular requirements.

This architecture solves any performance issues related to overfetching by allowing the user to receive only the data they specifically requested. In addition, several entities can be combined into a single query. GraphQL has the merit of accommodating client-side changes without impacting the server by making it possible to have rapid product iterations on the front-end. As for the back-end, developers who use GraphQL gain significant insight into any data request and into how the available data is being used. Thanks to GraphQL, developers can improve API performance by deprecating disused fields, since every client can specify the exact information they require. The client is directly informed as to how it can access the data in question and, since its structure is known both by the front-end and the back-end teams, they are not co-dependent.

Yet, because this architecture doesn’t follow HTTP caching specifications and uses a single endpoint, network-level caching is compromised. With that said, caching does remain possible thanks to several workarounds. For instance, identifiers can be derived from globally unique IDs. Caching can be done at the client level, at the individual resolver level, at the whole response level, etc. Finally, because it adds a level of complexity, GraphQL isn’t always the best answer to some simple API needs.

## Why Use GraphQL vs REST?

The main advantage of GraphQL vs REST is its query language, which allows it to tailor the request to the developer’s needs, be it for a set of objects or for specific fields an entity contains. This gives them the ability to gather information from one particular endpoint without having to receive a whole set of data along with it. GraphQL can look for precise information and limit its efforts – and therefore the amount of processing it requires – to the bare minimum, making it worthwhile.

When Should I Use REST API?

However, the GraphQL vs REST question does remain valid because GraphQL cannot match the practicality of REST. This is the reason why, in many cases, it is still considered the industry standard when it comes to deploying APIs. It is also characterized by a more significant amount of tooling, which GraphQL simply does not have … yet!

The bottom line is that for anyone serious about creating automation, wondering whether to favor GraphQL vs REST is perfectly warranted. While the learning curve is undeniable and GraphQL is not as established as REST, being able to sort through the data before it is even fetched has great advantages. Without having to process large amounts of data, the performance also increases when using GraphQL, which can translate into huge wins once at scale.           

This is why Strapi chooses to offer both options. Whether you wish to build your content API using RESTful or GraphQL, Strapi strives to bring you the most customizable experience in content management solutions. 

[Install Strapi now](https://strapi.io/) and start creating flexible data structures, writing, editing, and managing any content types, and building the apps you want, with complete freedom.