Objektų tipų optimizavimas naudojant pagrindinę direktyvą „HotChocolate“.
Naudojant GraphQL su HotChocolate, gali tekti išplėsti objektų tipus direktyvomis, pvz. direktyvą, kad būtų užtikrintas suderinamumas su Apollo federacija. Tai ypač svarbu sujungtoms schemoms, kuriose raktai identifikuoja objektus keliose tarnybose. Labai svarbu suprasti, kaip tinkamai suprojektuoti objektų tipus pagal šias direktyvas.
Šiame straipsnyje bus parodyta, kaip naudoti papuošti objektų tipus naudojant direktyva. Taip pat pažvelgsime į konkrečius pavyzdžius, naudojant C# kodą, kad sukurtume paprastą klasė ir kaip pakeisti sukurtą GraphQL schemą. Pagrindinis dėmesys bus skiriamas faktiniams veiksmams, kurių galite imtis, kad sukurtumėte šią funkciją.
Naudojant HotChocolate GraphQL objektų tipams kurti, direktyva gali būti pritaikyta ne iš karto, kaip tikėtasi. Vietoj to, schema gali sukurti paprasto tipo struktūrą, kuriai trūksta svarbiausių funkcijų, reikalingų federacijai. Apžvelgsime, kaip tai išspręsti ir, kad jūsų schema veiktų taip, kaip tikėtasi.
Taip pat aptarsime esmines konfigūravimo užduotis, pvz., „GraphQL“ serverio sąrankos keitimą ir naudojimąsi teise ir paketus. Tinkamai sukonfigūruodami galite lengvai pritaikyti direktyvas ir užtikrinti tinkamą savo paslaugų schemų susijungimą.
| komandą | Naudojimo pavyzdys |
|---|---|
| „HotChocolate“ ši komanda papuošia objekto tipą naudodama direktyva. Jis apibrėžia, kuris laukas bus naudojamas kaip unikalus tipo identifikatorius dirbant su Apollo federacija. | |
| Pritaikius metodui, šis atributas nurodo „HotChocolate“ naudoti tą metodą kaip atskirų tipų skiriamąją gebą. Tai leidžia gauti atitinkamus duomenis susietose paslaugose naudojant išorines nuorodas. | |
| Ši komanda sukonfigūruoja „Apollo Federation“ palaikymą „HotChocolate GraphQL“ serveryje. Būtina įjungti jungtines schemos funkcijas, pvz., direktyva. | |
| Registruoja paslaugą, pvz , GraphQL DI konteineryje. Tai leidžia įterpti paslaugas tiesiai į GraphQL rezoliuciją. | |
| SDL modelyje ši direktyva nurodo pagrindinį pagrindinį federacijos lauką. Norint įgalinti kelių paslaugų objektų skyrą, objektų tipai turi turėti direktyva. | |
| Asinchroniškai vykdo GraphQL užklausą, dažniausiai naudojamą vienetų testuose, siekiant užtikrinti, kad schema ir direktyvos, pvz. , yra tinkamai įgyvendinami. | |
| Ši funkcija naudojama priklausomybėms, pvz., saugykloms ar paslaugoms, įterpti į „GraphQL“ sprendiklio metodo argumentus, įgalinant paslaugų nuskaitymą „HotChocolate“. | |
| „XUnit“ vieneto testavimo komanda naudojama siekiant užtikrinti, kad tam tikros eilutės ar direktyvos, pvz direktyvą, testų metu įtraukiami į sugeneruotą GraphQL schemą. |
„HotChocolate“ pagrindinių direktyvų vaidmens supratimas
Pirmasis scenarijus paaiškina, kaip įgyvendinti direktyvą naudojant HotChocolate C#. Šis scenarijus garantuoja, kad sukurtoje GraphQL schemoje yra @raktas direktyva federacijai su Apollo federacija. Scenarijus prasideda sukuriant a klasę ir priskirdami ir [ID] atributus savo laukams. Šios savybės yra svarbios informuojant „HotChocolate“, kad pažymėtų lauką kaip unikalų objekto identifikatorių. Tai labai svarbu kuriant sujungtą GraphQL paslaugą, kurioje subjektai gali būti bendrinami keliose tarnybose. Pažymėjus šį lauką, „GraphQL“ paslauga gali išspręsti objektą sujungtose užklausose.
The funkcija taip pat yra esminis scenarijaus komponentas. Ši statinė funkcija leidžia HotChocolate išspręsti objektą ieškant objektą saugykloje. The yra užregistruotas GraphQL serveryje ir Gauk metodas atgauna tėvą pagal savo . Įkrovos kode instrukcija registruoja objektas, kuris naudojamas GraphQL užklausoms vykdyti.RegisterService leidžia įterpti priklausomybes, pvz., ParentRepository, į GraphQL sprendiklius. Šis dizainas supaprastina duomenų gavimą ir išsaugo aiškų problemų atskyrimą.
Antrajame pavyzdyje taikomas schemos metodas, naudojant GraphQL SDL (schemos apibrėžimo kalbą), kad apibrėžtų direktyvą schemoje. Šis sprendimas ypač efektyvus komandoms, kurios jau yra susipažinusios su GraphQL SDL sintaksė. Šiame pavyzdyje @raktas direktyva taikoma tipas, aiškiai nurodant kaip unikalų identifikatorių. Naudodami pirmiausia schemą, kūrėjai gali labiau kontroliuoti, kaip kuriama GraphQL schema, ir modifikuoti ją nesigilinant į C# kodą, todėl tai yra lankstesnė parinktis didesnėms komandoms.
Galiausiai vieneto testavimo komponentas patvirtina, kad kodas veikia taip, kaip numatyta. Naudojant xUnit testavimo sistemą, Assert.The Contains komanda užtikrina, kad gautoje schemoje būtų direktyva. Šis testas patvirtina schemą, ar nėra @raktas direktyvą, patvirtinančią, kad paslauga tinkamai sukonfigūruota susijungti. Vienetų testavimas yra geriausia praktika siekiant užtikrinti, kad jūsų GraphQL schemos ar sprendiklio metodų pakeitimai nesutrikdytų funkcionalumo, ypač jungtinėje sistemoje, kur kelios paslaugos turi veikti kartu sklandžiai.
„HotChocolate“ pagrindinės direktyvos įgyvendinimas „GraphQL“ objektų tipams
Šis sprendimas naudoja C#, HotChocolate ir Apollo Federation, kad pakeistų GraphQL schemą iš užpakalinės programos.
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();}
GraphQL schemos pirmojo metodo naudojimas @key direktyvos taikymui
Šiame sprendime naudojamas „schemos-first“ metodas su „GraphQL SDL“ ir „HotChocolate“, kad sukurtų tinkintą schemą su @key direktyva.
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}
Įrenginio testavimas HotChocolate GraphQL su @key direktyva
Štai C# vieneto testas, kuriame naudojama xUnit sistema, siekiant užtikrinti, kad „HotChocolate“ serveris tinkamai taikys @key direktyvą GraphQL schemoje.
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());}}
GraphQL tobulinimas naudojant „Apollo Federation“ ir „HotChocolate“.
Naudojant „GraphQL“ su „HotChocolate“ sujungtoje aplinkoje, reikia gerai struktūrizuoto schemos susiuvimo. „Apollo Federation“ leidžia kūrėjams skaidyti schemas keliose paslaugose, išlaikant vienodą sąsają. Naudojant direktyvą su HotChocolate, galite nurodyti, kaip GraphQL objektai išsprendžiami keliose paslaugose. Tai daro jūsų API moduliškesnę ir keičiamo dydžio, o tai ypač naudinga didelėse, paskirstytose sistemose, kur kelios komandos valdo skirtingus GraphQL schemos aspektus.
Įprastoje susietoje schemoje tokie subjektai kaip gali būti daugelyje paslaugų. „Apollo“ federacija naudoja direktyvą, kad unikaliai identifikuotų objektą pagal nurodytą lauką, pvz . „HotChocolate“ palaikymas „Apollo“ federacijai užtikrina, kad jūsų paslauga būtų lengvai integruojama į didesnę infrastruktūrą. Be raktų nustatymo, galite naudoti susiejimo direktyvas, pvz., kaip @pratęsia arba tvarkyti duomenų laukus, paskirstytus keliose mikropaslaugos, suteikiant daugiau lankstumo jūsų GraphQL sąrankai.
Kitas svarbus veiksnys naudojant „HotChocolate“ yra našumo optimizavimas. Per didelis duomenų gavimas yra dažna GraphQL API problema, ypač susietuose kontekstuose. Naudodami tinkamus sprendiklius, tokius kaip aprašyta ankstesniuose atvejuose, garantuoja, kad jūsų API pateiks tik reikiamus duomenis be pernelyg didelių paieškų. Be to, „HotChocolate“ palaiko pažangius užklausų paketų ir talpyklos kaupimo algoritmus, kurie gali padidinti API atsako greitį ir efektyvumą sujungtoje schemoje.
- Kuo „Apollo“ federacija naudinga „GraphQL“ plėtrai?
- „Apollo Federation“ leidžia padalyti „GraphQL“ schemas į daugybę paslaugų, kurių kiekviena yra atsakinga už tam tikrą schemos skyrių, tačiau vis tiek palaikoma nuosekli API.
- Kas yra direktyva, naudojama HotChocolate?
- The direktyva sukuria unikalų objekto identifikatorių, leidžiantį jį išspręsti keliose GraphQL paslaugose.
- Ar galiu naudoti ir atributai kartu HotChocolate?
- Taip, turtas naudojamas federacijai, ir nurodo lauką kaip identifikatorių schemoje.
- Ką daro daryti HotChocolate?
- Užregistruoja paslaugą, pvz., saugyklą, GraphQL serveryje, įgalindama priklausomybės injekciją jūsų sprendiniuose.
- Kaip tikrinate „GraphQL“ schemas su „HotChocolate“?
- „HotChocolate“ įgalina schemų testavimą naudojant vienetų testus, iškviečiant schemą ir tikrinant, ar nėra tokių direktyvų kaip gautame rezultate.
Naudojant HotChocolate's direktyva užtikrina, kad jūsų federacija yra tinkamai sukonfigūruotas „Apollo“ federacijai. Šis metodas pagerina objektų tipų valdymą ir leidžia atlikti kelių paslaugų objektų sprendimą.
„GraphQL“ serverio konfigūravimas naudojant „HotChocolate“ ir naudojant tokias direktyvas kaip supaprastina didelių, paskirstytų API kūrimą. Ši strategija leidžia lengviau išplėsti savo paslaugas išlaikant nuoseklų ir efektyvų schemų susiuvimą.
- Išsamiau aprašoma, kaip naudoti Apollo federacijos direktyvą ir kaip ji integruojama su „HotChocolate“. Daugiau informacijos rasite oficialioje HotChocolate dokumentacijoje adresu „HotChocolate“ dokumentai .
- Pateikiama „GraphQL“ konfigūravimo su „Apollo Federation“ naudojant „HotChocolate“ apžvalga. Žiūrėkite šį vadovą iš „Apollo“ federacijos dokumentai Norėdami gauti daugiau informacijos.
- Pateikiamas išsamus paslaugų registravimo ir užklausų sprendimo GraphQL naudojant HotChocolate pavyzdys. Daugiau apie tai galite rasti šiame straipsnyje Paslaugų integravimas su „HotChocolate“. .