A HotChocolate használata a kulcsfontosságú irányelv alkalmazására a GraphQL objektumtípusaira

A HotChocolate használata a kulcsfontosságú irányelv alkalmazására a GraphQL objektumtípusaira
A HotChocolate használata a kulcsfontosságú irányelv alkalmazására a GraphQL objektumtípusaira

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 | INTERFACE

schema {
    query: Query
    mutation: 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

  1. Milyen előnyökkel jár az Apollo Federation a GraphQL fejlesztésében?
  2. 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.
  3. Mi az a @key a HotChocolate-ban használt direktíva?
  4. 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.
  5. Használhatom [Key] és [ID] attribútumok együtt HotChocolate?
  6. 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.
  7. Mit tesz .RegisterService csinálni a HotChocolate-ban?
  8. .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.
  9. Hogyan teszteli a GraphQL sémákat a HotChocolate segítségével?
  10. 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
  1. 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 .
  2. Á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.
  3. 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 .