Как мне получить aiohttp-swagger для распознавания переменных запроса GET?

Я хотел бы использовать aiohttp-swagger в моем проекте Python, но я не могу понять, как он обрабатывает переменные полезной нагрузки GET URL и POST. У меня есть этот пример кода на основе примера быстрого запуска здесь. Единственное изменение, которое я сделал, - это то, что я включил параметр запроса в GET URL.

from aiohttp import web
from aiohttp_swagger import *


async def ping(request):
    """
    ---
    description: This end-point allow to test that service is up.
    tags:
    - Health check
    produces:
    - text/plain
    responses:
        "200":
            description: successful operation. Return "pong" text
        "405":
            description: invalid HTTP Method
    """
    return web.Response(text="pong %s" % request.match_info['var']) # change here (1/2)


app = web.Application()
app.router.add_route('GET', "/ping/{var}", ping) # change here (2/2)

setup_swagger(app)

web.run_app(app, host="127.0.0.1")

Сгенерированная страница Swagger/OpenAPI, похоже, не знает о переменной. Я ожидал, что он сгенерирует текстовое поле, в котором я смогу заполнить значение для переменной запроса "var". Как мне сделать это с AIO-HTTP? Является ли это возможным? Если нет, есть ли другая библиотека, которая может справиться с этим?

На странице Swagger отсутствует текстовое поле

Для справки, у меня есть фон C#, и я делал это в прошлом, используя библиотеку Swashbuckle.

1 ответ

Решение

Вы должны добавить parameters относиться к вашей аннотации.

Рабочий пример:

from aiohttp import web
from aiohttp_swagger import *


async def ping(request):
    """
    ---
    description: This end-point allow to test that service is up.
    tags:
    - Health check
    parameters: 
    - in: query
      name: var
    produces:
    - text/plain
    responses:
        "200":
            description: successful operation. Return "pong" text
        "405":
            description: invalid HTTP Method
    """
    return web.Response(text="pong %s" % request.match_info['var']) # change here (1/2)


app = web.Application()
app.router.add_route('GET', "/ping/{var}", ping) # change here (2/2)

setup_swagger(app)

web.run_app(app, host="127.0.0.1")
Другие вопросы по тегам