mirror of
https://github.com/graphql-python/graphene.git
synced 2024-12-02 06:24:01 +03:00
107 lines
2.6 KiB
ReStructuredText
107 lines
2.6 KiB
ReStructuredText
|
ObjectTypes
|
|||
|
===========
|
|||
|
|
|||
|
An ObjectType is the single, definitive source of information about your
|
|||
|
data. It contains the essential fields and behaviors of the data you’re
|
|||
|
querying.
|
|||
|
|
|||
|
The basics:
|
|||
|
|
|||
|
- Each ObjectType is a Python class that inherits
|
|||
|
``graphene.ObjectType`` or inherits an implemented `Interface`_.
|
|||
|
- Each attribute of the ObjectType represents a ``Field``.
|
|||
|
|
|||
|
Quick example
|
|||
|
-------------
|
|||
|
|
|||
|
This example model defines a Person, which has a first\_name and
|
|||
|
last\_name:
|
|||
|
|
|||
|
.. code:: python
|
|||
|
|
|||
|
import graphene
|
|||
|
|
|||
|
class Person(graphene.ObjectType):
|
|||
|
first_name = graphene.String()
|
|||
|
last_name = graphene.String()
|
|||
|
full_name = graphene.String()
|
|||
|
|
|||
|
def resolve_full_name(self, args, context, info):
|
|||
|
return '{} {}'.format(self.first_name, self.last_name)
|
|||
|
|
|||
|
**first\_name** and **last\_name** are fields of the ObjectType. Each
|
|||
|
field is specified as a class attribute, and each attribute maps to a
|
|||
|
Field.
|
|||
|
|
|||
|
The above ``Person`` ObjectType would have the following representation
|
|||
|
in a schema:
|
|||
|
|
|||
|
.. code:: graphql
|
|||
|
|
|||
|
type Person {
|
|||
|
firstName: String
|
|||
|
lastName: String
|
|||
|
fullName: String
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
Resolvers
|
|||
|
---------
|
|||
|
|
|||
|
A resolver is a method that resolves certain field within a
|
|||
|
``ObjectType``. The resolver of a field will be, if not specified
|
|||
|
otherwise, the ``resolve_{field_name}`` within the ``ObjectType``.
|
|||
|
|
|||
|
By default a resolver will take the ``args``, ``context`` and ``info``
|
|||
|
arguments.
|
|||
|
|
|||
|
Quick example
|
|||
|
~~~~~~~~~~~~~
|
|||
|
|
|||
|
This example model defines a ``Query`` type, which has a reverse field
|
|||
|
that reverses the given ``word`` argument using the ``resolve_reverse``
|
|||
|
method in the class.
|
|||
|
|
|||
|
.. code:: python
|
|||
|
|
|||
|
import graphene
|
|||
|
|
|||
|
class Query(graphene.ObjectType):
|
|||
|
reverse = graphene.String(word=graphene.String())
|
|||
|
|
|||
|
def resolve_reverse(self, args, context, info):
|
|||
|
word = args.get('word')
|
|||
|
return word[::-1]
|
|||
|
|
|||
|
Resolvers outside the class
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
A field could also specify a custom resolver outside the class:
|
|||
|
|
|||
|
.. code:: python
|
|||
|
|
|||
|
import graphene
|
|||
|
|
|||
|
def reverse(root, args, context, info):
|
|||
|
word = args.get('word')
|
|||
|
return word[::-1]
|
|||
|
|
|||
|
class Query(graphene.ObjectType):
|
|||
|
reverse = graphene.String(word=graphene.String(), resolver=reverse)
|
|||
|
|
|||
|
|
|||
|
Instances as data containers
|
|||
|
----------------------------
|
|||
|
|
|||
|
Graphene ``ObjectType``\ s could act as containers too. So with the
|
|||
|
previous example you could do.
|
|||
|
|
|||
|
.. code:: python
|
|||
|
|
|||
|
peter = Person(first_name='Peter', last_name='Griffin')
|
|||
|
|
|||
|
peter.first_name # prints "Peter"
|
|||
|
peter.last_name # prints "Griffin"
|
|||
|
|
|||
|
.. _Interface: /docs/interfaces/
|