Создание спецификации Swagger из кода Python без аннотаций

Я ищу способ создать спецификацию Swagger (JSON и Swagger-UI) из определения службы Python. Я нашел много вариантов (обычно основанных на Flask), но все они используют аннотации, которые я не могу правильно обработать из кода, например. определить 10 эквивалентных сервисов с разными маршрутами в цикле (обработчик может быть currified в этом примере, первый вызов функции для его получения).

Есть ли способ сделать это без аннотаций? Я хотел бы сгенерировать метод в API и его документации, вызвав функцию (или метод, или конструктор класса) со значениями, соответствующими реализации и документации этого метода API.


person Trylks    schedule 29.09.2016    source источник


Ответы (1)


Я предлагаю изучить apispec.

apispec — подключаемый генератор спецификаций API.

В настоящее время поддерживает спецификацию OpenAPI 2.0 (например, Swagger 2.0).

аписек

from apispec import APISpec

spec = APISpec(
    title='Gisty',
    version='1.0.0',
    info=dict(description='A minimal gist API')
)

spec.definition('Gist', properties={
    'id': {'type': 'integer', 'format': 'int64'},
    'content': {'type': 'string'},
})

spec.add_path(
    path='/gist/{gist_id}',
    operations=dict(
        get=dict(
            responses={
                '200': {
                    'schema': {'$ref': '#/definitions/Gist'}
                }
            }
        )
    )
)
person ge7600    schedule 29.09.2016
comment
Спасибо. Это очень круто, но, судя по примеру: 1. Он не генерирует и не обслуживает чванливый пользовательский интерфейс. 2. Он интегрируется (очень слабо, отсутствует пользовательский интерфейс swagger) с Flask, который в любом случае использует аннотации для маршрутов (я не могу использовать аннотации ни для чего). APIspec может быть полезен для создания другого решения (не начиная с нуля), но я не могу использовать его в его текущем состоянии. - person Trylks; 01.10.2016
comment
Я обнаружил, что Falcon не нуждается в аннотациях. Можно сгенерировать swagger.json с помощью apispec и использовать его как статическую страницу. Но создание пользовательского интерфейса swagger по-прежнему будет проблемой. - person Trylks; 04.10.2016
comment
Я нашел небольшой пример, который генерирует чванливый пользовательский интерфейс с помощью Falcon, но, похоже, он использует аннотации. - person Trylks; 06.10.2016