Kako uporabiti HotChocolate za uporabo ključne direktive za vrste objektov v GraphQL

Key Directive

Optimiziranje tipov objektov s ključno direktivo v HotChocolate

Ko uporabljate GraphQL z HotChocolate, boste morda morali razširiti svoje tipe objektov z direktivami, kot je direktivo, da se zagotovi združljivost s federacijo Apollo. To je še posebej pomembno za zvezne sheme, v katerih ključi identificirajo subjekte v več storitvah. Razumevanje, kako ustrezno oblikovati svoje tipe objektov s temi direktivami, je ključnega pomena.

Ta članek bo pokazal, kako uporabljati za okrasitev vrst predmetov z uporabo direktiva. Ogledali si bomo tudi posebne primere uporabe kode C# za izdelavo preprostega razreda in kako spremeniti izdelano shemo GraphQL. Poudarek bo na dejanskih dejanjih, ki jih lahko izvedete za ustvarjanje te funkcionalnosti.

Pri uporabi HotChocolate za konstruiranje tipov objektov GraphQL je direktiva morda ne bo uporabljena takoj, kot je pričakovano. Namesto tega lahko shema ustvari preprosto strukturo tipa, ki nima kritičnih funkcij, potrebnih za zvezo. Preučili bomo, kako to rešiti in zagotoviti, da bo vaša shema delovala po pričakovanjih.

Pokrivali bomo tudi ključna konfiguracijska opravila, kot je spreminjanje nastavitev strežnika GraphQL in uporaba pravih in paketi. S pravilno konfiguracijo lahko preprosto uporabite direktive in zagotovite ustrezno zvezo sheme za svoje storitve.

Ukaz Primer uporabe
V HotChocolate ta ukaz okrasi tip predmeta z uporabo direktiva. Določa, katero polje bo služilo kot enolični identifikator vrste pri delu s federacijo Apollo.
Ko se ta atribut uporabi za metodo, HotChocolate naroči, naj to metodo uporabi kot ločljivost za zvezne vrste. Omogoča pridobivanje ustreznih podatkov v zveznih storitvah prek zunanjih referenc.
Ta ukaz konfigurira podporo Apollo Federation v strežniku HotChocolate GraphQL. Treba je omogočiti funkcije zvezne sheme, kot je direktiva.
Registrira storitev, kot je npr , v vsebniku GraphQL DI. To vam omogoča vstavljanje storitev neposredno v razreševalec GraphQL.
V modelu SDL ta direktiva določa glavno ključno polje za zvezo. Če želite omogočiti razreševanje entitet med storitvami, morajo imeti vrste objektov direktiva.
Asinhrono izvede poizvedbo GraphQL, ki se običajno uporablja v testih enot, da zagotovi, da shema in direktive, kot je npr. , se pravilno izvajajo.
Ta funkcija se uporablja za vstavljanje odvisnosti, kot so repozitoriji ali storitve, v argumente metode razreševalnika GraphQL, kar omogoča iskanje storitev v HotChocolate.
Ukaz za testiranje enote XUnit se uporablja za zagotovitev, da nekateri nizi ali direktive, kot je direktive, so med preskusi vključeni v ustvarjeno shemo GraphQL.

Razumevanje vloge ključnih direktiv v HotChocolate

Prvi skript pojasnjuje, kako implementirati direktivo z uporabo HotChocolate v C#. Ta skript zagotavlja, da ustvarjena shema GraphQL vsebuje @ključ direktiva za zvezo z zvezo Apollo. Skript se začne z ustvarjanjem a razreda in dodeljevanje in [ID] pripisuje svojim poljem. Te lastnosti so pomembne za obveščanje HotChocolate o označevanju polje kot edinstveni identifikator entitete. To je ključnega pomena pri ustvarjanju zvezne storitve GraphQL, v kateri se entitete lahko delijo v več storitvah. Označevanje tega polja omogoča storitvi GraphQL, da razreši entiteto v zveznih poizvedbah.

The funkcija je tudi bistvena sestavina skripta. Ta statična funkcija omogoča HotChocolate, da razreši entiteto z iskanjem objekt v skladišču. The je registriran na strežniku GraphQL in Dobiti metoda pridobi nadrejenega po svojem . V zagonski kodi je navodilo registrira objekt, ki se uporablja za izvajanje poizvedb GraphQL.RegisterService omogoča vstavljanje odvisnosti, kot je ParentRepository, v razreševalnike GraphQL. Ta zasnova poenostavlja pridobivanje podatkov, hkrati pa ohranja jasno ločevanje zadev.

Drugi primer uporablja pristop najprej sheme in uporablja GraphQL SDL (Schema Definition Language) za definiranje direktivo znotraj sheme. Ta rešitev je še posebej učinkovita za ekipe, ki že poznajo sintakso SDL GraphQL. V tem primeru je @ključ se uporablja za vrsto, ki jasno označuje polje kot edinstven identifikator. Uporaba schema-first omogoča razvijalcem, da imajo večji nadzor nad tem, kako je shema GraphQL zgrajena, in jo spreminjajo, ne da bi morali iti v kodo C#, zaradi česar je bolj prilagodljiva možnost za večje ekipe.

