이 글은 Graphene Docs를 읽고 작성한 것입니다.
Union
타입은 필드를 갖지 않으며 다만 다른 ObjectType들의 모임(?)으로 이루어진다.타입
import graphene
class Human(graphene.ObjectType):
name = graphene.String()
born_in = graphene.String()
class Droid(graphene.ObjectType):
name = graphene.String()
primary_function = graphene.String()
class Starship(graphene.ObjectType):
name = graphene.String()
length = graphene.Int()
class SearchResult(graphene.Union):
class Meta:
types = (Human, Droid, Starship)
SearchResult
타입이 반환됟ㄹ 때는 Human
, Droid
, Starship
셋 중 하나의 타입을 리턴하게 된다.아래의 예시를 보며 파악하는 것이 더 쉽다.
mutation예시
import graphene
class CreatePerson(graphene.Mutation):
class Arguments:
name = graphene.String()
ok = graphene.Boolean()
person = graphene.Field(lambda: Person)
def mutate(root, info, name):
person = Person(name=name)
ok = True
return CreatePerson(person=person, ok=ok)
person
, ok
필드는 mutation이 resolve 되었을 때 반환할 일종의 output field이다.class Arguments
는 Mutation 객체인 CreatePerson
이 resolve 하기 위해 필요로 하는 attributes이다.mutate
함수는 mutation이 호출될 경우 사용되며 일반적인 resolver와 동일한 파라미터를 받는다.그러면 mutation에 대한 스키마는 아래와 같이 정의할 수 있다.
schema
# ... the Mutation Class
class Person(graphene.ObjectType):
name = graphene.String()
age = graphene.Int()
# mutation에는 CreatePerson Mutation이 사용 된다.
class MyMutations(graphene.ObjectType):
create_person = CreatePerson.Field()
# person 필드는 Person ObjectType으로 정의된다.
class Query(graphene.ObjectType):
person = graphene.Field(Person)
schema = graphene.Schema(query=Query, mutation=MyMutations)