Pages de documentation personnalisables entièrement pythonique et OpenAPI pour Swaggerui, Redoc, RapidOC, Elements, Scalar.
Gardez à l'esprit que ce package ne génère pas les spécifications OpenAPI, elle ne fait que les pages avec la configuration donnée.
Donnez-moi une spécification OpenAPI, laissez-moi le reste ...
| Documentation | Page | Configurer |
|---|---|---|
| Fanfaron | ✅ | ✔️ |
| Redoc | ✅ | ✔️ |
| Rapidoc | ✅ | ✔️ |
| Éléments | ✅ | ✔️ |
| Scalaire | ✅ | ✔️ |
Emoji Key:
| Emoji | Signification |
|---|---|
| ✅ | Prêt |
| ✔️ | Partiellement |
| Échoué | |
| ? | En cours |
| ? | En attente |
| Pas sûr |
pip install openapipages Je sais que ça a l'air un peu passe-partout mais tout est simple. La méthode .render() renvoie le HTML en tant que chaîne. Grâce à cette conception, vous pouvez étendre et configurer les pages comme vous le souhaitez (par exemple, ajoutez une logique supplémentaire pour restreindre l'accès à la page).
Le paramètre
include_in_schemaest défini surFalsedans chaque point de terminaison pour éviter d'inclure ces points de terminaison dans la spécification 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 ()Le paramètre
include_in_schemaest défini surFalsedans chaque point de terminaison pour éviter d'inclure ces points de terminaison dans la spécification 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 - je ne veux pas le copier et le coller à nouveau ...
Plusieurs outils de documentation API sont prêts à l'emploi à portée de main avec une interface standard.
Plus de copie et de collage de la même chose d'un projet à un autre. Importez le package et utilisez-le!
Voici une demande de traction faite au dépôt Fastapi. C'était le point que j'ai compris que la configuration était limitée et qu'elle ne changerait pas ...
De plus, la réponse de l'auteur à ce RP montre que nous ne verrons pas plus d'outils de documentation alternatifs à l'avenir.
Voici une autre demande de traction faite au dépôt Fastapi. Il apporte un soutien scalaire, mais il n'est pas encore approuvé / fusionné et je pense qu'il restera ainsi grâce aux relations publiques précédentes.
Une interface standard pour de nombreuses interfaces de documentation API avec les fonctionnalités de configuration.
Dernièrement, les outils de documentation basés sur les spécifications OpenAPI sont devenus populaires dans la communauté Python. Nous voyons beaucoup de projets (Fastapi, Linestar, Apispec, Flasgger, Spectree, Connexion, etc.) offrant une prise en charge des spécifications OpenAPI hors de la boîte.
Linestar soutient Swaggerui, Redoc, Rapidoc et Elements et Fastapi soutient Swaggerui et Redoc mais quelle est la prochaine étape? Le prochain sera-t-il suffisant?
Ils ont tous une chose en commun, certains HTML (comme chaîne Python ou un fichier) imprimé avec la configuration donnée.
Voyez-vous où je vais?
Je veux que openapipages soit sqlalchemy d'outils de documentation sur les spécifications OpenAPI.
Une interface pour beaucoup! Et bien sûr Framework Agnostic ... afin que vous puissiez l'utiliser dans votre Fastapi, vos projets Linestar ou tout autre projet qui génère des spécifications OpenAPI.
Les projets Fastapi et Linestar et les deux demandes de traction mentionnés ci-dessus m'ont inspiré pour créer ce package.
openapipages est distribué en vertu des termes de la licence du MIT.