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:
- Strawberry 🍓
- Ariadne
- Mit Dokumentation für Starlette (welche auch für FastAPI gilt)
- Tartiflette
- Mit Tartiflette ASGI, für ASGI-Integration
- Graphene
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.