Objektumtípusok optimalizálása a HotChocolate kulcsdirektívájával
Ha a GraphQL-t HotChocolate-tel használja, előfordulhat, hogy ki kell bővítenie az objektumtípusokat olyan direktívákkal, mint pl. @kulcsfontosságú irányelvet, hogy biztosítsa a kompatibilitást az Apollo Föderációval. Ez különösen fontos az egyesített sémák esetében, amelyekben a kulcsok azonosítják az entitásokat több szolgáltatásban. Nagyon fontos megérteni, hogyan lehet megfelelően megtervezni az objektumtípusokat ezekkel az irányelvekkel.
Ez a cikk bemutatja, hogyan kell használni Hot Chocolate tárgytípusok díszítésére a @kulcsfontosságú irányelv. Megvizsgálunk konkrét példákat is, amelyek C# kódot használnak egy egyszerű összeállításhoz Szülő osztályt, és hogyan lehet megváltoztatni az előállított GraphQL sémát. A hangsúly azokon a tényleges műveleteken lesz, amelyeket a funkció létrehozása érdekében megtehet.
Ha a HotChocolate-ot használja GraphQL objektumtípusok létrehozásához, a @kulcsfontosságú Előfordulhat, hogy az irányelv nem alkalmazható azonnal a várt módon. Ehelyett a séma létrehozhat egy egyszerű típusú struktúrát, amelyből hiányoznak az összevonáshoz szükséges kritikus jellemzők. Megvizsgáljuk, hogyan oldjuk meg ezt, és hogy a séma a várt módon működjön.
Kitérünk a kulcsfontosságú konfigurációs feladatokra is, mint például a GraphQL szerver beállításainak módosítására és a megfelelő használatára Hot Chocolate és Apollo Szövetség csomagokat. A megfelelő konfigurációval könnyen alkalmazhat direktívákat, és biztosíthatja a szolgáltatások megfelelő sémaegyesítését.
| Parancs | Használati példa |
|---|---|
| [Kulcsfontosságú] | A HotChocolate alkalmazásban ez a parancs egy objektumtípust díszít a @kulcsfontosságú irányelv. Meghatározza, hogy melyik mező szolgáljon a típus egyedi azonosítójaként az Apollo Federation kezelése során. |
| [ReferenceResolver] | Amikor egy metódusra alkalmazzák, ez az attribútum arra utasítja a HotChocolate-ot, hogy ezt a metódust használja feloldásként egyesített típusok esetén. Lehetővé teszi a releváns adatok lekérését az egyesített szolgáltatásokban külső hivatkozásokon keresztül. |
| .AddApolloFederation() | Ez a parancs konfigurálja az Apollo Federation támogatását a HotChocolate GraphQL kiszolgálón. Engedélyezni kell az egyesített sémafunkciókat, mint például a @kulcsfontosságú irányelv. |
| .RegisterService | Regisztrál egy szolgáltatást, mint pl ParentRepository, a GraphQL DI tárolóban. Ez lehetővé teszi, hogy a szolgáltatásokat közvetlenül a GraphQL feloldóba illessze be. |
| direktíva @key(mezők: String!) | Az SDL modellben ez a direktíva határozza meg az összevonás fő kulcsmezőjét. A szolgáltatások közötti entitásfeloldás engedélyezéséhez az objektumtípusoknak rendelkezniük kell a @kulcsfontosságú irányelv. |
| ISchemaAsync.ExecuteAsync() | Aszinkron módon végrehajt egy GraphQL lekérdezést, amelyet általában az egységteszteknél használnak annak biztosítására, hogy a séma és az irányelvek, mint pl. @kulcsfontosságú, megfelelően hajtják végre. |
| [Szolgáltatás] | Ez a szolgáltatás függőségek, például adattárak vagy szolgáltatások beillesztésére szolgál a GraphQL feloldó metódus argumentumaiba, lehetővé téve a szolgáltatás lekérését a HotChocolate alkalmazásban. |
| Assert.Contains() | Az XUnit egységtesztelési parancsa annak biztosítására szolgál, hogy bizonyos karakterláncok vagy direktívák, mint például a @kulcsfontosságú direktíva, szerepelnek a generált GraphQL sémában a tesztek során. |
A kulcsfontosságú irányelvek szerepének megértése a HotChocolate-ben
Az első szkript elmagyarázza, hogyan kell megvalósítani a @kulcsfontosságú direktíva a HotChocolate használatával C#-ban. Ez a szkript garantálja, hogy a létrehozott GraphQL séma tartalmazza a @kulcsfontosságú irányelv az Apollo Szövetséggel való szövetség számára. A szkript a létrehozásával kezdődik Szülő osztály és hozzárendelése a [Kulcsfontosságú] és [azonosító] mezőinek tulajdonítja. Ezek a tulajdonságok fontosak a HotChocolate tájékoztatásához, hogy megjelölje a id mezőt az entitás egyedi azonosítójaként. Ez döntő fontosságú egy olyan összevont GraphQL szolgáltatás létrehozásakor, amelyben az entitások több szolgáltatás között megoszthatók. Ennek a mezőnek a megjelölése lehetővé teszi a GraphQL szolgáltatás számára az entitás feloldását egyesített lekérdezésekben.
A ReferenceResolver A függvény szintén a szkript lényeges összetevője. Ez a statikus funkció lehetővé teszi, hogy a HotChocolate feloldja az entitást azáltal, hogy megkeresi a Szülő objektum egy adattárban. A ParentRepository regisztrálva van a GraphQL szerveren, és a Kap metódus a szülőt kéri le id. A bootstrap kódban a .AddQueryType utasítás regisztrálja a Lekérdezés objektum, amely a GraphQL lekérdezések végrehajtására szolgál. A Regisztrációs szolgáltatás lehetővé teszi a függőségek, például a ParentRepository beillesztését a GraphQL feloldókba. Ez a kialakítás leegyszerűsíti az adatok visszakeresését, miközben megőrzi a problémák egyértelmű elkülönítését.
A második példa séma-első megközelítést alkalmaz, a GraphQL SDL-t (Schema Definition Language) használja a @kulcsfontosságú direktíva a sémán belül. Ez a megoldás különösen hatékony azon csapatok számára, amelyek már ismerik a GraphQL SDL szintaxisát. Ebben a példában a @kulcsfontosságú irányelvet alkalmazzák a Szülő típus, egyértelműen jelezve a id mezőt egyedi azonosítóként. A séma-first használata lehetővé teszi a fejlesztők számára, hogy jobban irányítsák a GraphQL séma felépítését, és módosítsák azt anélkül, hogy bele kellene menniük a C# kódba, így rugalmasabb lehetőség a nagyobb csapatok számára.
Végül az egységtesztelő összetevő ellenőrzi, hogy a kód megfelelően működik-e. Az xUnit tesztelési keretrendszer használatával az Assert.The Contains parancs biztosítja, hogy az eredményül kapott séma tartalmazza a @kulcsfontosságú irányelv. Ez a teszt érvényesíti a sémát a @kulcsfontosságú direktíva, amely megerősíti, hogy a szolgáltatás megfelelően van konfigurálva az összevonáshoz. Az egységtesztelés a bevált módszer annak biztosítására, hogy a GraphQL-séma vagy a feloldómódszerek módosításai ne zavarják a funkcionalitást, különösen egy egyesített rendszerben, ahol több szolgáltatásnak zökkenőmentesen együtt kell működnie.
A kulcsfontosságú irányelv végrehajtása a HotChocolate programban a GraphQL objektumtípusokhoz
Ez a megoldás a C#, a HotChocolate és az Apollo Federation segítségével módosítja a háttérből a GraphQL-sémát.
using HotChocolate;using HotChocolate.Types;using HotChocolate.Types.Relay;using Microsoft.Extensions.DependencyInjection;public class Parent{public Parent(string id, string name){Id = id;Name = name;}[Key][ID]public string Id { get; }public string Name { get; }[ReferenceResolver]public static Parent? Get(ParentRepository repository, string id){return repository.GetParent(id);}}public class Query{public Parent GetParent(string id, [Service] ParentRepository repository){return repository.GetParent(id);}}public void ConfigureServices(IServiceCollection services){services.AddGraphQLServer().AddQueryType<Query>().RegisterService<ParentRepository>().AddApolloFederation();}
A GraphQL séma első megközelítése a @key irányelv alkalmazásához
Ez a megoldás a séma-első megközelítést használja a GraphQL SDL-lel és a HotChocolate-tal egy egyéni séma létrehozásához @key direktívával.
type Parent @key(fields: "id") {id: ID!name: String!}extend type Query {parent(id: ID!): Parent}extend type Mutation {createParent(id: ID!, name: String!): Parent}directive @key(fields: String!) on OBJECT | INTERFACEschema {query: Querymutation: Mutation}
A HotChocolate GraphQL egységtesztelése @key direktívával
Itt van egy C# egységteszt, amely az xUnit keretrendszert használja annak biztosítására, hogy a HotChocolate szerver megfelelően alkalmazza a @key direktívát a GraphQL sémában.
using Xunit;using HotChocolate.Execution;using Microsoft.Extensions.DependencyInjection;public class ParentTests{[Fact]public async Task ParentSchema_ContainsKeyDirective(){var serviceCollection = new ServiceCollection();serviceCollection.AddGraphQLServer().AddQueryType<Query>().AddApolloFederation();var serviceProvider = serviceCollection.BuildServiceProvider();var schema = await serviceProvider.GetRequiredService<ISchemaAsync>().ExecuteAsync();Assert.Contains("@key(fields: \"id\")", schema.ToString());}}
A GraphQL fejlesztése az Apollo Federation és a HotChocolate segítségével
A GraphQL és a HotChocolate egyesített környezetben való használata jól strukturált sémafűzést igényel. Az Apollo Federation lehetővé teszi a fejlesztők számára, hogy a sémákat több szolgáltatás között particionálják az egységes felület fenntartása mellett. A @kulcsfontosságú direktívát a HotChocolate segítségével, megadhatja, hogy a GraphQL entitások hogyan legyenek feloldva több szolgáltatásban. Ez modulárisabbá és méretezhetőbbé teszi az API-t, ami különösen előnyös a nagy, elosztott rendszerekben, ahol több csapat vezérli a GraphQL séma különböző aspektusait.
Egy tipikus egyesített sémában az entitások, mint pl Szülő számos szolgáltatásban létezhet. Az Apollo Federation a @kulcsfontosságú direktíva, hogy egyedileg azonosítsa az entitást egy meghatározott mező alapján, pl id. A HotChocolate Apollo Federation támogatása biztosítja, hogy szolgáltatása könnyedén integrálódjon egy nagyobb infrastruktúrába. A kulcsok beállítása mellett használhat összevonási direktívákat, például as @kiterjeszt vagy @külső több mikroszolgáltatásban szétszórt adatmezők kezeléséhez, nagyobb rugalmasságot biztosítva a GraphQL beállításához.
Egy másik kulcsfontosságú tényező a HotChocolate használata során a teljesítmény optimalizálása. Az adatok túlzott lekérése gyakori probléma a GraphQL API-kkal, különösen egyesített környezetekben. A megfelelő feloldók használatával, mint például a ReferenceResolver A korábbi példákban leírtak garantálják, hogy az API csak a szükséges adatokat szállítja túlzott keresések nélkül. Ezenkívül a HotChocolate támogatja a fejlett lekérdezések kötegelési és gyorsítótárazási algoritmusait, amelyek növelhetik az API-válasz sebességét és hatékonyságát egy egyesített sémában.
Gyakori kérdések a HotChocolate-ről és az Apollo Szövetségről
- Milyen előnyökkel jár az Apollo Federation a GraphQL fejlesztésében?
- Az Apollo Federation lehetővé teszi a GraphQL-sémák felosztását számos szolgáltatásra, amelyek mindegyike a séma egy szakaszáért felelős, de továbbra is konzisztens API-t tart fenn.
- Mi az a @key a HotChocolate-ban használt direktíva?
- A @key direktíva egyedi azonosítót hoz létre egy entitás számára, lehetővé téve annak feloldását több GraphQL szolgáltatáson keresztül.
- Használhatom [Key] és [ID] attribútumok együtt HotChocolate?
- Igen, a [Key] ingatlant szövetségre használják, és [ID] a mezőt azonosítóként határozza meg a sémán belül.
- Mit tesz .RegisterService csinálni a HotChocolate-ban?
- .RegisterService Regisztrál egy szolgáltatást, például egy adattárat a GraphQL-kiszolgálón, lehetővé téve a függőségi befecskendezést a feloldóiban.
- Hogyan teszteli a GraphQL sémákat a HotChocolate segítségével?
- A HotChocolate lehetővé teszi a séma tesztelését egységtesztekkel a séma meghívásával és az olyan direktívák ellenőrzésével, mint pl. @key a kapott eredményben.
Az összevonási folyamat lezárása
HotChocolate használata @kulcsfontosságú irányelv biztosítja, hogy az egyesített GraphQL séma megfelelően van konfigurálva az Apollo Federation számára. Ez a megközelítés javítja az objektumtípus-kezelést, és lehetővé teszi a szolgáltatások közötti entitásfeloldást.
A GraphQL kiszolgáló konfigurálása a HotChocolate segítségével és olyan direktívák használatával, mint pl @kulcsfontosságú leegyszerűsíti a nagy, elosztott API-k felépítését. Ez a stratégia lehetővé teszi a szolgáltatások egyszerűbb kiterjesztését, miközben fenntartja a konzisztens, nagy teljesítményű sémaillesztést.
Referenciák és források a HotChocolate és az Apollo Federation számára
- Kifejti a használatát @kulcsfontosságú irányelvet az Apollo Federationben, és hogyan integrálódik a HotChocolate-ba. További részletekért tekintse meg a hivatalos HotChocolate dokumentációt a címen HotChocolate Docs .
- Áttekintést nyújt a GraphQL Apollo Federation szolgáltatással történő konfigurálásáról a HotChocolate használatával. Lásd ezt az útmutatót innen Apollo Federation Docs további információkért.
- Részletes példát kínál a szolgáltatás regisztrációjára és a lekérdezések feloldására a GraphQL-ben a HotChocolate használatával. További információ ebben a cikkben található Szolgáltatásintegráció a HotChocolate-tel .