GraphQL
Types Reference
Enumes(枚举类型):
# 定义
import graphene
from enum import Enum
class Episode(graphene.Enum):
NEWHOPE = 4
EMPIRE = 5
JEDI = 6
@property
def description(self):
# 对该类型参数做具体描述
if self == Episode.NEWHOPE:
return 'New Hope Episode'
return 'Other episode'
# 等价于 -> Episode = graphene.Enum('Episode', [('NEWHOPE', 4), ('EMPIRE', 5), ('JEDI', 6)])
可以使用如下方法对已经定义过的描述进行修改:
graphene.Enum.from_enum(AlreadyExistingPyEnum, description=lambda value: return 'foo' if value == AlreadyExistingPyEnum.Foo else 'bar')
Notes:
python内置的Enum类型和graphene定义的Enum类型并不完全同
如果使用内置的Enum类型可以:
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
assert Color(1) == Color.RED
如果使用graphene定义的Enum类型需要使用.get()方法
from graphene import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
assert Color.get(1) == Color.RED
Scalars(标量类型):
所有标量类型都接受以下参数。 所有都是可选的
name:string
description: string
required: bool
deprecation_reason: string
default_value: any
Base scalars(基本标量)
graphene.String
graphene.Int
graphene.Float
graphene.Boolean
graphene.ID
# 表示唯一标识符,通常用于重新获取对象或作为缓存的键。ID类型作为String出现在JSON响应中; 但是,它并不是人类可读的。当预期作为输入类型时,任何字符串(例如“4”)或整数(例如4)输入值都将被接受为ID。
graphene.types.datetime.Date
# 表示由iso8601指定的Date值。
graphene.types.datetime.DateTime
# 表示由iso8601指定的DateTime值。
graphene.types.datetime.Time
# 表示由iso8601指定的Time值。
graphene.types.json.JSONString
# 表示JSON字符串。
Custom scalars(自定义标量)
您可以为架构创建自定义标量。以下是创建DateTime标量的示例:
import datetime
from graphene.types import Scalar
from graphql.language import ast
class DateTime(Scalar):
'''
DateTime Scalar description
'''
@staticmethod
def serializer(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")