Why?

  In order to manage and maintain the increasingly complex data requirements of modern web/mobile apps.

Even if RESTful (with HATEOAS specification) API normalize and bring solutions for generic API, when performance and custom query become necessary GraphQL is the best solution.

Perhaps a shower before? SOAP = Service Oriented Application Protocol

Client & Server share a WSDL = Web Service Description Language (in XML the less verbose language :D)

Some problems: verbose, use HTTP POST only (no respect Idempotent principle), heavy

REST = REpresentational State Transfert

REST Implementation

HATEOAS = Hypermedia As The Engine Of Application State

Like with WEB technology use API with hyperlinks model, thus return data contains links allow to use with the current resource(s) requested

In order to normalize and structure some notations have been created like HAL = Hypertext Application Language
But also many libraries like traverson for frontend (with HAL)