Páginas totalmente pitônicas e baseadas em OpenAPI para Swaggerui, Redoc, Rapidoc, Elements, Scalar.
Lembre -se de que este pacote não gera especificações OpenAPI, apenas renderiza as páginas com a configuração fornecida.
Me dê uma especificação de abertura, deixe o resto para mim ...
| Documentação | Página | Config |
|---|---|---|
| Swaggerui | ✅ | ✔️ |
| Redoc | ✅ | ✔️ |
| Rapidoc | ✅ | ✔️ |
| Elementos | ✅ | ✔️ |
| Escalar | ✅ | ✔️ |
Chave Emoji:
| Emoji | Significado |
|---|---|
| ✅ | Preparar |
| ✔️ | Parcialmente |
| Fracassado | |
| ? | Em andamento |
| ? | Pendente |
| Não tenho certeza |
pip install openapipages Eu sei que parece um pouco caldeira, mas é tudo direto. O método .render() retorna o html como uma string. Graças a este design, você pode estender e configurar as páginas como desejar (por exemplo, adicione lógica extra para restringir o acesso à página).
O parâmetro
include_in_schemaé definido comoFalseem cada terminal para evitar a inclusão desses pontos de extremidade na especificação do 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 ()O parâmetro
include_in_schemaé definido comoFalseem cada terminal para evitar a inclusão desses pontos de extremidade na especificação do 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 - não quero copiar e colá -lo novamente ...
Várias ferramentas de documentação da API estão prontas para serem usadas na ponta dos dedos com uma interface padrão.
Chega de copiar e colar a mesma coisa de um projeto para outro. Importe o pacote e use -o!
Aqui está uma solicitação de tração feita para o repositório FASTAPI. Este foi o ponto em que entendi que a configuração era limitada e não mudaria ...
Além disso, a resposta do autor para isso mostra que não veremos mais ferramentas de documentação alternativas no futuro.
Aqui está outra solicitação de tração feita para o repositório FASTAPI. Ele traz suporte escalar, mas ainda não foi aprovado/mesclado e acho que permanecerá assim graças ao PR anterior.
Uma interface padrão para muitas interfaces de documentação da API com os recursos de configuração.
Ultimamente, as ferramentas de documentação baseadas em especificações do OpenAPI se tornaram populares na comunidade Python. Vemos muitos projetos (FASTAPI, LITESTAR, APISPEC, FLASGGER, Spectree, Connexion, etc), oferecendo suporte para especificação OpenAPI pronta para fora da caixa.
O Litestar tem apoio para Swaggerui, Redoc, Rapidoc e Elements e FASTAPI, tem suporte para Swaggerui e Redoc, mas o que é o próximo? O próximo será suficiente?
Todos eles têm uma coisa em comum, algum html (como string python ou um arquivo) modificado com a configuração fornecida.
Você vê para onde estou indo?
Eu quero que openapipages seja sqlalchemy de ferramentas de documentação baseadas em especificações do OpenAPI.
Uma interface para muitos! E, é claro, a estrutura agnóstica ... para que você possa usá -lo em seus projetos FASTAPI, LITESTAR ou qualquer outro projeto que gera especificações do OpenAPI.
Os projetos FASTAPI e LITESTAR e os dois pedidos de tração mencionados acima me inspiraram a criar este pacote.
openapipages é distribuído sob os termos da licença do MIT.