DEV Community

Tomek Poniatowicz for GraphQL Editor

Posted on • Edited on • Originally published at blog.graphqleditor.com

GraphQL vs REST: Performance

This time let’s take a look at another important aspect of GraphQL vs REST discussion - the PERFORMANCE.

GraphQL vs REST ; Performance vs Reliability

The main GraphQL quality is being less loquacious than traditional REST API. GraphQL treats performance as its top priority while REST is focused on keeping services reliability as their main objective. Even if a REST API returns only a basic partial, it is still transferring more data, while GraphQL is always aiming for the smallest possible request. In an example, if the client needs a field, they request it, and if the API adds a new field, clients don't get it, unless it's being added into the GraphQL query.

No wasted bits over the wire

You all have seen APIs where you need to GET /author first and then fetch each book individually via GET /author/:id/books/:id endpoint. This result in n+1 queries, a well-known performance issue face in REST APIs. While REST API calls are chained on the client side before the final representation can be formed for display, in GraphQL it's simplified by enabling the server to combined all the data for the client within a single query which results in fewer bits being transferred over the wire.

{
  author (id: "1") {
    name
    book (id: "5") {
      title
    }
  }
}
Enter fullscreen mode Exit fullscreen mode
{
  "data": {
    "author: {
      "name": "George R.R. Martin",
      "book": [
        {
          "title": "A Dance with Dragons"
        }
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Conclusion

GraphQL is faster than REST because as you can pick the fields you want to query, so the request will always be the smallest possible. Additionally, with GraphQL, you can enquire multiple entities in one request, and because less bits will be transferred over the wire so your projects will perform faster than while using REST.

Top comments (5)

Collapse
 
rcdmk profile image
Ricardo Souza

Would love to see some real benchmarks on this...

Collapse
 
evilplatypus profile image
EvilPlatypus

You are comparing a terrible implementation of REST to a normal GraphQL implementation. If one of the functional needs is to list all the books from an author, surely the REST API would implement a GET request (like GET /author/:id/books/) returning all the books.

Collapse
 
luisvargastije profile image
Luis Vargas • Edited

Isn't it possible to specify fields in the query parameter for a REST endpoint?

for example:

/api/authors/1?fields={name, {books(id: 5) {title}}

then getting a result similar to next:

{
  "name": "George R.R. Martin",
  "book": [
    {
      "title": "A Dance with Dragons"
    }
  ]
}
Collapse
 
karsens profile image
Karsens

What about the parsing of the graphql query. I think this is pretty cpu heavy and should also be factored in.

Collapse
 
tomekponiat profile image
Tomek Poniatowicz

What about the parsing of the JSON query? Its also pretty CPU heavy and should also be factored in. BTW you can send GraphQL and JSON but finally, you must resolve query the same with path parser and path args in REST.