Работает следующий пример:
#!/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
Детская площадка также отправляет запросы на самоанализ. Эти запросы обновляются каждую секунду или около того. Схема используется для проверки запроса, введенного пользователем на панель.
Клиент, который не связан с Ариадной, может использоваться для отправки того же запроса от 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)