Graphene – GraphQL mit Python: Leitfaden für Einsteiger & Profis

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in GraphQL und Graphene

GraphQL ist eine moderne Abfragesprache für APIs und eine Laufzeitumgebung, die 2012 von Facebook entwickelt wurde, um die Probleme traditioneller REST-APIs zu lösen. Graphene ist eine leistungsstarke Python-Bibliothek, die eine vollständige Implementierung der GraphQL-Spezifikation mit Unterstützung für typisierte Schemas, Mutationen und Integration mit gängigen ORM-Systemen bietet.

Was ist GraphQL und warum wird es benötigt?

GraphQL bietet einen deklarativen Ansatz zum Abrufen von Daten, bei dem der Client genau beschreibt, welche Daten er benötigt. Im Gegensatz zu REST, wo der Server die Antwortstruktur bestimmt, ermöglicht GraphQL dem Client, eigene Abfragen zu formulieren und genau die benötigten Daten zu erhalten.

Wichtige Vorteile von GraphQL gegenüber REST

Einheitlicher Einstiegspunkt

GraphQL verwendet einen einzigen URL-Endpunkt für alle Operationen, was die API-Architektur vereinfacht und die Notwendigkeit einer Versionierung über die URL überflüssig macht.

Flexibilität bei Abfragen

Der Client bestimmt selbst die Antwortstruktur, indem er nur die benötigten Felder und verknüpften Daten abfragt.

Vermeidung von Datenredundanz

Die Probleme des Over-fetching (Abruf unnötiger Daten) und Under-fetching (unzureichende Daten) werden auf Abfrageebene gelöst.

Verknüpfung zusammenhängender Daten

Die Möglichkeit, Daten aus mehreren verknüpften Entitäten in einer einzigen Abfrage zu erhalten, reduziert die Anzahl der Serveranfragen.

Strenge Typisierung

Das GraphQL-Schema ist statisch typisiert, was die Validierung von Abfragen und die Autovervollständigung in der IDE ermöglicht.

Automatische Dokumentation

Das Schema dient als Live-Dokumentation der API, die über Introspection zugänglich ist.

Installation und Einrichtung von Graphene

Basisinstallation

pip install graphene

Integration mit Web-Frameworks

Für Flask:

pip install flask-graphql

Für Django:

pip install graphene-django

Für FastAPI:

pip install starlette-graphene3

Integration mit Datenbanken

Für SQLAlchemy:

pip install graphene-sqlalchemy

Für Django ORM:

pip install graphene-django

Erstellung eines einfachen GraphQL-Servers

Beispiel mit Flask

from flask import Flask
from flask_graphql import GraphQLView
import graphene

app = Flask(__name__)

class Query(graphene.ObjectType):
    hello = graphene.String(name=graphene.String(default_value="Welt"))
    
    def resolve_hello(self, info, name):
        return f"Hallo, {name}!"

schema = graphene.Schema(query=Query)

app.add_url_rule('/graphql', view_func=GraphQLView.as_view(
    'graphql', 
    schema=schema, 
    graphiql=True  # Aktiviert die GraphiQL-Oberfläche
))

if __name__ == '__main__':
    app.run(debug=True)

Beispiel mit Django

# settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'graphene_django',
    'myapp',
]

GRAPHENE = {
    'SCHEMA': 'myproject.schema.schema'
}

# urls.py
from django.urls import path
from graphene_django.views import GraphQLView

urlpatterns = [
    path('graphql/', GraphQLView.as_view(graphiql=True)),
]

Definition von Typen und Schemas in Graphene

Erstellung benutzerdefinierter Typen

import graphene

class User(graphene.ObjectType):
    id = graphene.ID()
    name = graphene.String()
    email = graphene.String()
    age = graphene.Int()
    is_active = graphene.Boolean()
    
    # Berechnete Felder
    full_name = graphene.String()
    
    def resolve_full_name(self, info):
        return f"{self.first_name} {self.last_name}"

class Post(g                    

Empfehlungen