forked from graphql/graphql.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
205 lines (163 loc) · 60.3 KB
/
index.html
File metadata and controls
205 lines (163 loc) · 60.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
<!DOCTYPE html><html><head><meta charset="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/><title>Code | GraphQL</title><meta name="viewport" content="width=640"/><meta property="og:title" content="GraphQL: A query language for APIs."/><meta property="og:description" content="GraphQL provides a complete 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."/><meta property="og:type" content="website"/><meta property="og:url" content="http://graphql.org/"/><meta property="og:image" content="/img/og_image.png"/><meta property="og:image:type" content="image/png"/><meta name="twitter:card" content="summary"/><meta name="twitter:site" content="@graphql"/><meta name="twitter:title" content="GraphQL: A query language for APIs."/><meta name="twitter:description" content="GraphQL gives clients the power to ask for exactly what they need and nothing more, making it easier to evolve APIs over time."/><meta name="twitter:image" content="/img/twitter_image.png"/><link rel="shortcut icon" href="/img/favicon.png"/><link rel="home" type="application/rss+xml" href="/blog/rss.xml" title="GraphQL Team Blog"/><link rel="stylesheet" href="/style.css"/><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Rubik:300|Roboto:300"/><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono:400,400i,600"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/></head><body><header><section><a class="nav-home" href="/"><img class="nav-logo" src="/img/logo.svg" width="30" height="30"/>GraphQL</a><nav><a href="/learn/">Learn</a><a href="/code/" class="active">Code</a><a href="/community/">Community</a><a href="https://facebook.github.io/graphql/" target="_blank" rel="noopener noreferrer">Spec</a><a href="https://foundation.graphql.org/" target="_blank" rel="noopener noreferrer">Foundation</a></nav><div class="algolia-search-wrapper"><input type="text" id="algolia-search-input" placeholder="Search docs..."/></div></section></header><section><div class="documentationContent"><div class="inner-content"><h1>Code</h1><div><p>Many different programming languages support GraphQL. This list contains some of the more popular server-side frameworks, client libraries, services, and other useful stuff.</p><h2><a class="anchor" name="server-libraries"></a>Server Libraries <a class="hash-link" href="#server-libraries">#</a></h2><p>In addition to the GraphQL <a href="#javascript">reference implementations in JavaScript</a>, server libraries include:</p><ul><li><a href="#c-net">C# / .NET</a></li><li><a href="#clojure">Clojure</a></li><li><a href="#elixir">Elixir</a></li><li><a href="#erlang">Erlang</a></li><li><a href="#go">Go</a></li><li><a href="#groovy">Groovy</a></li><li><a href="#java">Java</a></li><li><a href="#javascript">JavaScript</a></li><li><a href="#php">PHP</a></li><li><a href="#python">Python</a></li><li><a href="#scala">Scala</a></li><li><a href="#ruby">Ruby</a></li></ul><h3><a class="anchor" name="c-net"></a>C# / .NET <a class="hash-link" href="#c-net">#</a></h3><ul><li><a href="https://github.com/graphql-dotnet/graphql-dotnet" target="_blank" rel="nofollow noopener noreferrer">graphql-dotnet</a>: GraphQL for .NET</li><li><a href="https://github.com/ckimes89/graphql-net" target="_blank" rel="nofollow noopener noreferrer">graphql-net</a>: Convert GraphQL to IQueryable</li><li><a href="https://github.com/ChilliCream/hotchocolate" target="_blank" rel="nofollow noopener noreferrer">Hot Chocolate</a>: GraphQL Server for .net core and .net classic</li></ul><h3><a class="anchor" name="clojure"></a>Clojure <a class="hash-link" href="#clojure">#</a></h3><h4><a class="anchor" name="alumbra-https-github-com-alumbra-alumbra"></a><a href="https://github.com/alumbra/alumbra" target="_blank" rel="nofollow noopener noreferrer">alumbra</a> <a class="hash-link" href="#alumbra-https-github-com-alumbra-alumbra">#</a></h4><p>A set of reusable GraphQL components for Clojure conforming to the data structures given in <a href="https://github.com/alumbra/alumbra.spec" target="_blank" rel="nofollow noopener noreferrer">alumbra.spec</a>.</p><pre class="prism language-clojure"><span class="punctuation">(</span>require '<span class="punctuation">[</span>alumbra<span class="punctuation">.</span>core <span class="punctuation">:</span><span class="keyword">as</span> alumbra<span class="punctuation">]</span>
'<span class="punctuation">[</span>claro<span class="punctuation">.</span>data <span class="punctuation">:</span><span class="keyword">as</span> data<span class="punctuation">]</span><span class="punctuation">)</span>
<span class="punctuation">(</span>def schema
"type Person <span class="punctuation">{</span> name<span class="punctuation">:</span> String<span class="operator">!</span><span class="punctuation">,</span> friends<span class="punctuation">:</span> <span class="punctuation">[</span>Person<span class="operator">!</span><span class="punctuation">]</span><span class="operator">!</span> <span class="punctuation">}</span>
type QueryRoot <span class="punctuation">{</span> <span class="function">person</span><span class="punctuation">(</span>id<span class="punctuation">:</span> ID<span class="operator">!</span><span class="punctuation">)</span><span class="punctuation">:</span> Person<span class="punctuation">,</span> me<span class="punctuation">:</span> Person<span class="operator">!</span> <span class="punctuation">}</span>
schema <span class="punctuation">{</span> query<span class="punctuation">:</span> QueryRoot <span class="punctuation">}</span>"<span class="punctuation">)</span>
<span class="punctuation">(</span>defrecord Person <span class="punctuation">[</span>id<span class="punctuation">]</span>
data<span class="operator">/</span>Resolvable
<span class="punctuation">(</span>resolve<span class="operator">!</span> <span class="punctuation">[</span>_ _<span class="punctuation">]</span>
<span class="punctuation">{</span><span class="punctuation">:</span>name <span class="punctuation">(</span>str <span class="string">"Person #"</span> id<span class="punctuation">)</span>
<span class="punctuation">:</span>friends <span class="punctuation">(</span>map <span class="operator">-</span><span class="operator">></span>Person <span class="punctuation">(</span>range <span class="punctuation">(</span>inc id<span class="punctuation">)</span> <span class="punctuation">(</span><span class="operator">+</span> id <span class="number">3</span><span class="punctuation">)</span><span class="punctuation">)</span><span class="punctuation">)</span><span class="punctuation">}</span><span class="punctuation">)</span><span class="punctuation">)</span>
<span class="punctuation">(</span>def QueryRoot
<span class="punctuation">{</span><span class="punctuation">:</span>person <span class="punctuation">(</span>map<span class="operator">-</span><span class="operator">></span>Person <span class="punctuation">{</span><span class="punctuation">}</span><span class="punctuation">)</span>
<span class="punctuation">:</span>me <span class="punctuation">(</span>map<span class="operator">-</span><span class="operator">></span>Person <span class="punctuation">{</span><span class="punctuation">:</span>id <span class="number">0</span><span class="punctuation">}</span><span class="punctuation">)</span><span class="punctuation">}</span><span class="punctuation">)</span>
<span class="punctuation">(</span>def app
<span class="punctuation">(</span>alumbra<span class="operator">/</span>handler
<span class="punctuation">{</span><span class="punctuation">:</span>schema schema
<span class="punctuation">:</span>query QueryRoot<span class="punctuation">}</span><span class="punctuation">)</span><span class="punctuation">)</span>
<span class="punctuation">(</span>defonce my<span class="operator">-</span>graphql<span class="operator">-</span>server
<span class="punctuation">(</span>aleph<span class="punctuation">.</span>http<span class="operator">/</span>start<span class="operator">-</span>server #'app <span class="punctuation">{</span><span class="punctuation">:</span>port <span class="number">3000</span><span class="punctuation">}</span><span class="punctuation">)</span><span class="punctuation">)</span></pre><pre class="prism language-bash">$ curl <span class="operator">-</span>XPOST <span class="string">"http://0:3000"</span> <span class="operator">-</span>H<span class="string">'Content-Type: application/json'</span> <span class="operator">-</span>d'<span class="punctuation">{</span>
<span class="string">"query"</span><span class="punctuation">:</span> <span class="string">"{ me { name, friends { name } } }"</span>
<span class="punctuation">}</span>'
<span class="punctuation">{</span><span class="string">"data"</span><span class="punctuation">:</span><span class="punctuation">{</span><span class="string">"me"</span><span class="punctuation">:</span><span class="punctuation">{</span><span class="string">"name"</span><span class="punctuation">:</span><span class="string">"Person #0"</span><span class="punctuation">,</span><span class="string">"friends"</span><span class="punctuation">:</span><span class="punctuation">[</span><span class="punctuation">{</span><span class="string">"name"</span><span class="punctuation">:</span><span class="string">"Person #1"</span><span class="punctuation">}</span><span class="punctuation">,</span><span class="punctuation">{</span><span class="string">"name"</span><span class="punctuation">:</span><span class="string">"Person #2"</span><span class="punctuation">}</span><span class="punctuation">]</span><span class="punctuation">}</span><span class="punctuation">}</span><span class="punctuation">}</span></pre><h4><a class="anchor" name="graphql-clj-https-github-com-tendant-graphql-clj"></a><a href="https://github.com/tendant/graphql-clj" target="_blank" rel="nofollow noopener noreferrer">graphql-clj</a> <a class="hash-link" href="#graphql-clj-https-github-com-tendant-graphql-clj">#</a></h4><p>A Clojure library that provides a GraphQL implementation.</p><p>Code that executes a hello world GraphQL query with <code>graphql-clj</code>:</p><pre class="prism language-clojure">
<span class="punctuation">(</span>def schema "type QueryRoot <span class="punctuation">{</span>
hello<span class="punctuation">:</span> String
<span class="punctuation">}</span>"<span class="punctuation">)</span>
<span class="punctuation">(</span>defn resolver<span class="operator">-</span>fn <span class="punctuation">[</span>type<span class="operator">-</span>name field<span class="operator">-</span>name<span class="punctuation">]</span>
<span class="punctuation">(</span><span class="keyword">get</span><span class="operator">-</span><span class="keyword">in</span> <span class="punctuation">{</span><span class="string">"QueryRoot"</span> <span class="punctuation">{</span><span class="string">"hello"</span> <span class="punctuation">(</span>fn <span class="punctuation">[</span>context parent <span class="operator">&</span> rest<span class="punctuation">]</span>
<span class="string">"Hello world!"</span><span class="punctuation">)</span><span class="punctuation">}</span><span class="punctuation">}</span>
<span class="punctuation">[</span>type<span class="operator">-</span>name field<span class="operator">-</span>name<span class="punctuation">]</span><span class="punctuation">)</span><span class="punctuation">)</span>
<span class="punctuation">(</span>require '<span class="punctuation">[</span>graphql<span class="operator">-</span>clj<span class="punctuation">.</span>executor <span class="punctuation">:</span><span class="keyword">as</span> executor<span class="punctuation">]</span><span class="punctuation">)</span>
<span class="punctuation">(</span>executor<span class="operator">/</span>execute nil schema resolver<span class="operator">-</span>fn <span class="string">"{ hello }"</span><span class="punctuation">)</span></pre><h4><a class="anchor" name="lacinia-https-github-com-walmartlabs-lacinia"></a><a href="https://github.com/walmartlabs/lacinia" target="_blank" rel="nofollow noopener noreferrer">lacinia</a> <a class="hash-link" href="#lacinia-https-github-com-walmartlabs-lacinia">#</a></h4><p>A full implementation of the GraphQL specification that aims to maintain external compliance with the specification.</p><h3><a class="anchor" name="elixir"></a>Elixir <a class="hash-link" href="#elixir">#</a></h3><ul><li><a href="https://github.com/absinthe-graphql/absinthe" target="_blank" rel="nofollow noopener noreferrer">absinthe</a>: GraphQL implementation for Elixir.</li><li><a href="https://github.com/graphql-elixir/graphql" target="_blank" rel="nofollow noopener noreferrer">graphql-elixir</a>: An Elixir implementation of Facebook's GraphQL.</li></ul><h3><a class="anchor" name="erlang"></a>Erlang <a class="hash-link" href="#erlang">#</a></h3><ul><li><a href="https://github.com/shopgun/graphql-erlang" target="_blank" rel="nofollow noopener noreferrer">graphql-erlang</a>: GraphQL implementation in Erlang.</li></ul><h3><a class="anchor" name="go"></a>Go <a class="hash-link" href="#go">#</a></h3><ul><li><a href="https://github.com/graphql-go/graphql" target="_blank" rel="nofollow noopener noreferrer">graphql-go</a>: An implementation of GraphQL for Go / Golang.</li><li><a href="https://github.com/graph-gophers/graphql-go" target="_blank" rel="nofollow noopener noreferrer">graph-gophers/graphql-go</a>: An active implementation of GraphQL in Golang (was <a href="https://github.com/neelance/graphql-go">https://github.com/neelance/graphql-go</a>).</li><li><a href="https://github.com/99designs/gqlgen" target="_blank" rel="nofollow noopener noreferrer">GQLGen</a> - Go generate based graphql server library.</li><li><a href="https://github.com/graphql-go/relay" target="_blank" rel="nofollow noopener noreferrer">graphql-relay-go</a>: A Go/Golang library to help construct a graphql-go server supporting react-relay.</li><li><a href="https://github.com/machinebox/graphql" target="_blank" rel="nofollow noopener noreferrer">machinebox/graphql</a>: An elegant low-level HTTP client for GraphQL.</li><li><a href="https://github.com/samsarahq/thunder" target="_blank" rel="nofollow noopener noreferrer">samsarahq/thunder</a>: A GraphQL implementation with easy schema building, live queries, and batching.</li></ul><h3><a class="anchor" name="groovy"></a>Groovy <a class="hash-link" href="#groovy">#</a></h3><h4><a class="anchor" name="gorm-graphql-https-github-com-grails-gorm-graphql"></a><a href="https://github.com/grails/gorm-graphql/" target="_blank" rel="nofollow noopener noreferrer">gorm-graphql</a> <a class="hash-link" href="#gorm-graphql-https-github-com-grails-gorm-graphql">#</a></h4><p><strong>Core Library</strong> - The GORM GraphQL library provides functionality to generate a GraphQL schema based on your GORM entities. In addition to mapping domain classes to a GraphQL schema, the core library also provides default implementations of "data fetchers" to query, update, and delete data through executions of the schema.</p><p><strong>Grails Plugin</strong> - In a addition to the Core Library, the GORM GraphQL Grails Plugin: </p><ul><li>Provides a controller to receive and respond to GraphQL requests through HTTP, based on their guidelines.</li><li>Generates the schema at startup with spring bean configuration to make it easy to extend.</li><li>Includes a <a href="https://github.com/graphql/graphiql" target="_blank" rel="nofollow noopener noreferrer">GraphiQL</a> browser enabled by default in development. The browser is accessible at /graphql/browser.</li><li>Overrides the default data binder to use the data binding provided by Grails</li><li>Provides a <a href="https://grails.github.io/gorm-graphql/latest/api/org/grails/gorm/graphql/plugin/testing/GraphQLSpec.html" target="_blank" rel="nofollow noopener noreferrer">trait</a> to make integration testing of your GraphQL endpoints easier</li></ul><p>See <a href="https://grails.github.io/gorm-graphql/latest/guide/index.html" target="_blank" rel="nofollow noopener noreferrer">the documentation</a> for more information.</p><h4><a class="anchor" name="gql-https-grooviter-github-io-gql"></a><a href="https://grooviter.github.io/gql/" target="_blank" rel="nofollow noopener noreferrer">GQL</a> <a class="hash-link" href="#gql-https-grooviter-github-io-gql">#</a></h4><p>GQL is a Groovy library for GraphQL</p><h3><a class="anchor" name="java"></a>Java <a class="hash-link" href="#java">#</a></h3><h4><a class="anchor" name="graphql-java-https-github-com-graphql-java-graphql-java"></a><a href="https://github.com/graphql-java/graphql-java" target="_blank" rel="nofollow noopener noreferrer">graphql-java</a> <a class="hash-link" href="#graphql-java-https-github-com-graphql-java-graphql-java">#</a></h4><p>A Java library for building GraphQL APIs.</p><p>Code that executes a hello world GraphQL query with <code>graphql-java</code>:</p><pre class="prism language-java"><span class="keyword">import</span> graphql<span class="punctuation">.</span>ExecutionResult<span class="punctuation">;</span>
<span class="keyword">import</span> graphql<span class="punctuation">.</span>GraphQL<span class="punctuation">;</span>
<span class="keyword">import</span> graphql<span class="punctuation">.</span>schema<span class="punctuation">.</span>GraphQLSchema<span class="punctuation">;</span>
<span class="keyword">import</span> graphql<span class="punctuation">.</span>schema<span class="punctuation">.</span>StaticDataFetcher<span class="punctuation">;</span>
<span class="keyword">import</span> graphql<span class="punctuation">.</span>schema<span class="punctuation">.</span>idl<span class="punctuation">.</span>RuntimeWiring<span class="punctuation">;</span>
<span class="keyword">import</span> graphql<span class="punctuation">.</span>schema<span class="punctuation">.</span>idl<span class="punctuation">.</span>SchemaGenerator<span class="punctuation">;</span>
<span class="keyword">import</span> graphql<span class="punctuation">.</span>schema<span class="punctuation">.</span>idl<span class="punctuation">.</span>SchemaParser<span class="punctuation">;</span>
<span class="keyword">import</span> graphql<span class="punctuation">.</span>schema<span class="punctuation">.</span>idl<span class="punctuation">.</span>TypeDefinitionRegistry<span class="punctuation">;</span>
<span class="keyword">import</span> <span class="keyword">static</span> graphql<span class="punctuation">.</span>schema<span class="punctuation">.</span>idl<span class="punctuation">.</span>RuntimeWiring<span class="punctuation">.</span>newRuntimeWiring<span class="punctuation">;</span>
<span class="keyword">public</span> <span class="keyword">class</span> <span class="class-name">HelloWorld</span> <span class="punctuation">{</span>
<span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="function">main</span><span class="punctuation">(</span>String<span class="punctuation">[</span><span class="punctuation">]</span> args<span class="punctuation">)</span> <span class="punctuation">{</span>
String schema <span class="operator">=</span> <span class="string">"type Query{hello: String} schema{query: Query}"</span><span class="punctuation">;</span>
SchemaParser schemaParser <span class="operator">=</span> <span class="keyword">new</span> <span class="class-name">SchemaParser</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">;</span>
TypeDefinitionRegistry typeDefinitionRegistry <span class="operator">=</span> schemaParser<span class="punctuation">.</span><span class="function">parse</span><span class="punctuation">(</span>schema<span class="punctuation">)</span><span class="punctuation">;</span>
RuntimeWiring runtimeWiring <span class="operator">=</span> <span class="function">newRuntimeWiring</span><span class="punctuation">(</span><span class="punctuation">)</span>
<span class="punctuation">.</span><span class="function">type</span><span class="punctuation">(</span><span class="string">"Query"</span><span class="punctuation">,</span> builder <span class="operator">-</span><span class="operator">></span> builder<span class="punctuation">.</span><span class="function">dataFetcher</span><span class="punctuation">(</span><span class="string">"hello"</span><span class="punctuation">,</span> <span class="keyword">new</span> <span class="class-name">StaticDataFetcher</span><span class="punctuation">(</span><span class="string">"world"</span><span class="punctuation">)</span><span class="punctuation">)</span><span class="punctuation">)</span>
<span class="punctuation">.</span><span class="function">build</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">;</span>
SchemaGenerator schemaGenerator <span class="operator">=</span> <span class="keyword">new</span> <span class="class-name">SchemaGenerator</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">;</span>
GraphQLSchema graphQLSchema <span class="operator">=</span> schemaGenerator<span class="punctuation">.</span><span class="function">makeExecutableSchema</span><span class="punctuation">(</span>typeDefinitionRegistry<span class="punctuation">,</span> runtimeWiring<span class="punctuation">)</span><span class="punctuation">;</span>
GraphQL build <span class="operator">=</span> GraphQL<span class="punctuation">.</span><span class="function">newGraphQL</span><span class="punctuation">(</span>graphQLSchema<span class="punctuation">)</span><span class="punctuation">.</span><span class="function">build</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">;</span>
ExecutionResult executionResult <span class="operator">=</span> build<span class="punctuation">.</span><span class="function">execute</span><span class="punctuation">(</span><span class="string">"{hello}"</span><span class="punctuation">)</span><span class="punctuation">;</span>
System<span class="punctuation">.</span>out<span class="punctuation">.</span><span class="function">println</span><span class="punctuation">(</span>executionResult<span class="punctuation">.</span><span class="function">getData</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">.</span><span class="function">toString</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">)</span><span class="punctuation">;</span>
<span spellcheck="true" class="comment">// Prints: {hello=world}</span>
<span class="punctuation">}</span>
<span class="punctuation">}</span></pre><p>See <a href="https://github.com/graphql-java/graphql-java" target="_blank" rel="nofollow noopener noreferrer">the graphql-java docs</a> for more information on setup.</p><h3><a class="anchor" name="javascript"></a>JavaScript <a class="hash-link" href="#javascript">#</a></h3><h4><a class="anchor" name="graphql-js-graphql-js-github-https-github-com-graphql-graphql-js-npm-https-www-npmjs-com-package-graphql"></a><a href="/graphql-js/">GraphQL.js</a> (<a href="https://github.com/graphql/graphql-js/" target="_blank" rel="nofollow noopener noreferrer">github</a>) (<a href="https://www.npmjs.com/package/graphql" target="_blank" rel="nofollow noopener noreferrer">npm</a>) <a class="hash-link" href="#graphql-js-graphql-js-github-https-github-com-graphql-graphql-js-npm-https-www-npmjs-com-package-graphql">#</a></h4><p>The reference implementation of the GraphQL specification, designed for running GraphQL in a Node.js environment.</p><p>To run a <code>GraphQL.js</code> hello world script from the command line:</p><pre class="prism language-bash">npm install graphql</pre><p>Then run <code>node hello.js</code> with this code in <code>hello.js</code>:</p><pre class="prism language-js"><span class="keyword">var</span> <span class="punctuation">{</span> graphql<span class="punctuation">,</span> buildSchema <span class="punctuation">}</span> <span class="operator">=</span> <span class="function">require</span><span class="punctuation">(</span><span class="string">'graphql'</span><span class="punctuation">)</span><span class="punctuation">;</span>
<span class="keyword">var</span> schema <span class="operator">=</span> <span class="function">buildSchema</span><span class="punctuation">(</span><span class="template-string"><span class="string">`
type Query {
hello: String
}
`</span></span><span class="punctuation">)</span><span class="punctuation">;</span>
<span class="keyword">var</span> root <span class="operator">=</span> <span class="punctuation">{</span> hello<span class="punctuation">:</span> <span class="punctuation">(</span><span class="punctuation">)</span> <span class="operator">=</span><span class="operator">></span> <span class="string">'Hello world!'</span> <span class="punctuation">}</span><span class="punctuation">;</span>
<span class="function">graphql</span><span class="punctuation">(</span>schema<span class="punctuation">,</span> <span class="string">'{ hello }'</span><span class="punctuation">,</span> root<span class="punctuation">)</span><span class="punctuation">.</span><span class="function">then</span><span class="punctuation">(</span><span class="punctuation">(</span>response<span class="punctuation">)</span> <span class="operator">=</span><span class="operator">></span> <span class="punctuation">{</span>
console<span class="punctuation">.</span><span class="function">log</span><span class="punctuation">(</span>response<span class="punctuation">)</span><span class="punctuation">;</span>
<span class="punctuation">}</span><span class="punctuation">)</span><span class="punctuation">;</span></pre><h4><a class="anchor" name="express-graphql-graphql-js-running-an-express-graphql-server-github-https-github-com-graphql-express-graphql-npm-https-www-npmjs-com-package-express-graphql"></a><a href="/graphql-js/running-an-express-graphql-server/">express-graphql</a> (<a href="https://github.com/graphql/express-graphql" target="_blank" rel="nofollow noopener noreferrer">github</a>) (<a href="https://www.npmjs.com/package/express-graphql" target="_blank" rel="nofollow noopener noreferrer">npm</a>) <a class="hash-link" href="#express-graphql-graphql-js-running-an-express-graphql-server-github-https-github-com-graphql-express-graphql-npm-https-www-npmjs-com-package-express-graphql">#</a></h4><p>The reference implementation of a GraphQL API server over an Express webserver. You can use this to run GraphQL in conjunction with a regular Express webserver, or as a standalone GraphQL server.</p><p>To run an <code>express-graphql</code> hello world server:</p><pre class="prism language-bash">npm install express express<span class="operator">-</span>graphql graphql</pre><p>Then run <code>node server.js</code> with this code in <code>server.js</code>:</p><pre class="prism language-js"><span class="keyword">var</span> express <span class="operator">=</span> <span class="function">require</span><span class="punctuation">(</span><span class="string">'express'</span><span class="punctuation">)</span><span class="punctuation">;</span>
<span class="keyword">var</span> graphqlHTTP <span class="operator">=</span> <span class="function">require</span><span class="punctuation">(</span><span class="string">'express-graphql'</span><span class="punctuation">)</span><span class="punctuation">;</span>
<span class="keyword">var</span> <span class="punctuation">{</span> buildSchema <span class="punctuation">}</span> <span class="operator">=</span> <span class="function">require</span><span class="punctuation">(</span><span class="string">'graphql'</span><span class="punctuation">)</span><span class="punctuation">;</span>
<span class="keyword">var</span> schema <span class="operator">=</span> <span class="function">buildSchema</span><span class="punctuation">(</span><span class="template-string"><span class="string">`
type Query {
hello: String
}
`</span></span><span class="punctuation">)</span><span class="punctuation">;</span>
<span class="keyword">var</span> root <span class="operator">=</span> <span class="punctuation">{</span> hello<span class="punctuation">:</span> <span class="punctuation">(</span><span class="punctuation">)</span> <span class="operator">=</span><span class="operator">></span> <span class="string">'Hello world!'</span> <span class="punctuation">}</span><span class="punctuation">;</span>
<span class="keyword">var</span> app <span class="operator">=</span> <span class="function">express</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">;</span>
app<span class="punctuation">.</span><span class="function">use</span><span class="punctuation">(</span><span class="string">'/graphql'</span><span class="punctuation">,</span> <span class="function">graphqlHTTP</span><span class="punctuation">(</span><span class="punctuation">{</span>
schema<span class="punctuation">:</span> schema<span class="punctuation">,</span>
rootValue<span class="punctuation">:</span> root<span class="punctuation">,</span>
graphiql<span class="punctuation">:</span> <span class="keyword">true</span><span class="punctuation">,</span>
<span class="punctuation">}</span><span class="punctuation">)</span><span class="punctuation">)</span><span class="punctuation">;</span>
app<span class="punctuation">.</span><span class="function">listen</span><span class="punctuation">(</span><span class="number">4000</span><span class="punctuation">,</span> <span class="punctuation">(</span><span class="punctuation">)</span> <span class="operator">=</span><span class="operator">></span> console<span class="punctuation">.</span><span class="function">log</span><span class="punctuation">(</span><span class="string">'Now browse to localhost:4000/graphql'</span><span class="punctuation">)</span><span class="punctuation">)</span><span class="punctuation">;</span></pre><h4><a class="anchor" name="apollo-server-https-www-apollographql-com-docs-apollo-server-github-https-github-com-apollographql-apollo-server-npm-https-www-npmjs-com-package-apollo-server-express"></a><a href="https://www.apollographql.com/docs/apollo-server/" target="_blank" rel="nofollow noopener noreferrer">apollo-server</a> (<a href="https://github.com/apollographql/apollo-server" target="_blank" rel="nofollow noopener noreferrer">github</a>) (<a href="https://www.npmjs.com/package/apollo-server-express" target="_blank" rel="nofollow noopener noreferrer">npm</a>) <a class="hash-link" href="#apollo-server-https-www-apollographql-com-docs-apollo-server-github-https-github-com-apollographql-apollo-server-npm-https-www-npmjs-com-package-apollo-server-express">#</a></h4><p>A set of GraphQL server packages from Apollo that work with various Node.js HTTP frameworks (Express, Connect, Hapi, Koa etc).</p><p>To run a hello world server with apollo-server-express:</p><pre class="prism language-bash">npm install apollo<span class="operator">-</span>server<span class="operator">-</span>express body<span class="operator">-</span>parser express graphql graphql<span class="operator">-</span>tools</pre><p>Then run <code>node server.js</code> with this code in <code>server.js</code>:</p><pre class="prism language-js"><span class="keyword">var</span> express <span class="operator">=</span> <span class="function">require</span><span class="punctuation">(</span><span class="string">'express'</span><span class="punctuation">)</span><span class="punctuation">;</span>
<span class="keyword">var</span> bodyParser <span class="operator">=</span> <span class="function">require</span><span class="punctuation">(</span><span class="string">'body-parser'</span><span class="punctuation">)</span><span class="punctuation">;</span>
<span class="keyword">var</span> <span class="punctuation">{</span> graphqlExpress<span class="punctuation">,</span> graphiqlExpress <span class="punctuation">}</span> <span class="operator">=</span> <span class="function">require</span><span class="punctuation">(</span><span class="string">'apollo-server-express'</span><span class="punctuation">)</span><span class="punctuation">;</span>
<span class="keyword">var</span> <span class="punctuation">{</span> makeExecutableSchema <span class="punctuation">}</span> <span class="operator">=</span> <span class="function">require</span><span class="punctuation">(</span><span class="string">'graphql-tools'</span><span class="punctuation">)</span><span class="punctuation">;</span>
<span class="keyword">var</span> typeDefs <span class="operator">=</span> <span class="punctuation">[</span><span class="template-string"><span class="string">`
type Query {
hello: String
}
schema {
query: Query
}`</span></span><span class="punctuation">]</span><span class="punctuation">;</span>
<span class="keyword">var</span> resolvers <span class="operator">=</span> <span class="punctuation">{</span>
Query<span class="punctuation">:</span> <span class="punctuation">{</span>
<span class="function">hello</span><span class="punctuation">(</span>root<span class="punctuation">)</span> <span class="punctuation">{</span>
<span class="keyword">return</span> <span class="string">'world'</span><span class="punctuation">;</span>
<span class="punctuation">}</span>
<span class="punctuation">}</span>
<span class="punctuation">}</span><span class="punctuation">;</span>
<span class="keyword">var</span> schema <span class="operator">=</span> <span class="function">makeExecutableSchema</span><span class="punctuation">(</span><span class="punctuation">{</span>typeDefs<span class="punctuation">,</span> resolvers<span class="punctuation">}</span><span class="punctuation">)</span><span class="punctuation">;</span>
<span class="keyword">var</span> app <span class="operator">=</span> <span class="function">express</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">;</span>
app<span class="punctuation">.</span><span class="function">use</span><span class="punctuation">(</span><span class="string">'/graphql'</span><span class="punctuation">,</span> bodyParser<span class="punctuation">.</span><span class="function">json</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">,</span> <span class="function">graphqlExpress</span><span class="punctuation">(</span><span class="punctuation">{</span>schema<span class="punctuation">}</span><span class="punctuation">)</span><span class="punctuation">)</span><span class="punctuation">;</span>
app<span class="punctuation">.</span><span class="function">use</span><span class="punctuation">(</span><span class="string">'/graphiql'</span><span class="punctuation">,</span> <span class="function">graphiqlExpress</span><span class="punctuation">(</span><span class="punctuation">{</span>endpointURL<span class="punctuation">:</span> <span class="string">'/graphql'</span><span class="punctuation">}</span><span class="punctuation">)</span><span class="punctuation">)</span><span class="punctuation">;</span>
app<span class="punctuation">.</span><span class="function">listen</span><span class="punctuation">(</span><span class="number">4000</span><span class="punctuation">,</span> <span class="punctuation">(</span><span class="punctuation">)</span> <span class="operator">=</span><span class="operator">></span> console<span class="punctuation">.</span><span class="function">log</span><span class="punctuation">(</span><span class="string">'Now browse to localhost:4000/graphiql'</span><span class="punctuation">)</span><span class="punctuation">)</span><span class="punctuation">;</span></pre><p>Apollo Server also supports all Node.js HTTP server frameworks: Express, Connect, HAPI and Koa.</p><h3><a class="anchor" name="php"></a>PHP <a class="hash-link" href="#php">#</a></h3><ul><li><a href="https://github.com/webonyx/graphql-php" target="_blank" rel="nofollow noopener noreferrer">graphql-php</a>: A PHP port of GraphQL reference implementation</li><li><a href="https://github.com/ivome/graphql-relay-php" target="_blank" rel="nofollow noopener noreferrer">graphql-relay-php</a>: A library to help construct a graphql-php server supporting react-relay.</li></ul><h4><a class="anchor" name="siler-https-siler-leocavalcante-com-graphql-github-https-github-com-leocavalcante-siler"></a><a href="https://siler.leocavalcante.com/graphql/" target="_blank" rel="nofollow noopener noreferrer">Siler</a> (<a href="https://github.com/leocavalcante/siler" target="_blank" rel="nofollow noopener noreferrer">github</a>) <a class="hash-link" href="#siler-https-siler-leocavalcante-com-graphql-github-https-github-com-leocavalcante-siler">#</a></h4><p>Siler is a PHP library powered with high-level abstractions to work with GraphQL.</p><p>To run a Siler hello world script:</p><pre class="prism language-graphql"><span class="type-def"><span class="keyword">type</span> Query <span class="fields"><span class="punctuation">{</span>
<span class="attr-name">hello</span><span class="punctuation">:</span> <span class="type-name">String</span>
<span class="punctuation">}</span></span></span></pre><pre class="prism language-php"><span class="operator"><</span><span class="operator">?</span>php
<span class="function">declare</span><span class="punctuation">(</span>strict_types<span class="operator">=</span><span class="number">1</span><span class="punctuation">)</span><span class="punctuation">;</span>
require_once <span class="string">'/path/to/vendor/autoload.php'</span><span class="punctuation">;</span>
use SilerDiactoros<span class="punctuation">;</span>
use SilerGraphql<span class="punctuation">;</span>
use SilerHttp<span class="punctuation">;</span>
$typeDefs <span class="operator">=</span> <span class="function">file_get_contents</span><span class="punctuation">(</span>__DIR__<span class="punctuation">.</span><span class="string">'/schema.graphql'</span><span class="punctuation">)</span><span class="punctuation">;</span>
$resolvers <span class="operator">=</span> <span class="punctuation">[</span>
<span class="string">'Query'</span> <span class="operator">=</span><span class="operator">></span> <span class="punctuation">[</span>
<span class="string">'hello'</span> <span class="operator">=</span><span class="operator">></span> <span class="string">'world'</span><span class="punctuation">,</span>
<span class="punctuation">]</span><span class="punctuation">,</span>
<span class="punctuation">]</span><span class="punctuation">;</span>
$schema <span class="operator">=</span> <span class="function">Graphqlschema</span><span class="punctuation">(</span>$typeDefs<span class="punctuation">,</span> $resolvers<span class="punctuation">)</span><span class="punctuation">;</span>
echo <span class="string">"Server running at http://127.0.0.1:8080"</span><span class="punctuation">;</span>
<span class="function">Httpserver</span><span class="punctuation">(</span><span class="function">Graphqlpsr7</span><span class="punctuation">(</span>$schema<span class="punctuation">)</span><span class="punctuation">,</span> <span class="keyword">function</span> <span class="punctuation">(</span>Throwable $err<span class="punctuation">)</span> <span class="punctuation">{</span>
<span class="function">var_dump</span><span class="punctuation">(</span>$err<span class="punctuation">)</span><span class="punctuation">;</span>
<span class="keyword">return</span> <span class="function">Diactorosjson</span><span class="punctuation">(</span><span class="punctuation">[</span>
<span class="string">'error'</span> <span class="operator">=</span><span class="operator">></span> <span class="keyword">true</span><span class="punctuation">,</span>
<span class="string">'message'</span> <span class="operator">=</span><span class="operator">></span> $err<span class="operator">-</span><span class="operator">></span><span class="function">getMessage</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">,</span>
<span class="punctuation">]</span><span class="punctuation">)</span><span class="punctuation">;</span>
<span class="punctuation">}</span><span class="punctuation">)</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="operator">-</span><span class="operator">></span><span class="function">run</span><span class="punctuation">(</span><span class="punctuation">)</span><span class="punctuation">;</span></pre><p>It also provides functionality for the construction of a WebSocket Subscriptions Server based on how Apollo works.</p><h3><a class="anchor" name="python"></a>Python <a class="hash-link" href="#python">#</a></h3><h4><a class="anchor" name="graphene-http-graphene-python-org-github-https-github-com-graphql-python-graphene"></a><a href="http://graphene-python.org/" target="_blank" rel="nofollow noopener noreferrer">Graphene</a> (<a href="https://github.com/graphql-python/graphene" target="_blank" rel="nofollow noopener noreferrer">github</a>) <a class="hash-link" href="#graphene-http-graphene-python-org-github-https-github-com-graphql-python-graphene">#</a></h4><p>A Python library for building GraphQL APIs.</p><p>To run a Graphene hello world script:</p><pre class="prism language-bash">pip install graphene</pre><p>Then run <code>python hello.py</code> with this code in <code>hello.py</code>:</p><pre class="prism language-python"><span class="keyword">import</span> graphene
<span class="keyword">class</span> <span class="class-name">Query</span><span class="punctuation">(</span>graphene<span class="punctuation">.</span>ObjectType<span class="punctuation">)</span><span class="punctuation">:</span>
hello <span class="operator">=</span> graphene<span class="punctuation">.</span><span class="function">String</span><span class="punctuation">(</span>name<span class="operator">=</span>graphene<span class="punctuation">.</span><span class="function">String</span><span class="punctuation">(</span>default_value<span class="operator">=</span><span class="string">"World"</span><span class="punctuation">)</span><span class="punctuation">)</span>
def <span class="function">resolve_hello</span><span class="punctuation">(</span>self<span class="punctuation">,</span> info<span class="punctuation">,</span> name<span class="punctuation">)</span><span class="punctuation">:</span>
<span class="keyword">return</span> <span class="string">'Hello '</span> <span class="operator">+</span> name
schema <span class="operator">=</span> graphene<span class="punctuation">.</span><span class="function">Schema</span><span class="punctuation">(</span>query<span class="operator">=</span>Query<span class="punctuation">)</span>
result <span class="operator">=</span> schema<span class="punctuation">.</span><span class="function">execute</span><span class="punctuation">(</span><span class="string">'{ hello }'</span><span class="punctuation">)</span>
<span class="function">print</span><span class="punctuation">(</span>result<span class="punctuation">.</span>data<span class="punctuation">[</span><span class="string">'hello'</span><span class="punctuation">]</span><span class="punctuation">)</span> # <span class="string">"Hello World"</span></pre><p>There are also nice bindings for <a href="https://facebook.github.io/relay/" target="_blank" rel="nofollow noopener noreferrer">Relay</a>, Django, SQLAlchemy, and Google App Engine.</p><h3><a class="anchor" name="ruby"></a>Ruby <a class="hash-link" href="#ruby">#</a></h3><h4><a class="anchor" name="graphql-ruby-https-github-com-rmosolgo-graphql-ruby"></a><a href="https://github.com/rmosolgo/graphql-ruby" target="_blank" rel="nofollow noopener noreferrer">graphql-ruby</a> <a class="hash-link" href="#graphql-ruby-https-github-com-rmosolgo-graphql-ruby">#</a></h4><p>A Ruby library for building GraphQL APIs.</p><p>To run a hello world script with <code>graphql-ruby</code>:</p><pre class="prism language-bash">gem install graphql</pre><p>Then run <code>ruby hello.rb</code> with this code in <code>hello.rb</code>:</p><pre class="prism language-ruby">require <span class="string">'graphql'</span>
QueryType <span class="operator">=</span> GraphQL<span class="punctuation">:</span><span class="punctuation">:</span>ObjectType<span class="punctuation">.</span>define <span class="keyword">do</span>
name <span class="string">'Query'</span>
field <span class="punctuation">:</span>hello <span class="keyword">do</span>
type types<span class="punctuation">.</span>String
resolve <span class="operator">-</span><span class="operator">></span> <span class="punctuation">(</span>obj<span class="punctuation">,</span> args<span class="punctuation">,</span> ctx<span class="punctuation">)</span> <span class="punctuation">{</span> <span class="string">'Hello world!'</span> <span class="punctuation">}</span>
end
end
Schema <span class="operator">=</span> GraphQL<span class="punctuation">:</span><span class="punctuation">:</span>Schema<span class="punctuation">.</span>define <span class="keyword">do</span>
query QueryType
end
puts Schema<span class="punctuation">.</span><span class="function">execute</span><span class="punctuation">(</span><span class="string">'{ hello }'</span><span class="punctuation">)</span><span class="punctuation">.</span>to_json</pre><p>There are also nice bindings for Relay and Rails.</p><h3><a class="anchor" name="scala"></a>Scala <a class="hash-link" href="#scala">#</a></h3><h4><a class="anchor" name="sangria-http-sangria-graphql-org-github-https-github-com-sangria-graphql-sangria-a-scala-graphql-library-that-supports-relay-https-facebook-github-io-relay"></a><a href="http://sangria-graphql.org/" target="_blank" rel="nofollow noopener noreferrer">Sangria</a> (<a href="https://github.com/sangria-graphql/sangria" target="_blank" rel="nofollow noopener noreferrer">github</a>): A Scala GraphQL library that supports <a href="https://facebook.github.io/relay/" target="_blank" rel="nofollow noopener noreferrer">Relay</a>. <a class="hash-link" href="#sangria-http-sangria-graphql-org-github-https-github-com-sangria-graphql-sangria-a-scala-graphql-library-that-supports-relay-https-facebook-github-io-relay">#</a></h4><p>An example of a hello world GraphQL schema and query with <code>sangria</code>:</p><pre class="prism language-scala"><span class="keyword">import</span> sangria<span class="punctuation">.</span>schema<span class="punctuation">.</span>_
<span class="keyword">import</span> sangria<span class="punctuation">.</span>execution<span class="punctuation">.</span>_
<span class="keyword">import</span> sangria<span class="punctuation">.</span>macros<span class="punctuation">.</span>_
val QueryType <span class="operator">=</span> <span class="function">ObjectType</span><span class="punctuation">(</span><span class="string">"Query"</span><span class="punctuation">,</span> fields<span class="punctuation">[</span>Unit<span class="punctuation">,</span> Unit<span class="punctuation">]</span><span class="punctuation">(</span>
<span class="function">Field</span><span class="punctuation">(</span><span class="string">"hello"</span><span class="punctuation">,</span> StringType<span class="punctuation">,</span> resolve <span class="operator">=</span> _ ⇒ <span class="string">"Hello world!"</span><span class="punctuation">)</span>
<span class="punctuation">)</span><span class="punctuation">)</span>
val schema <span class="operator">=</span> <span class="function">Schema</span><span class="punctuation">(</span>QueryType<span class="punctuation">)</span>
val query <span class="operator">=</span> graphql<span class="string">"{ hello }"</span>
Executor<span class="punctuation">.</span><span class="function">execute</span><span class="punctuation">(</span>schema<span class="punctuation">,</span> query<span class="punctuation">)</span> map println</pre><h2><a class="anchor" name="graphql-clients"></a>GraphQL Clients <a class="hash-link" href="#graphql-clients">#</a></h2><ul><li><a href="#c-net-1">C# / .NET</a></li><li><a href="#clojurescript-1">Clojurescript</a></li><li><a href="#go-1">Go</a></li><li><a href="#java-android">Java / Android</a></li><li><a href="#javascript-1">JavaScript</a></li><li><a href="#swift-objective-c-ios">Swift / Objective-C iOS</a></li><li><a href="#python-1">Python</a></li></ul><h3><a class="anchor" name="c-net-1"></a>C# / .NET <a class="hash-link" href="#c-net-1">#</a></h3><ul><li><a href="https://github.com/graphql-dotnet/graphql-client" target="_blank" rel="nofollow noopener noreferrer">GraphQL.Client</a>: A GraphQL Client for .NET.</li><li><a href="https://github.com/bkniffler/graphql-net-client" target="_blank" rel="nofollow noopener noreferrer">graphql-net-client</a>: Basic example GraphQL client for .NET.</li><li><a href="https://github.com/sahb1239/SAHB.GraphQLClient" target="_blank" rel="nofollow noopener noreferrer">SAHB.GraphQLClient</a>: GraphQL client which supports generating queries from C# classes</li></ul><h3><a class="anchor" name="clojurescript"></a>Clojurescript <a class="hash-link" href="#clojurescript">#</a></h3><ul><li><a href="https://github.com/oliyh/re-graph/" target="_blank" rel="nofollow noopener noreferrer">re-graph</a>: A GraphQL client implemented in Clojurescript with support for websockets.</li></ul><h3><a class="anchor" name="go-1"></a>Go <a class="hash-link" href="#go-1">#</a></h3><ul><li><a href="https://github.com/shurcooL/graphql#readme" target="_blank" rel="nofollow noopener noreferrer">graphql</a>: A GraphQL client implementation in Go.</li></ul><h3><a class="anchor" name="java-android"></a>Java / Android <a class="hash-link" href="#java-android">#</a></h3><ul><li><p><a href="https://github.com/apollographql/apollo-android" target="_blank" rel="nofollow noopener noreferrer">Apollo Android</a>: A strongly-typed, caching GraphQL client for Android, written in Java.</p></li><li><p><a href="https://github.com/americanexpress/nodes" target="_blank" rel="nofollow noopener noreferrer">Nodes</a>: A GraphQL JVM Client designed for constructing queries from standard model definitions. By American Express.</p></li></ul><h3><a class="anchor" name="javascript-1"></a>JavaScript <a class="hash-link" href="#javascript-1">#</a></h3><ul><li><a href="https://facebook.github.io/relay/" target="_blank" rel="nofollow noopener noreferrer">Relay</a> (<a href="https://github.com/facebook/relay" target="_blank" rel="nofollow noopener noreferrer">github</a>) (<a href="https://www.npmjs.com/package/react-relay" target="_blank" rel="nofollow noopener noreferrer">npm</a>): Facebook's framework for building React applications that talk to a GraphQL backend.</li><li><a href="http://apollographql.com/client/" target="_blank" rel="nofollow noopener noreferrer">Apollo Client</a> (<a href="https://github.com/apollographql/apollo-client" target="_blank" rel="nofollow noopener noreferrer">github</a>): A powerful JavaScript GraphQL client, designed to work well with React, React Native, Angular 2, or just plain JavaScript.</li><li><a href="https://github.com/graphcool/graphql-request" target="_blank" rel="nofollow noopener noreferrer">graphql-request</a>: A simple and flexible JavaScript GraphQL client that works in all JavaScript environments (the browser, Node.js, and React Native) - basically a lightweight wrapper around <code>fetch</code>.</li><li><a href="https://github.com/kadirahq/lokka" target="_blank" rel="nofollow noopener noreferrer">Lokka</a>: A simple JavaScript GraphQL client that works in all JavaScript environments (the browser, Node.js, and React Native).</li><li><a href="https://github.com/yoshuawuyts/nanogql" target="_blank" rel="nofollow noopener noreferrer">nanogql</a>: Tiny GraphQL client library using template strings.</li><li><a href="https://github.com/Houfeng/gq-loader" target="_blank" rel="nofollow noopener noreferrer">gq-loader</a>: A simple JavaScript GraphQL client,Let the *.gql file be used as a module through webpack loader.</li><li><a href="https://aws.github.io/aws-amplify" target="_blank" rel="nofollow noopener noreferrer">AWS Amplify</a>: A JavaScript library for application development using cloud services, which supports GraphQL backend and React components for working with GraphQL data.</li><li><a href="https://github.com/grafoojs/grafoo" target="_blank" rel="nofollow noopener noreferrer">Grafoo</a>: An all purpose GraphQL client with view layer integrations for multiple frameworks in just 1.6kb.</li></ul><h3><a class="anchor" name="swift-objective-c-ios"></a>Swift / Objective-C iOS <a class="hash-link" href="#swift-objective-c-ios">#</a></h3><ul><li><a href="https://www.apollographql.com/docs/ios/" target="_blank" rel="nofollow noopener noreferrer">Apollo iOS</a> (<a href="https://github.com/apollographql/apollo-ios" target="_blank" rel="nofollow noopener noreferrer">github</a>): A GraphQL client for iOS that returns results as query-specific Swift types, and integrates with Xcode to show your Swift source and GraphQL side by side, with inline validation errors.</li><li><a href="https://github.com/funcompany/graphql-ios" target="_blank" rel="nofollow noopener noreferrer">GraphQL iOS</a>: An Objective-C GraphQL client for iOS.</li></ul><h3><a class="anchor" name="python-1"></a>Python <a class="hash-link" href="#python-1">#</a></h3><ul><li><a href="https://github.com/graphql-python/gql" target="_blank" rel="nofollow noopener noreferrer">GQL</a>: A GraphQL client in Python.</li><li><a href="https://github.com/graphcool/python-graphql-client" target="_blank" rel="nofollow noopener noreferrer">python-graphql-client</a>: Simple GraphQL client for Python 2.7+.</li><li><a href="https://github.com/profusion/sgqlc" target="_blank" rel="nofollow noopener noreferrer">sgqlc</a>: A simple Python GraphQL client. Supports generating code generation for types defined in a GraphQL schema.</li></ul><h2><a class="anchor" name="tools"></a>Tools <a class="hash-link" href="#tools">#</a></h2><ul><li><a href="https://github.com/graphql/graphiql" target="_blank" rel="nofollow noopener noreferrer">graphiql</a> (<a href="https://www.npmjs.com/package/graphiql" target="_blank" rel="nofollow noopener noreferrer">npm</a>): An interactive in-browser GraphQL IDE.</li><li><a href="https://github.com/graphql/libgraphqlparser" target="_blank" rel="nofollow noopener noreferrer">libgraphqlparser</a>: A GraphQL query language parser in C++ with C and C++ APIs.</li><li><a href="https://github.com/graphql/graphql-language-service" target="_blank" rel="nofollow noopener noreferrer">Graphql Language Service</a>: An interface for building GraphQL language services for IDEs (diagnostics, autocomplete etc).</li><li><a href="https://quicktype.io" target="_blank" rel="nofollow noopener noreferrer">quicktype</a> (<a href="https://github.com/quicktype/quicktype" target="_blank" rel="nofollow noopener noreferrer">github</a>): Generate types for GraphQL queries in TypeScript, Swift, golang, C#, C++, and more.</li></ul><h2><a class="anchor" name="services"></a>Services <a class="hash-link" href="#services">#</a></h2><ul><li><a href="http://www.apollographql.com/engine/" target="_blank" rel="nofollow noopener noreferrer">Apollo Engine</a>: A service for monitoring the performance and usage of your GraphQL backend.</li><li><a href="https://graphcms.com/" target="_blank" rel="nofollow noopener noreferrer">GraphCMS</a>: A BaaS (Backend as a Service) that sets you up with a GraphQL backend as well as tools for content editors to work with the stored data.</li><li><a href="https://www.graph.cool" target="_blank" rel="nofollow noopener noreferrer">Graphcool</a> (<a href="https://github.com/graphcool" target="_blank" rel="nofollow noopener noreferrer">github</a>): A BaaS (Backend as a Service) providing a GraphQL backend for your applications with a powerful web ui for managing your database and stored data.</li><li><a href="https://www.reindex.io/baas/" target="_blank" rel="nofollow noopener noreferrer">Reindex</a> (<a href="https://github.com/reindexio/reindex-js" target="_blank" rel="nofollow noopener noreferrer">github</a>): A BaaS (Backend as a Service) that sets you up with a GraphQL backend targeted at applications using React and Relay.</li><li><a href="https://scaphold.io" target="_blank" rel="nofollow noopener noreferrer">Scaphold</a> (<a href="https://github.com/scaphold-io" target="_blank" rel="nofollow noopener noreferrer">github</a>): A BaaS (Backend as a Service) that sets you up with a GraphQL backend for your applications with many different integrations.</li><li><a href="https://tipe.io" target="_blank" rel="nofollow noopener noreferrer">Tipe</a> (<a href="https://github.com/tipeio" target="_blank" rel="nofollow noopener noreferrer">github</a>): A SaaS (Software as a Service) content management system that allows you to create your content with powerful editing tools and access it from anywhere with a GraphQL or REST API.</li><li><a href="https://aws.amazon.com/appsync/" target="_blank" rel="nofollow noopener noreferrer">AWS AppSync</a>: Fully managed GraphQL service with realtime subscriptions, offline programming & synchronization, and enterprise security features as well as fine grained authorization controls.</li><li><a href="https://hasura.io" target="_blank" rel="nofollow noopener noreferrer">Hasura</a>: A BaaS (Backend as a Service) that lets you create tables, define permissions on Postgres and query and manipulate using a GraphQL interface.</li></ul><h2><a class="anchor" name="more-stuff"></a>More Stuff <a class="hash-link" href="#more-stuff">#</a></h2><ul><li><a href="https://github.com/chentsulin/awesome-graphql" target="_blank" rel="nofollow noopener noreferrer">awesome-graphql</a>: A fantastic community maintained collection of libraries, resources, and more.</li></ul></div></div></div></section><footer><section class="sitemap"><a href="/" class="nav-home"></a><div><h5><a href="/learn/">Learn</a></h5><a href="/learn/">Introduction</a><a href="/learn/queries/">Query Language</a><a href="/learn/schema/">Type System</a><a href="/learn/execution/">Execution</a><a href="/learn/best-practices/">Best Practices</a></div><div><h5><a href="/code">Code</a></h5><a href="/code/#server-libraries">Servers</a><a href="/code/#graphql-clients">Clients</a><a href="/code/#tools">Tools</a></div><div><h5><a href="/community">Community</a></h5><a href="/community/upcoming-events/">Upcoming Events</a><a href="http://stackoverflow.com/questions/tagged/graphql" target="_blank" rel="noopener noreferrer">Stack Overflow</a><a href="https://www.facebook.com/groups/graphql.community/" target="_blank" rel="noopener noreferrer">Facebook Group</a><a href="https://twitter.com/GraphQL" target="_blank" rel="noopener noreferrer">Twitter</a></div><div><h5>More</h5><a href="https://facebook.github.io/graphql/" target="_blank" rel="noopener noreferrer">GraphQL Specification</a><a href="https://foundation.graphql.org/" target="_blank" rel="noopener noreferrer">GraphQL Foundation</a><a href="https://github.com/graphql" target="_blank" rel="noopener noreferrer">GraphQL GitHub</a><a href="https://github.com/graphql/graphql.github.io/edit/source/site/code/index.html.js" target="_blank" rel="noopener noreferrer">Edit this page ✎</a></div></section><a href="https://code.facebook.com/projects/" target="_blank" rel="noopener noreferrer" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Facebook Open Source" width="170" height="45"/></a><section class="copyright">Copyright ©<span><script>document.write(new Date().getFullYear())</script> </span><noscript>2017 </noscript>Facebook Inc. The contents of this page are licensed BSD-3-Clause.</section></footer><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>
docsearch({
apiKey: 'd103541f3e6041148aade2e746ed4d61',
indexName: 'graphql',
inputSelector: '#algolia-search-input'
});
</script><script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-44373548-16', 'auto');
ga('send', 'pageview');
</script></body></html>