Zum Inhalt

GraphQL

Da FastAPI auf dem ASGI-Standard basiert, ist es sehr einfach, jede GraphQL-Bibliothek zu integrieren, die auch mit ASGI kompatibel ist.

Sie können normale FastAPI-Pfadoperationen mit GraphQL in derselben Anwendung kombinieren.

Tipp

GraphQL löst einige sehr spezifische Anwendungsfälle.

Es hat Vorteile und Nachteile im Vergleich zu gängigen Web-APIs.

Wiegen Sie ab, ob die Vorteile für Ihren Anwendungsfall die Nachteile ausgleichen. 🤓

GraphQL-Bibliotheken

Hier sind einige der GraphQL-Bibliotheken, welche ASGI unterstützen. Diese könnten Sie mit FastAPI verwenden:

GraphQL mit Strawberry

Wenn Sie mit GraphQL arbeiten möchten oder müssen, ist Strawberry die empfohlene Bibliothek, da deren Design dem Design von FastAPI am nächsten kommt und alles auf Typannotationen basiert.

Abhängig von Ihrem Anwendungsfall bevorzugen Sie vielleicht eine andere Bibliothek, aber wenn Sie mich fragen würden, würde ich Ihnen wahrscheinlich empfehlen, Strawberry auszuprobieren.

Hier ist eine kleine Vorschau, wie Sie Strawberry mit FastAPI integrieren können:

import strawberry
from fastapi import FastAPI
from strawberry.asgi import GraphQL


@strawberry.type
class User:
    name: str
    age: int


@strawberry.type
class Query:
    @strawberry.field
    def user(self) -> User:
        return User(name="Patrick", age=100)


schema = strawberry.Schema(query=Query)


graphql_app = GraphQL(schema)

app = FastAPI()
app.add_route("/graphql", graphql_app)
app.add_websocket_route("/graphql", graphql_app)

Weitere Informationen zu Strawberry finden Sie in der Strawberry-Dokumentation.

Und auch die Dokumentation zu Strawberry mit FastAPI.

Ältere GraphQLApp von Starlette

Frühere Versionen von Starlette enthielten eine GraphQLApp-Klasse zur Integration mit Graphene.

Das wurde von Starlette deprecated, aber wenn Sie Code haben, der das verwendet, können Sie einfach zu starlette-graphene3 migrieren, welches denselben Anwendungsfall abdeckt und über eine fast identische Schnittstelle verfügt.

Tipp

Wenn Sie GraphQL benötigen, würde ich Ihnen trotzdem empfehlen, sich Strawberry anzuschauen, da es auf Typannotationen basiert, statt auf benutzerdefinierten Klassen und Typen.

Mehr darüber lernen

Weitere Informationen zu GraphQL finden Sie in der offiziellen GraphQL-Dokumentation.

Sie können auch mehr über jede der oben beschriebenen Bibliotheken in den jeweiligen Links lesen.