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.
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
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)