!!! Overview[1]
[{$pagename}] is a [protocol] and a query [Interface Definition Language] for [APIs] and a run-time for performing queries with your existing [data]. 

[{$pagename}] provides a complete and understandable description of the [data] in your [API], gives [clients] the power to ask for exactly what they need and nothing more, makes it easier to evolve [APIs] over time, and enables powerful developer tools.

[{$pagename}] is a data query language developed internally by [Facebook] in [2012|Year 2012] before being publicly released in [2015|Year 2015]

[{$pagename}] provides an alternative to [REST] and ad-hoc [Web Service] architectures


[{$pagename}] allows the [client] to specify the properties of a [Resource] that is to be provided rather than the properties dictated by an [API], [schema], [Interface Definition Language] or the [server] author.

!! Architecture[2] 
[{Image src='GraphQL/graphQL-architecutre.png' caption='Architecture' align=left width=1024 height=768 style='font-size: 120%}] \\


[{$pagename}] requires a [GraphQL Server] and a [GraphQL Client] which use a [JSON] based [GraphQL schema language].

[{$pagename}] [query] is a [string] that is sent to a server to be interpreted and fulfilled, which then returns [JSON] back to the client.
\\[Example] [{$pagename}] [Request]:
%%prettify 
{{{
{
  hero {
    id
    name
    friends {
      id
      name
    }
  }
}
}}} 
/%

\\[Example] [{$pagename}] [Response]:
%%prettify 
{{{
{
  "hero": {
    "id": "2001",
    "name": "R2-D2",
    "friends": [
      {
        "id": "1000",
        "name": "Luke Skywalker"
      },
      {
        "id": "1002",
        "name": "Han Solo"
      },
      {
        "id": "1003",
        "name": "Leia Organa"
      }
    ]
  }
}
}}} 
/%


[{$pagename}] queries access not just the properties of one [resource] but also smoothly follow references between them. While typical [REST] [APIs] require loading from multiple [URLs], [{$pagename}] [APIs] get all the [data] your app needs in a single request. Apps using [{$pagename}] can be quick even on slow mobile [network] connections.

!! More Information
There might be more information for this subject on one of the following:
[{ReferringPagesPlugin before='*' after='\n' }]
----
* [#1] - [graphql|http://graphql.org/|target='_blank'] - based on information obtained 2017-03-12
* [#2] - [Introduction to GraphQL|https://learngraphql.com/basics/introduction|target='_blank'] - based on information obtained 2017-03-12