&gt; GraphQL is an ORM for rest apis<p>No, GraphQL is a protocol that replaces REST.<p>Its closest analogue is the unholy beast that is SOAP + WSDL, except without the insanity of XML. With SOAP&#x2F;WSDL you declare a schema for your API, which then accepts API calls containing parameters. SOAP&#x2F;WSDL follows a classical RPC paradigm where you execute functions that take positional arguments.<p>GraphQL dispenses with that terminology, but is still very much RPCish. A key difference is that &quot;arguments&quot; are keyword-based. Where SOAP&#x2F;WSDL would have you pass a &quot;complex type&quot; (ie., a struct) with optional fields, in GraphQL everything is built out of structs. Another key difference is that the output follows the structure of the input.<p>GraphQL remaps REST&#x27;s paths to nested keys. For example, given the routes:<p><pre><code>  &#x2F;books
  &#x2F;books&#x2F;:id
  &#x2F;books&#x2F;:id&#x2F;authors
</code></pre>
This becomes:<p><pre><code>  query {
    book(id: ...) {
      authors
    }
  }
</code></pre>
Where REST doesn&#x27;t help you is when you want to be able to filter on a lot of things — either your API becomes an explosion of all permutations of relationships, or you do (as many do) create a &quot;query API&quot; that takes all sorts of criteria as inputs. For example: When you get a books&#x27; authors you might want to filter by editors only. Or you want to find all books written by an author that were published in the 1950s. REST also doesn&#x27;t help the client pick which fields to include, or which relationships to follow. Sure, you can implement it on top of REST, but any such solution becomes ad-hoc and app-specific.<p>Part of that is, firstly, because REST is a set of rules, not a complete protocol, and secondly, REST wants to deal with resources, not queries. Queries (ie., POST to some collection) are left as an exercise for the reader.<p>Coincidentally, there is no reason why you can&#x27;t encode GraphQL queries as GET URLs via paths:<p><pre><code>  &#x2F;books&#x2F;id=1&#x2F;year=1950..1959&#x2F;authors&#x2F;name=~John
</code></pre>
This probably violates the tenets of REST, which says that resource URLs should uniquely identify a resource. I forget what REST says, if anything, about &quot;views&quot; into resources.