Объектные типы (ObjectTypes)¶
Объектный тип ObjectType
является единственным источником информации о ваших данных. Он содержит основные поля и определяет поведение данных, которые вы запрашиваете.
Основы:
- Каждый
ObjectType
это класс Python, который наслеедуется отgraphene.ObjectType
. - Каждый аттрибут the ObjectTypeпредставляет собой
Field
.
Пример¶
В данном примере описывается модель Person
с именем и фамилией.
import graphene
class Person(graphene.ObjectType):
first_name = graphene.String()
last_name = graphene.String()
full_name = graphene.String()
def resolve_full_name(self, info):
return '{} {}'.format(self.first_name, self.last_name)
first_name
и last_name
это поля ObjectType
.
Каждое поле определяется как аттрибут класса и каждый аттрибут сопоставляется с полем Field
.
ВышееуказанныйPersonтип имеет следующее представление в Вашей схеме:
type Person {
firstName: String
lastName: String
fullName: String
}
Резолверы (Resolvers)¶
Резолвер это такой метод, который определяет какие данные будут отданы при запросе данного поля ObjectType
.
Если неуказан явно, резолвером поля является методresolve_{field_name}
.
Стандартно резолвер принимает следующие аргументы:info, **args
.
Примечание: РезолверыObjectType
являются статичными методамиstaticmethod
, так что первый аргумент резолвераself
(илиroot
) не обязан быть сущностьюObjectType
.
Пример¶
В данном примере определен объектный тип запросаQuery
, у которого есть поле reverse
, которое в свою очередь возвращает перевернутый аргументword
, используя резолвер-метод resolve_reverse
.
import graphene
class Query(graphene.ObjectType):
reverse = graphene.String(word=graphene.String())
def resolve_reverse(self, info, word):
return word[::-1]
Резолверы снаружи класса¶
Поле может использовать кастомный резолвер снаружи класса:
import graphene
def reverse(root, info, word):
return word[::-1]
class Query(graphene.ObjectType):
reverse = graphene.String(word=graphene.String(), resolver=reverse)
Сущности как контейнеры данных¶
В GrapheneObjectType
также могут быть использованы как контейнеры. Например:
peter = Person(first_name='Peter', last_name='Griffin')
peter.first_name # prints "Peter"
peter.last_name # prints "Griffin"