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.6 of GraphQL-core is up-to-date with GraphQL.js
version 16.8.2.
An extensive test suite with over 2500 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.
Changes 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 using something like `~= 3.2.0` as the 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
|