Python serailize Rest и GraphQL одинаковы
Я играю с 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': 'Unknown author'}]"}
и Использование конечной точки отдыха (localhost / posts)
{"posts": "[{\" content \ ": \" Hello, World... \ ", \" author \ ": \" Неизвестный автор \"}]"}
Я не уверен, что это даже важно, но мне было интересно, почему он был сериализован по-другому?.. Возможно ли вообще сделать его таким же?
Есть ли смысл пытаться добиться этого?
Любая помощь будет оценена! Спасибо!
- PS Если я не сбрасываю (
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)
Я надеюсь, что это поможет вам двигаться дальше с вашей проблемой