Graphene은 Python의 일반적인 값을 나타내는 몇 가지 기본 types를 제공한다. 이 types는 query의 leaves에서 값을 보여주는 역할을 한다(GraphQL은 그래프이고 이 그래프의 leaf node는 해당 값이 된다고 보면 될 것 같다).
이밖에 본인이 원한다면 커스텀 Scalar types를 만드는 것도 가능하다. 여기서는 커스텀 Scalar types를 만드는 방법을 알아본다.
아래는 커스텀 DateTime 스칼라 타입을 만드는 예시이다.
import datetime
from graphene.types import Scalar
from graphql.language import ast
class DateTime(Scalar):
'''DateTime Scalar Description'''
@staticmethod
def serialize(dt):
return dt.isoformat()
@staticmethod
def parse_literal(node):
if isinstance(node, ast.StringValue):
return datetime.datetime.strptime(
node.value, "%Y-%m-%dT%H:%M:%S.%f")
@staticmethod
def parse_value(value):
return datetime.datetime.strptime(value, "%Y-%m-%dT%H:%M:%S.%f")
방법1
import graphene
class Character(graphene.ObjectType):
name = graphene.NonNull(graphene.String)
이는 아래와 같이 String 스칼라 타입에 require=True 속성을 줘서 사용할 수도 있다.
방법2
import graphene
class Character(graphene.ObjectType):
name = graphene.String(required=True)
만약 Non-Null List를 타입으로 받고 싶다면?
- 아래와 같이 List 타입의 속성으로 NonNull을 받고, NonNull은 String을 타입 속성으로 받으면 된다.
import graphene
class Character(graphene.ObjectType):
appears_in = graphene.List(graphene.NonNull(graphene.String))
- 이는 아래의 타입 정의와 같은 의미를 갖는다.
type Character {
appearsIn: [String!]
}
Field
를 나타낸다(아래 예시의 경우 first_name, last_name 등).Field
는 데이터를 가져오기 위한 resolver method를 갖는다.from graphene import ObjectType, String
class Person(ObjectType):
first_name = String()
last_name = String()
full_name = String()
def resolve_full_name(parent, info):
return f"{parent.first_name} {parent.last_name}"