Today, in order to send data over HTTP one can employ the use of two very different API structures. There is the traditional method of using REST(Representational State Transfer) API.
This gets the job done. REST has gained a very high adoption rate in many application stacks in the last years.
On the other hand, GraphQL is a recent and rather dynamic API. It was developed by Facebook in 2012 and released for public use in 2015.
REST is a versatile web service API that has been hugely popular for its simplicity and its compatibility with many types of data. The core feature of REST is that it treats everything as a resource.
However, GraphQL being much more recently developed has quite a few advantages over this old timer. The problem with REST is that it takes multiple round trips to fetch and collect related information as one has to enter two suppurate GET commands to achieve this.
Moreover, because REST treats everything as a resource, it always returns data in its complete form. Thus, there is no way to access a part or a subset of the existing data.
Like REST, GraphQL is an API design architecture, but it has a different approach which is more flexible. The main important difference between the two is that GraphQL does not deal with dedicated resources.
Instead, everything is regarded as a graph and thus is connected. This means that you can tailor the request (query) to your needs by using the GraphQL query language and describing what you would like to get as an answer.
You can easily combine different entities in one query and you are able to specify which attributes should be included in the response on every level. Thus one can easily retrieve a subset of the whole data instead of retrieving the whole thing as seen in REST.
Hence, while REST was the traditional API to use, it has now started becoming obsolete due to the growing popularity of GraphQL due to the aforementioned issues.
The GraphQL approach is much more flexible and is able to overcome the major shortcomings of REST. Using the GraphQL query language one can exactly describe what the response should look like.
It is able to specify which fields should be included to limit the response to the data which is needed. Furthermore, one can use the graph and combine connected entities within a single GraphQL data query. Thus it makes for a better option.