Python Пример GraphQL Ariadne WSGI без внешнего сервера - PullRequest
0 голосов
/ 06 марта 2020

В Ariadne intro do c полный код не включает серверную часть http. На странице указывается запустить внешний сервер, укажите сервер на ваш код.

У do c есть wsgi страница , которая опять не включает серверную часть.

Сам python уже должен был поставляться со встроенным сервером WSGI. Есть ли простой пример, включающий серверную часть? Я предполагаю, что простое расширение для приведенного выше примера вступления должно подойти.

1 Ответ

0 голосов
/ 07 марта 2020

Работает следующий пример:

#!/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)
...