!!! 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