Serie
Eine schnelle GraphQL-API mit Fastify und Yoga
Bau eine GraphQL-API in TypeScript mit Fastify und GraphQL Yoga und mach sie schnell: DataLoader, Live-Subscriptions über mehrere Instanzen mit Valkey, ein Response-Cache und Query-Limits.
Acht Teile, vom leeren Ordner zu einer GraphQL-API, die für echten Verkehr bereit ist. Du baust die API eines Gildenbretts auf Fastify und GraphQL Yoga, mit PostgreSQL und Drizzle darunter und Typen, die aus dem Schema erzeugt werden. Dann machst du sie schnell und hältst sie schnell: DataLoader bündelt die Datenbankabfragen, Subscriptions schicken jede Änderung über Server-Sent Events und erreichen über Valkey jede Instanz, ein geteilter Cache beantwortet wiederholte Lesezugriffe, und Limits weisen die Queries ab, die zu viel kosten würden. Jeder Befehl wurde ausgeführt, und jede Ausgabe ist echt.
Questreihe
- Teil 1: Fastify trifft GraphQL YogaRichte ein TypeScript-Projekt ohne Build-Schritt ein, setz GraphQL Yoga auf einen Fastify-Server und schick ihm deine ersten Queries.20 Min.
- Teil 2: Eine Datenbank mit PostgreSQL und DrizzleStarte PostgreSQL in Docker, beschreib die Tabellen des Gildenbretts in TypeScript mit Drizzle, leg sie mit einer Migration an und füll sie mit Beispieldaten.25 Min.
- Teil 3: Erst das Schema, typisiert von CodegenSchreib das GraphQL-Schema des Gildenbretts, lass GraphQL Codegen daraus die Typen der Resolver erzeugen, beantworte Queries aus PostgreSQL und finde das N+1-Problem im SQL-Log.25 Min.
- Teil 4: Bündeln mit DataLoaderSammle die Abfragen eines Requests mit DataLoader und beantworte sie mit einer Abfrage pro Tabelle, sodass das Questbrett drei SQL-Abfragen braucht statt sechzehn.25 Min.
- Teil 5: Mutations und Live-Updates mit SubscriptionsSchreib Quests mit Mutations aus, nimm sie an und erledige sie, schick jede Änderung über Server-Sent Events an die Clients, die sie abonniert haben, und halt den Cache von DataLoader in langlebigen Subscriptions frisch.30 Min.
- Teil 6: Subscriptions über mehrere Instanzen mit ValkeyStarte eine zweite Instanz der API, sieh zu, wie ihre Abonnenten die Events der ersten verpassen, und teil die Events über Valkey, damit jede Instanz jede Änderung mitbekommt, selbst nach einem Neustart von Valkey.20 Min.
- Teil 7: Ganze Antworten in Valkey cachenCache komplette Query-Ergebnisse mit dem Response-Cache von Yoga in Valkey, räum sie ab, wenn Mutations die Daten ändern, beantworte wiederholte GET-Requests mit 304 und halt die API am Laufen, wenn der Cache ausfällt.25 Min.
- Teil 8: Query-Limits und Persisted OperationsSchütz die API mit einem Tiefenlimit und einem Kostenlimit vor Operationen, die zu tief oder zu teuer sind, und beschränk sie mit Persisted Operations auf die Operationen deiner eigenen Clients.25 Min.