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

Търся начин да генерирам спецификация на Swagger (JSON и Swagger-UI) от дефиницията на услуга на Python. Намерих много опции (обикновено базирани на Flask), но всички те използват анотации, които не мога да обработвам правилно от кода, напр. дефинирайте 10 еквивалентни услуги с различни маршрути в цикъл (манипулаторът може да бъде преработен в този пример, първото извикване на функция, за да го получи).

Има ли някакъв начин да направите това без анотации? Бих искал да генерирам метода в API и неговата документация чрез извикване на функция (или метод, или конструктор на клас) със стойностите, съответстващи на внедряването и документацията на този API метод.


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


Отговори (1)


Предлагам да разгледате apispec.

apispec е pluggable API спецификационен генератор.

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

apispec

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. Той се интегрира (много свободно, липсва UI с размах) с Flask, който така или иначе използва анотации за маршрутите (не мога да използвам анотации за нищо). APIspec може да е полезен за изграждане на друго решение (без да се започне от нулата), но не мога да го използвам в текущото му състояние. - person Trylks; 01.10.2016
comment
Открих, че Falcon не се нуждае от анотации. Може да е възможно да генерирате swagger.json с apispec и да го служите като статична страница. Но генерирането на наперен потребителски интерфейс все още би било предизвикателство. - person Trylks; 04.10.2016
comment
Намерих малък пример, който генерира наперен потребителски интерфейс с Falcon, но изглежда, че използва анотации. - person Trylks; 06.10.2016