Völlig pythonische, auf OpenAPI basierende anpassbare Dokumentationsseiten für Swaggerui, Redoc, Rapidoc, Elemente, Skalar.
Beachten Sie, dass dieses Paket keine OpenAPI -Spezifikation generiert, sondern nur die Seiten mit der angegebenen Konfiguration.
Gib mir eine OpenAPI -Spezifikation, überlasse den Rest mir ...
| Dokumentation | Seite | Konfiguration |
|---|---|---|
| Swaggerui | ✅ | ✔️ |
| Redoc | ✅ | ✔️ |
| Rapidoc | ✅ | ✔️ |
| Elemente | ✅ | ✔️ |
| Skalar | ✅ | ✔️ |
Emoji -Schlüssel:
| Emoji | Bedeutung |
|---|---|
| ✅ | Bereit |
| ✔️ | Teilweise |
| Fehlgeschlagen | |
| ? | Im Gange |
| ? | Ausstehend |
| Ich bin mir nicht sicher |
pip install openapipages Ich weiß, dass es ein bisschen Kesselplatte aussieht, aber alles ist einfach. Die Methode .render() gibt die HTML als Zeichenfolge zurück. Dank dieses Designs können Sie die Seiten nach Belieben erweitern und konfigurieren (z. B. zusätzliche Logik hinzufügen, um den Zugriff auf die Seite einzuschränken).
Der Parameter
include_in_schemaist in jedem Endpunkt aufFalseeingestellt, um zu vermeiden, dass diese Endpunkte in die OpenAPI -Spezifikation aufgenommen werden.
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 ()Der Parameter
include_in_schemaist in jedem Endpunkt aufFalseeingestellt, um zu vermeiden, dass diese Endpunkte in die OpenAPI -Spezifikation aufgenommen werden.
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 - ich möchte es nicht wieder kopieren und einfügen ...
Mehrere API -Dokumentationstools können mit einer Standardschnittstelle an Ihren Fingerspitzen verwendet werden.
Nicht mehr das Gleiche von einem Projekt zum anderen kopieren und einfügen. Importieren Sie das Paket und verwenden Sie es!
Hier ist eine Pull -Anfrage an das Fastapi Repo. Dies war der Punkt, den ich verstand, dass die Konfiguration begrenzt war und sie sich nicht ändern würde ...
Die Antwort des Autors auf diese PR zeigt, dass wir in Zukunft nicht mehr alternative Dokumentationstools sehen werden.
Hier ist eine weitere Pull -Anfrage an das Fastapi Repo. Es bringt skalare Unterstützung, aber es ist noch nicht genehmigt/zusammengeführt und ich denke, es wird dank der vorherigen PR so bleiben.
Eine Standardschnittstelle für viele API -Dokumentationsoberflächen mit Konfigurationsfunktionen.
In letzter Zeit sind in der Python-Community OpenAPI-technische Dokumentationstools beliebt geworden. Wir sehen viele Projekte (Fastapi, Litestar, Apispec, Flasgger, Spectree, Connexion usw.) und bieten Unterstützung für die OpenAPI -Spezifikation.
Litestar unterstützt Swaggerui, Redoc, Rapidoc und Elemente und Fastapi unterstützt Swaggerui und Redoc, aber was kommt als nächstes? Wird der nächste genug sein?
Sie alle haben eines gemeinsam, einige HTML (als Python -Zeichenfolge oder eine Datei), die mit der angegebenen Konfiguration vorgeschrieben ist.
Siehst du, wohin ich gehe?
Ich möchte, dass openapipages SQLALCHEMY von OpenAPI-basierten Dokumentationstools sein.
Eine Schnittstelle für viele! Und natürlich agnostisch Framework ... damit Sie es in Ihren Fastapi, Litestar -Projekten oder einem anderen Projekt verwenden können, das OpenAPI -Spezifikationen generiert.
Fastapi und Litestar -Projekte und die beiden oben genannten Anfragen haben mich dazu inspiriert, dieses Paket zu erstellen.
openapipages wird unter den Bestimmungen der MIT -Lizenz verteilt.