Полностью Pythonic, настраиваемые страницы документации на основе Openapi для Swaggerui, Redoc, Rapidoc, Elements, Scalar.
Имейте в виду, что этот пакет не генерирует спецификацию OpenAPI, он просто отображает страницы с данной конфигурацией.
Дай мне спецификацию, оставьте мне остальное ...
| Документация | Страница | Конфигурация |
|---|---|---|
| Swaggerui | ✅ | ✔ |
| Redoc | ✅ | ✔ |
| Рапидок | ✅ | ✔ |
| Элементы | ✅ | ✔ |
| Скаляр | ✅ | ✔ |
Ключ эмодзи:
| Эмодзи | Значение |
|---|---|
| ✅ | Готовый |
| ✔ | Частично |
| Неуспешный | |
| ? | В ходе выполнения |
| ? | В ожидании |
| Не уверен |
pip install openapipages Я знаю, что это выглядит немного шаблоном, но все это прямо. Метод .render() возвращает HTML как строку. Благодаря этому дизайну вы можете расширить и настраивать страницы по своему желанию (например, добавьте дополнительную логику, чтобы ограничить доступ к странице).
Параметр
include_in_schemaустанавливается наFalseв каждой конечной точке, чтобы избежать включения этих конечных точек в спецификации OpenAPI.
from fastapi import FastAPI
from fastapi . responses import HTMLResponse
from openapipages import Elements , RapiDoc , ReDoc , Scalar , SwaggerUI
# Disable the built-in /redoc page so we can make a custom one.
app = FastAPI ( redoc_url = None )
@ app . get ( "/" )
def root () -> dict [ str , str ]:
return { "Hello" : "World" }
@ app . get ( "/swaggerui" , response_class = HTMLResponse , include_in_schema = False )
def get_swaggerui () -> str :
return SwaggerUI ( title = "Swagger UI" ). render ()
@ app . get ( "/redoc" , response_class = HTMLResponse , include_in_schema = False )
def get_redoc () -> str :
return ReDoc ( title = "ReDoc" ). render ()
@ app . get ( "/scalar" , response_class = HTMLResponse , include_in_schema = False )
def get_scalar () -> str :
return Scalar ( title = "Scalar" ). render ()
@ app . get ( "/elements" , response_class = HTMLResponse , include_in_schema = False )
def get_elements () -> str :
return Elements ( title = "Elements" ). render ()
@ app . get ( "/rapidoc" , response_class = HTMLResponse , include_in_schema = False )
def get_rapidoc () -> str :
return RapiDoc ( title = "RapiDoc" ). render ()Параметр
include_in_schemaустанавливается наFalseв каждой конечной точке, чтобы избежать включения этих конечных точек в спецификации OpenAPI.
from litestar import Litestar , MediaType , get
from openapipages import Elements , RapiDoc , ReDoc , Scalar , SwaggerUI
openapi_url = "/schema/openapi.json"
@ get ( "/" )
def root () -> dict [ str , str ]:
return { "Hello" : "World" }
@ get ( "/swaggerui" , media_type = MediaType . HTML , include_in_schema = False )
def get_swaggerui () -> str :
return SwaggerUI ( title = "Swagger UI" , openapi_url = openapi_url ). render ()
@ get ( "/redoc" , media_type = MediaType . HTML , include_in_schema = False )
def get_redoc () -> str :
return ReDoc ( title = "ReDoc" , openapi_url = openapi_url ). render ()
@ get ( "/scalar" , media_type = MediaType . HTML , include_in_schema = False )
def get_scalar () -> str :
return Scalar ( title = "Scalar" , openapi_url = openapi_url ). render ()
@ get ( "/elements" , media_type = MediaType . HTML , include_in_schema = False )
def get_elements () -> str :
return Elements ( title = "Elements" , openapi_url = openapi_url ). render ()
@ get ( "/rapidoc" , media_type = MediaType . HTML , include_in_schema = False )
def get_rapidoc () -> str :
return RapiDoc ( title = "RapiDoc" , openapi_url = openapi_url ). render ()
app = Litestar ([ root , get_swaggerui , get_redoc , get_scalar , get_elements , get_rapidoc ])TL; DR - я не хочу копировать и вставлять его снова ...
Несколько инструментов документации API готовы к использованию под рукой со стандартным интерфейсом.
Больше нет копирования и вставки того же самого из одного проекта другому. Импортируйте пакет и используйте его!
Вот запрос на притяжение, сделанное в репо Fastapi. Это был тот момент, когда я понял, что конфигурация была ограничена, и она не изменилась ...
Кроме того, ответ автора на этот пиар показывает, что в будущем мы не увидим больше альтернативных инструментов документации.
Вот еще один запрос на притяжение, сделанное в репо Fastapi. Это приносит скалярную поддержку, но еще не одобрен/объединена, и я думаю, что это останется таким образом благодаря предыдущему PR.
Стандартный интерфейс для многих интерфейсов документации API с функциями конфигурации.
В последнее время в сообществе Python стали популярными инструменты документации на основе Spec Spec. Мы видим множество проектов (Fastapi, Litestar, Apispec, Flasgger, Spectree, Connexion и т. Д.), предлагающие поддержку спецификации OpenAPI из коробки.
У Litestar есть поддержка Swaggerui, Redoc, Rapidoc и Elements, а Fastapi поддерживает Swaggerui и Redoc, но что дальше? Следующего будет достаточно?
Все они имеют одну общую черту, некоторые HTML (как строка Python или файл), шаблонная с данной конфигурацией.
Вы видите, куда я иду?
Я хочу, чтобы openapipages были SQLalchemy из инструментов документации на основе спецификации OpenAPI.
Один интерфейс для многих! И, конечно, фреймворк агностик ... так что вы можете использовать его в своих проектах FastAPI, Litestar или в любом другом проекте, который генерирует спецификации OpenAPI.
Проекты Fostapi и Litestar и два запроса на привлечение, упомянутые выше, вдохновили меня на создание этого пакета.
openapipages распределяется в соответствии с условиями лицензии MIT.