Páginas de documentación personalizables totalmente pitónicas, basadas en OpenAPI para Swaggerui, Redoc, Rapidoc, Elementos, Scalar.
Tenga en cuenta que este paquete no genera especificaciones de OpenApi, solo representa las páginas con la configuración dada.
Dame una especificación de Openapi, deja el resto para mí ...
| Documentación | Página | Configuración |
|---|---|---|
| Swaggerui | ✅ | ✔️ |
| Redoc | ✅ | ✔️ |
| Rápido | ✅ | ✔️ |
| Elementos | ✅ | ✔️ |
| Escalar | ✅ | ✔️ |
Clave emoji:
| Emoji | Significado |
|---|---|
| ✅ | Listo |
| ✔️ | Parcialmente |
| Fallido | |
| ? | En curso |
| ? | Pendiente |
| No estoy seguro |
pip install openapipages Sé que se ve un poco calderado, pero todo es sencillo. El método .render() devuelve el HTML como una cadena. Gracias a este diseño, puede extender y configurar las páginas como lo desee (por ejemplo, Agregar lógica adicional para restringir el acceso a la página).
El parámetro
include_in_schemase establece enFalseen cada punto final para evitar incluir estos puntos finales en la especificación de 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 ()El parámetro
include_in_schemase establece enFalseen cada punto final para evitar incluir estos puntos finales en la especificación de 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 - No quiero copiarlo y pegarlo de nuevo ...
Varias herramientas de documentación de API están listas para usar a su alcance con una interfaz estándar.
No más copiar y pegar lo mismo de un proyecto a otro. ¡Importe el paquete y úselo!
Aquí hay una solicitud de extracción realizada al repositorio de Fastapi. Este fue el punto que entendí que la configuración era limitada y no cambiaría ...
Además, la respuesta del autor a este PR muestra que no veremos más herramientas de documentación alternativas en el futuro.
Aquí hay otra solicitud de extracción realizada al repositorio de Fastapi. Trae soporte escalar, pero aún no está aprobado/fusionado y creo que se mantendrá así gracias a las relaciones públicas anteriores.
Una interfaz estándar para muchas interfaces de documentación de API con características de configuración.
Últimamente, las herramientas de documentación basadas en especificaciones de OpenAPI se han vuelto populares en la comunidad de Python. Vemos muchos proyectos (FastAPI, Litestar, APISPEC, Flasgger, Spectree, Connexion, etc.) que ofrecen soporte para la especificación de OpenAPI fuera de la caja.
Litestar tiene apoyo para Swaggerui, Redoc, Rapidoc y Elements, y Fastapi tiene apoyo para Swaggerui y Redoc, pero ¿qué sigue? ¿Será suficiente el próximo?
Todos tienen una cosa en común, algunos html (como cadena de python o un archivo) plantados con la configuración dada.
¿Ves a dónde voy?
Quiero que openapipages sea sqlalchemy de herramientas de documentación basadas en especificaciones de OpenAPI.
¡Una interfaz para muchos! Y, por supuesto, el marco del marco agnóstico ... para que pueda usarlo en sus proyectos Fastapi, Litestar o cualquier otro proyecto que genere especificaciones de OpenApi.
Los proyectos de Fastapi y Litestar y las dos solicitudes de extracción mencionadas anteriormente me inspiraron a crear este paquete.
openapipages se distribuye bajo los términos de la licencia MIT.