single |
# GraphQL-core 3
GraphQL-core 3 is a Python 3.6+ port of [GraphQL.js],
the JavaScript reference implementation for [GraphQL],
a query language for APIs created by Facebook.
[PyPI version]
[Documentation Status]
![Test Status]
![Lint Status]
[Code Style]
The current version 3.2.3 of GraphQL-core is up-to-date with GraphQL.js
version 16.6.0.
An extensive test suite with over 2300 unit tests and 100% coverage
comprises a
replication of the complete test suite of GraphQL.js, making sure this port
is
reliable and compatible with GraphQL.js.
Note that for various reasons, GraphQL-core does not use SemVer like
GraphQL.js. Increases in the major version of GraphQL.js are reflected in
the minor version of GraphQL-core instead. This means there can be breaking
changes in the API when the minor version changes, and only patch releases
are fully backward compatible. Therefore, we recommend something like `=~
3.2.0` as version specifier when including GraphQL-core as a dependency.
## Documentation
A more detailed documentation for GraphQL-core 3 can be found at
[graphql-core-3.readthedocs.io].
The documentation for GraphQL.js can be found at [graphql.org/graphql-js/].
The documentation for GraphQL itself can be found at [graphql.org].
There will be also [blog articles] with more usage
examples.
## Getting started
A general overview of GraphQL is available in the
[README] for the
[Specification for GraphQL]. That overview
describes a simple set of GraphQL examples that exist as [tests] in this
repository. A good way to get started with this repository is to walk
through that
README and the corresponding tests in parallel.
## Installation
GraphQL-core 3 can be installed from PyPI using the built-in pip command:
python -m pip install graphql-core
You can also use [poetry] for installation in a
virtual environment:
poetry install
## Usage
GraphQL-core provides two important capabilities: building a type schema
and
serving queries against that type schema.
First, build a GraphQL type schema which maps to your codebase:
```python
from graphql import (
GraphQLSchema, GraphQLObjectType, GraphQLField, GraphQLString)
schema = GraphQLSchema(
query=GraphQLObjectType(
name='RootQueryType',
fields={
'hello': GraphQLField(
GraphQLString,
resolve=lambda obj, info: 'world')
}))
```
This defines a simple schema, with one type and one field, that resolves to
a fixed
value. The `resolve` function can return a value, a co-routine object or a
list of
these. It takes two positional arguments; the first one provides the root
or the
resolved parent field, the second one provides a `GraphQLResolveInfo`
object which
contains information about the execution state of the query, including a
`context`
attribute holding per-request state such as authentication information or
database
session. Any GraphQL arguments are passed to the `resolve` functions as
individual
keyword arguments.
Note that the signature of the resolver functions is a bit different in
|