Many different programming languages support GraphQL. This list contains some of the more popular server-side frameworks, client libraries, and other useful stuff.
The reference implementation of the GraphQL specification, designed for running GraphQL in a Node.js environment.
To run a GraphQL.js hello world script from the command line:
npm install graphql
Then run node hello.js with this code in hello.js:
var { graphql, buildSchema } = require('graphql'); var schema = buildSchema(` type Query { hello: String } `); var root = { hello: () => 'Hello world!' }; graphql(schema, '{ hello }', root).then((response) => { console.log(response); });
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.
To run an express-graphql hello world server:
npm install express express-graphql graphqlThen run node server.js with this code in server.js:
var express = require('express'); var graphqlHTTP = require('express-graphql'); var { buildSchema } = require('graphql'); var schema = buildSchema(` type Query { hello: String } `); var root = { hello: () => 'Hello world!' }; var app = express(); app.use('/graphql', graphqlHTTP({ schema: schema, rootValue: root, graphiql: true, })); app.listen(4000, () => console.log('Now browse to localhost:4000/graphql'));
A GraphQL server that works with Node.js.
To run a hello world server with Apollo Server:
npm install apollo-server body-parser express graphql graphql-tools
Then run node server.js with this code in server.js:
var express = require('express'); var bodyParser = require('body-parser'); var { apolloExpress, graphiqlExpress } = require('apollo-server'); var { makeExecutableSchema } = require('graphql-tools'); var typeDefs = [` type Query { hello: String } schema { query: Query }`]; var resolvers = { Query: { hello(root) { return 'world'; } } }; var schema = makeExecutableSchema({typeDefs, resolvers}); var app = express(); app.use('/graphql', bodyParser.json(), apolloExpress({schema})); app.use('/graphiql', graphiqlExpress({endpointURL: '/graphql'})); app.listen(4000, () => console.log('Now browse to localhost:4000/graphiql'));
Apollo Server also supports all Node.js HTTP server frameworks: Express, Connect, HAPI and Koa.
A Ruby library for building GraphQL APIs.
To run a hello world script with graphql-ruby:
gem install graphql
Then run ruby hello.rb with this code in hello.rb:
require 'graphql' QueryType = GraphQL::ObjectType.define do name 'Query' field :hello do type types.String resolve -> (obj, args, ctx) { 'Hello world!' } end end Schema = GraphQL::Schema.define do query QueryType end puts Schema.execute('{ hello }')
There are also nice bindings for Relay and Rails.
A Python library for building GraphQL APIs.
To run a Graphene hello world script:
pip install graphene
Then run python hello.py with this code in hello.py:
import graphene class Query(graphene.ObjectType): hello = graphene.String() def resolve_hello(self, args, info): return 'Hello world!' schema = graphene.Schema(query=Query) result = schema.execute('{ hello }') print(result.data['hello'])
There are also nice bindings for Relay, Django, SQLAlchemy, and Google App Engine.
An example of a hello world GraphQL schema and query with sangria:
import sangria.schema._ import sangria.execution._ import sangria.macros._ val QueryType = ObjectType("Query", fields[Unit, Unit]( Field("hello", StringType, resolve = _ ⇒ "Hello world!") )) val schema = Schema(QueryType) val query = graphql"{ hello }" Executor.execute(schema, query) map println
A Java library for building GraphQL APIs.
Code that executes a hello world GraphQL query with graphql-java:
import graphql.schema.GraphQLObjectType; import graphql.schema.GraphQLSchema; import static graphql.Scalars.GraphQLString; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLObjectType.newObject; public class HelloWorld { public static void main(String[] args) { GraphQLObjectType queryType = newObject() .name("helloWorldQuery") .field(newFieldDefinition() .type(GraphQLString) .name("hello") .staticValue("Hello world!")) .build(); GraphQLSchema schema = GraphQLSchema.newSchema() .query(queryType) .build(); Map<String, Object> result = new GraphQL(schema).execute("{hello}").getData(); System.out.println(result); // Prints: {hello=world} } }
See the graphql-java docs for more information on setup.
A Clojure library that provides a GraphQL implementation.
Code that executes a hello world GraphQL query with graphql-clj:
(require '[graphql-clj.parser :as parser]) (require '[graphql-clj.type :as type]) (def parsed-schema (parser/parse "type Query { hello: String }")) (def type-schema (type/create-schema parsed-schema)) (defn resolver-fn [type-name field-name] (cond (and (= "Query" type-name) (= "hello" field-name)) (fn [context parent & rest] "Hello world!"))) (require '[graphql-clj.executor :as executor]) (executor/execute nil type-schema resolver-fn "{ hello }")