GraphQL and RESTful are both front-end and back-end communication specifications used in website architecture for data querying. GraphQL is a data querying language developed by Facebook internally in 2012 and open-sourced in 2015 as an alternative to the RESTful architecture system. Both are based on HTTP for requesting and receiving data, but compared to RESTful, GraphQL allows clients to specify the data to be queried in the request, while RESTful requires API definition on the server side first. Therefore, they have many similarities and some differences. Below, we compare GraphQL and RESTful in terms of resources, routing, and request processing.
For an API request, the core content is the resource, which is the response data result returned by the request to the server. The core idea of RESTful is that each resource can be represented by a URL (including the request path and parameters). For example, we can use a GET request to retrieve the corresponding data: a GET request that, when run, returns a response (using the example tool Apidog).
In the above example, you can see that a resource and how to request data are closely related, and the example is actually a "Query endpoint". We need to define the data model that will be returned in advance so that we can retrieve the data returned by the server when we make the request.
However, GraphQL is different. In GraphQL, the request and the definition of the data model are actually separate. You can define multiple data models on the server side, and you can also query the server for different data models when making requests. For example, using the same tool as in the above example (APOLLO) to define the Query data model on the server side:
If you need to Query this schema, create a Query type on the Server side.
And then, the front end is ready to initiate the request.
It can be seen that both GraphQL and RESTful obtain data responses from the server by requesting a URL, but there are still significant differences in requesting resources. In RESTful, the returned content of a resource is predefined and determined by the server, while in GraphQL, the server only defines the available resources, and the client decides on the specific resources it needs through fields.
Whether it is GraphQL or RESTful, designing a good API must be predictable, and you should be able to know what kind of results to expect just by looking at the API definition. Describing the API, describing the request parameters, and defining the response are all very important parts of the API definition.
For RESTful requests, we can take a look at the following examples: Example tool: Apidog In GraphQL, we can define data models and requests in the schema, as shown in the following example: Example tool: APOLLO
Server data model and request definition: Request definition initiated by the client:
Overall, RESTful displays a complete request by defining the various descriptions, paths, parameters, and responses of the API, while GraphQL can define the client and server's descriptions of the request separately.
Finally, when it comes to requests in GraphQL and RESTful, what are the differences in request processing? Whether it is a GraphQL or RESTful request, it is requested via a URL, and the server-side processes the request and returns the corresponding data.
For RESTful requests:
- The server receives the request and extracts the request method (such as GET in the example above) and the URL path.
- The server framework finds the relevant API code and method.
- The requested data result is obtained by executing the code.
- The server framework encapsulates the request result and returns it to the client.
For GraphQL requests:
- The server receives the HTTP request and extracts the corresponding GraphQL query information.
- The server calls the resolver for each field in the query statement by parsing the query statement.
- The query result is obtained after the resolver function is executed.
- The GraphQL framework encapsulates the request result and returns it to the client.
This article provides a simple understanding of the similarities and differences between these two major API request protocols. Many concepts are actually the same. The main differences are:
- RESTful requests return a resource through a URL, while GraphQL requests can obtain multiple resources in one API request.
- RESTful differentiate resources through URLs, while GraphQL differentiates resources through data types.
- GraphQL can precisely obtain the desired data results through the client's query definition, while the results of RESTful are defined by the server implementation. Currently, RESTful has certain advantages in terms of tools and plugins, but GraphQL is also catching up. You can experience it through the tools in the example: Apidog and APOLLO.