Ariadne is a Python library for implementing GraphQL servers, inspired by Apollo Server and built with GraphQL-core-next.
The library already implements enough features to enable developers to build functional GraphQL APIs. It is also being dogfooded internally on a number of projects.
Documentation is available here.
- Simple, quick to learn and easy to memorize API.
- Compatibility with GraphQL.js version 14.0.2.
- Queries, mutations and input types.
- Asynchronous resolvers and query execution.
- Subscriptions.
- Custom scalars and enums.
- Unions and interfaces.
- Defining schema using SDL strings.
- Loading schema from
.graphql
files. - WSGI middleware for implementing GraphQL in existing sites.
- Opt-in automatic resolvers mapping between
camelCase
andsnake_case
. - Build-in simple synchronous dev server for quick GraphQL experimentation and GraphQL Playground.
- Support for Apollo GraphQL extension for Visual Studio Code.
- GraphQL syntax validation via
gql()
helper function. Also provides colorization if Apollo GraphQL extension is installed.
Ariadne can be installed with pip:
pip install ariadne
The following example creates an API defining Person
type and single query field people
returning a list of two persons. It also starts a local dev server with GraphQL Playground available on the http://127.0.0.1:8888
address.
from ariadne import ResolverMap, gql, make_executable_schema, start_simple_server
# Define types using Schema Definition Language (https://graphql.org/learn/schema/)
# Wrapping string in gql function provides validation and better error traceback
type_defs = gql("""
type Query {
people: [Person!]!
}
type Person {
firstName: String
lastName: String
age: Int
fullName: String
}
""")
# Map resolver functions to type fields using ResolverMap
query = ResolverMap("Query")
# Resolvers are simple python functions
@query.field("people")
def resolve_people(*_):
return [
{"firstName": "John", "lastName": "Doe", "age": 21},
{"firstName": "Bob", "lastName": "Boberson", "age": 24},
]
person = ResolverMap("Person")
@person.field("fullName")
def resolve_person_fullname(person, *_):
return "%s %s" % (person["firstName"], person["lastName"])
# Create executable GraphQL schema
schema = make_executable_schema(type_defs, [query, person])
# Run a dev server that includes GraphQL Playground
start_simple_server(schema) # Visit http://127.0.0.1:8888 to see the API explorer!
For more guides and examples, please see the documentation.
We are welcoming contributions to Ariadne! If you've found a bug or issue, or if you have any questions or feedback, feel free to use GitHub issues.
For guidance and instructions, please see CONTRIBUTING.md.