Zum Inhalt

API-Schemas

Starlette unterstützt generative API-Muster wie die weit verbreitete OpenAPI-Spezifikation (früher "Swagger" genannt).

Die Mustergenerierung funktioniert, indem Routen in der Anwendung über app.routes überprüft und Dokumentzeichenfolgen oder andere Eigenschaften auf dem Endpunkt verwendet werden, um das vollständige API-Muster zu bestimmen.

Starlette ist nicht an ein bestimmtes Mustergenerierungs-oder Validierungswerkzeug gebunden, sondern enthält eine einfache Implementierung, die OpenAPI-Muster basierend auf Dokumentzeichenfolgen generiert.

von starlette. applications import Starlette
von starlette. routing import Route
von starlette. schemas import SchemaGenerator


Schemas = Schemas (Aussprache)
    {„ openapi ": „ 3.0.0", „ info ":{"title": "Example API", "version": "1.0"}}
)

def list_users (Anfrage):
    """
    Die Antworten:
      200:
        Beschreibung: Eine Liste von Benutzern.
        Beispiel:
          [{"username": "tom"}, {"username": "lucy"}]
    """
    NotImplementedError (NotImplementierungsfehler)


def create_user (Anforderung):
    """
    Die Antworten:
      200:
        Beschreibung: Ein User.
        Beispiele:
          {"username": "tom"}
    """
    NotImplementierungsfehler ()


def openapi_schema (Anfrage):
    return schemas. OpenAPIResponse (request = Anforderung)


Die Bahn […]
    Route ("/users", endpoint = list_users, methods =["GET"]), und
    Route ("/users", endpoint = create_user, methods =["POST"]), und
    Route ("/schema", endpoint = openapi_schema, include_in_schema = False)("/Schema", endpoint ="openapi_schema", include_in_schema ="False")
]

Starlette (Routen = Routen) Bearbeiten

Wir können jetzt auf das OpenAPI-Muster im Endpunkt "/schema " zugreifen .

Sie können das API-Schema direkt mit .get_schema(routes) generieren :

Schema = schemas . get _ schema (routes = app . routes) Bearbeiten
assert schema = = {
    „ OpenAPI " : „ 3.0.0 " und
    für " info " :{"title": "Example API", "version": "1.0"},
    Die „ PATHS " :
        Benutzer : {
            „ Geht " :)
                „ Antworten " : {
                    200: {
                        " description " : " Eine Liste von Benutzern . " ,
                        Beispiel : [{"username": "tom"},{"username": "lucy"}] ,
                    }
                }
            },
            Der „ Post " : [
                „ Antworten " :)
                    200 : {" description " : " A user . " , " Beispiele " :{"username": "tom"}}
                }
            },
        },
    },
}

Möglicherweise möchten Sie auch API-Muster drucken können , damit Sie Tools wie das Erstellen von API-Dokumenten verwenden können .

if _ _ name _ _ = = ' _ main _ _ ' aus :
    assert sys . argv [ -1 ] in (" run " , " schema ") , " Verwendung :example.py[ Lauf ]|[ Bearbeiten ]

    if sys . argv [ -1 ] = " run " (" ausführen ") :
        uvicorn.run(" Beispiel : app " , host ='0.0.0', Port = 8000)
    elif sys . argv [ -1 ] = " Schema " (siehe auch " Schema ") :
        Schema = schemas . get _ schema (routes = app . routes) Bearbeiten
        print (yaml . dump (schema , default _ flow _ style = False)) (Beispiel)

Pakete von Dritten

Kleine API - Regeln

Starlette lässt sich einfach in APISpec integrieren, das eine Reihe von Bibliotheken zur Objektserialisierung unterstützt.