Končno komponenta za testiranje enot potrdi, da koda deluje, kot je bilo predvideno. Z uporabo ogrodja za testiranje xUnit, Assert.The Contains ukaz zagotavlja, da nastala shema vključuje direktiva. Ta test potrdi shemo za prisotnost @ključ direktivo, ki potrjuje, da je storitev pravilno konfigurirana za zvezo. Testiranje enote je najboljša praksa za zagotovitev, da spremembe vaše sheme GraphQL ali metod razreševalnika ne motijo ​​funkcionalnosti, zlasti v zveznem sistemu, kjer mora več storitev nemoteno delovati skupaj.

Implementacija ključne direktive v HotChocolate za tipe objektov GraphQL

Ta rešitev uporablja C#, HotChocolate in Apollo Federation za spreminjanje sheme GraphQL iz ozadja.

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();
}

Uporaba prvega pristopa sheme GraphQL za uporabo direktive @key

Ta rešitev uporablja pristop najprej sheme z GraphQL SDL in HotChocolate za izdelavo sheme po meri z direktivo @key.

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
}

Testiranje enot HotChocolate GraphQL z @key direktivo

Tukaj je preizkus enote C#, ki uporablja ogrodje xUnit za zagotovitev, da strežnik HotChocolate pravilno uporablja direktivo @key v shemi GraphQL.

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());
    }
}

Izboljšanje GraphQL z Apollo Federation in HotChocolate

Uporaba GraphQL s HotChocolate v zveznem okolju zahteva dobro strukturirano povezovanje shem. Apollo Federation razvijalcem omogoča razdelitev shem na več storitev, hkrati pa ohranja enoten vmesnik. Uporaba z HotChocolate lahko določite, kako se entitete GraphQL razrešijo v več storitvah. Zaradi tega je vaš API bolj modularen in razširljiv, kar je še posebej koristno v velikih, porazdeljenih sistemih, kjer več skupin nadzoruje različne vidike sheme GraphQL.

V tipični zvezni shemi entitete, kot je npr lahko obstaja v številnih storitvah. Apollo Federation uporablja direktivo za enolično identifikacijo subjekta na podlagi določenega polja, kot je . Podpora HotChocolate za Apollo Federation zagotavlja, da se vaša storitev brez težav vključi v večjo infrastrukturo. Poleg nastavitev ključev lahko uporabite zvezne direktive, kot je as @razširja oz za upravljanje podatkovnih polj, razpršenih po več mikrostoritvah, kar zagotavlja večjo prilagodljivost za vašo nastavitev GraphQL.

Drugi ključni dejavnik pri uporabi HotChocolate je optimizacija delovanja. Prekomerno pridobivanje podatkov je pogosta težava API-jev GraphQL, zlasti v zveznih kontekstih. Z uporabo pravilnih razreševalcev, kot je opisano v prejšnjih primerih, zagotavlja, da vaš API zagotavlja le zahtevane podatke brez pretiranih iskanj. Poleg tega HotChocolate podpira napredne algoritme za zbiranje poizvedb in predpomnjenje, ki lahko povečajo hitrost odziva API-ja in učinkovitost v zvezni shemi.

  1. Kako Apollo Federation koristi razvoju GraphQL?
  2. Apollo Federation vam omogoča, da sheme GraphQL razdelite na številne storitve, od katerih je vsaka odgovorna za del sheme, vendar še vedno ohranja dosleden API.
  3. Kaj je direktiva, ki se uporablja za HotChocolate?
  4. The direktiva ustvari edinstven identifikator za entiteto, ki omogoča njeno razrešitev v več storitvah GraphQL.
  5. Ali lahko uporabim in atributi skupaj v HotChocolate?
  6. Da, lastnina se uporablja za zvezo in podaja polje kot identifikator znotraj sheme.
  7. Kaj počne delati v HotChocolate?
  8. Registrira storitev, kot je repozitorij, s strežnikom GraphQL, kar omogoča vstavljanje odvisnosti znotraj vaših razreševalcev.
  9. Kako testirate sheme GraphQL z HotChocolate?
  10. HotChocolate omogoča testiranje sheme z uporabo enotnih testov s priklicem sheme in preverjanjem direktiv, kot je v dobljenem rezultatu.

Uporaba HotChocolate's direktiva zagotavlja, da vaša zvezna je ustrezno konfiguriran za Apollo Federation. Ta pristop izboljšuje upravljanje tipov objektov in omogoča reševanje entitet med storitvami.

Konfiguriranje vašega strežnika GraphQL s HotChocolate in uporabo direktiv, kot je poenostavlja gradnjo velikih, porazdeljenih API-jev. Ta strategija vam omogoča, da lažje razširite svoje storitve, hkrati pa ohranjate dosledno, visoko zmogljivo povezovanje shem.

  1. Podrobneje opisuje uporabo direktivo v Apollo Federation in kako se integrira z HotChocolate. Za več podrobnosti glejte uradno dokumentacijo HotChocolate na HotChocolate Docs .
  2. Ponuja pregled konfiguracije GraphQL z Apollo Federation z uporabo HotChocolate. Oglejte si ta vodnik od Dokumenti federacije Apollo za več informacij.
  3. Ponuja podroben primer registracije storitve in reševanja poizvedb v GraphQL z uporabo HotChocolate. Več lahko najdete v tem članku o Storitvene integracije s HotChocolate .