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?

GraphQL 是不是具有与 REST 相同的缓存能力

python3-开发进阶Django中序列化以及rest_framework的序列化

python django-rest-framework 3.3.3 更新嵌套序列化程序

python Django Rest_Framework框架 模型类序列化器(ModelSerializer)详解(图文并茂版)

.net 核心 GraphQL、GraphQL.SystemTextJson:不支持“System.Type”实例的序列化和反序列化