Problem

In einem GraphQL-Umfeld, wo es viele verteilte Entwicklungsteams und Services gibt, kann es vorkommen, dass jedes Team versucht, seine eigenen Konventionen durchzusetzen. Das kann dazu führen, dass die einzelnen Clients immer mehr API-Endpunkte anbinden müssen, was einen großen Mehraufwand bedeutet: Konfiguration, Authentifizierung, Maintenance etc.

Lösung

Apollo Federation[1] – eine Architektur, mit der man mehrere GraphQL APIs in einem einzigen Endpunkt vereinen kann.

In einer solchen Architektur gibt es das Konzept von Subgraphen und dem Supergraph. Der Supergraph stellt dabei einen Router bereit, der dafür zuständig ist, eingehende Requests aufzulösen und sie an die entsprechenden Subgraphen weiterzuleiten. Beliebig viele Subgraphen stellen jeweils ein eigenes GraphQL-Schema zur Verfügung, die über einen composition[2] Prozess in ein Supergraph-Schema vereint werden.

Apollo Federation

Beispiel

Author-Subgraph-Schema
type Author {
    id: ID!
    name: String!
}
Book-Subgraph-Schema
type Book {
    id: ID!
    title: String!
}
 
type Author {
    id: ID!
    books: [Book]
}
Supergraph-Schema
type Author {
    id: ID!
    name: String!
    books: [Book]
}
 
type Book {
    id: ID!
    title: String!
}

Auf der rechten Seite kann man das resultierende Supergraph-Schema sehen, dass nun das einzige Schema aus Client-Sicht ist. Hier wird auch noch ein weiterer Vorteil von Apollo Federation ausgenutzt. Und zwar geht es um das Prinzip von Separation of Concerns. Wie man erkennen kann, hat der Typ Author im Supergraph-Schema ein weiteres Feld books, das gar nicht aus dem Schema vom Author Subgraphen kommt. Über Federation ist es möglich die Funktionalität anderer Subgraphen zu erweitern, um so die Zuständigkeiten der einzelnen Subgraphen besser zu trennen.

toiletpaper184

Weiterführende Aspekte:

SCHREIB UNS

* Pflichtfeld

SCHREIB UNS

* Pflichtfeld

Cookie-Einstellungen

Diese Website verwendet Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und Zugriffe auf die Website zu analysieren. Zudem werden Informationen zu Ihrer Verwendung der Website an Partner für soziale Medien, Werbung und Analysen weitergegeben. Die Partner führen diese Informationen möglicherweise mit weiteren Daten zusammen, die Sie ihnen bereitgestellt haben oder die sie im Rahmen Ihrer Nutzung der Dienste gesammelt haben.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. Dort können Sie nachträglich auch Ihre Cookie-Einstellungen ändern.

contact icon

Kontakt aufnehmen