Python序列化Rest和GraphQL相同
Posted
技术标签:
【中文标题】Python序列化Rest和GraphQL相同【英文标题】:Python serialize Rest and GraphQL the same 【发布时间】:2018-10-01 13:39:31 【问题描述】:我一直在玩 GraphQL(石墨烯),编写了一个基于 Python/Falcon 的小型应用程序,该应用程序在 Rest 和 GraphQL 中都返回帖子列表:
from falcon import API, json
import graphene
def get_all_posts():
posts = [
'content': (
'Hello, '
"World..."
),
'author': 'Unknown author'
]
return posts
class Query(graphene.ObjectType):
posts = graphene.String()
def resolve_posts(self, info):
return get_all_posts()
schema = graphene.Schema(query=Query)
class PostsResource:
def on_get(self, req, resp):
posts = get_all_posts()
resp.media = 'posts': json.dumps(posts)
class GraphQLResource:
def on_get(self, req, resp):
query = req.params['query']
result = schema.execute(query)
resp.media = result.data
api = API()
api.add_route('/graphql', GraphQLResource())
api.add_route('/posts', PostsResource())
查询 GraphQL (localhost/graphql?query=query%20posts%20%20posts%20)
"posts": "['content': 'Hello, World...', 'author': '未知作者']"
和使用 Rest 端点(localhost/posts)
"posts": "[\"content\": \"Hello, World...\", \"author\": \"未知作者\"]"
我不确定这是否重要,但我想知道为什么它的序列化方式不同?.. 甚至可以使它相同吗?
尝试实现这一目标是否有意义?
任何帮助将不胜感激!谢谢!
P.S 如果我没有倾倒 (json.dumps()
),我得到的其余端点的结果:
"posts": ["content": "Hello, World...", "author": "未知作者"]
【问题讨论】:
【参考方案1】:看起来它正在将整个帖子列表序列化为单个字符串 (posts = graphene.String()
)。我对graphene
不太熟悉,但可能您必须创建嵌套模式 - 像这样:
class Post(graphene.ObjectType):
content = graphene.String()
author = graphene.String()
class Query(graphene.ObjectType):
# or Field instead of List, I'm not sure about that.
posts = graphene.List(Post)
我希望它能帮助你继续解决你的问题
【讨论】:
以上是关于Python序列化Rest和GraphQL相同的主要内容,如果未能解决你的问题,请参考以下文章
如何为 REST 和 GraphQL 使用相同的 RoleGuard?
python3-开发进阶Django中序列化以及rest_framework的序列化
python django-rest-framework 3.3.3 更新嵌套序列化程序
python Django Rest_Framework框架 模型类序列化器(ModelSerializer)详解(图文并茂版)
.net 核心 GraphQL、GraphQL.SystemTextJson:不支持“System.Type”实例的序列化和反序列化