Пример Python GraphQL Ariadne WSGI без внешнего сервера
Во вводном документе Ariadne полный код не включает серверную часть http. На странице вам будет предложено запустить внешний сервер, указать серверу на ваш код.
В документе есть страница wsgi, которая опять же не включает серверную часть.
Сам питон уже должен был поставляться со встроенным сервером WSGI. Есть ли простой пример, включающий серверную часть? Я предполагаю, что подойдет простое расширение к приведенному выше вступительному примеру.
1 ответ
Следующий пример работает:
#!/usr/bin/env python
from ariadne import gql, QueryType, make_executable_schema
from ariadne.wsgi import GraphQL
type_defs = gql("""
type Query {
hello: String!
}
""")
query = QueryType()
@query.field("hello")
def resolve_hello(_, info):
##request = info.context["request"]
##user_agent = request.headers.get("user-agent", "guest")
user_agent = info.context["HTTP_USER_AGENT"]
return "Hello, %s!..." % user_agent #
schema = make_executable_schema(type_defs, query)
application = GraphQL(schema, debug=True)
if __name__ == '__main__':
do_single = False
from wsgiref.simple_server import make_server
httpd = make_server('localhost', 8051, application)
if do_single:
# Wait for a single request, serve it and quit.
httpd.handle_request()
else:
httpd.serve_forever(.5)
По сути, это тот же код, что и во вступительном примере Ariadne с двумя изменениями. Во-первых, он исправил info.context, у которого нет члена запроса. А второй - передать приложение вызову wsgiref.simple_server.make_server().
После запуска этого примера сервера встроенная игровая площадка Ariadne отобразит в браузере фактический запрос, который вы можете отправить. Он показывает два способа отправки запроса:
Пост из панели детской площадки:
query { hello }
Или подсказка кнопки игровой площадки показывает тот же запрос, отправленный через curl:
curl 'http://localhost:8051/graphql' \
-H 'Accept-Encoding: gzip, deflate, br' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' -H 'Connection: keep-alive' \
-H 'DNT: 1' -H 'Origin: http://localhost:8051' \
--data-binary '{"query":"{hello}"}' --compressed
Игровая площадка также отправляет запросы самоанализа. Эти запросы обновляются примерно каждую секунду. Схема используется для проверки запроса, введенного пользователем на панели.
Клиент, который не привязан к Ariadne, может использоваться для отправки того же запроса из python:
#!/usr/bin/env python
# https://github.com/prisma-labs/python-graphql-client
from graphqlclient import GraphQLClient
client = GraphQLClient('http://127.0.0.1:8051/')
result = client.execute('''
{
hello
}
''')
print(result)