Оптимизација типова објеката са кључном директивом у ХотЦхоцолате
Када користите ГрапхКЛ са ХотЦхоцолате, можда ћете морати да проширите типове објеката помоћу директива, као што је @кеи директиве, како би се осигурала компатибилност са Аполо федерацијом. Ово је посебно важно за федералне шеме, у којима кључеви идентификују ентитете у неколико услуга. Разумевање како да на одговарајући начин дизајнирате своје типове објеката са овим директивама је кључно.
Овај чланак ће показати како се користи ХотЦхоцолате за украшавање типова објеката помоћу @кеи директива. Такође ћемо погледати конкретне примере који користе Ц# код за конструисање једноставног Родитељ класе и како променити произведену ГрапхКЛ шему. Нагласак ће бити на стварним радњама које можете предузети да креирате ову функционалност.
Када користите ХотЦхоцолате за прављење типова ГрапхКЛ објеката, @кеи директива се можда неће применити одмах како се очекивало. Уместо тога, шема може произвести једноставну структуру типа којој недостају критичне карактеристике потребне за федерацију. Прећи ћемо на то како да ово решимо и натерамо вашу шему да ради како се очекује.
Такође ћемо покрити кључне задатке конфигурације, као што је измена подешавања вашег ГрапхКЛ сервера и коришћење правог ХотЦхоцолате и Аполо федерација пакети. Уз одговарајућу конфигурацију, можете лако применити директиве и обезбедити исправну федерацију шема за своје услуге.
| Цомманд | Пример употребе |
|---|---|
| [Кључ] | У ХотЦхоцолате, ова команда украшава тип објекта помоћу @кеи директива. Дефинише које ће поље служити као јединствени идентификатор типа док се ради са Аполо федерацијом. |
| [РеференцеРесолвер] | Када се примени на методу, овај атрибут упућује ХотЦхоцолате да користи ту методу као резолуцију за федералне типове. Омогућава проналажење релевантних података у удруженим услугама путем екстерних референци. |
| .АддАполлоФедератион() | Ова команда конфигурише подршку Аполло федерације на ХотЦхоцолате ГрапхКЛ серверу. Неопходно је омогућити функције федералне шеме, као што је @кеи директива. |
| .РегистерСервице<Т>() | Региструје услугу, као нпр ПарентРепоситори, у ГрапхКЛ ДИ контејнеру. Ово вам омогућава да убаците услуге директно у ГрапхКЛ резолвер. |
| директива @кеи(поља: Стринг!) | У СДЛ моделу, ова директива специфицира главно кључно поље за федерацију. Да би се омогућила резолуција ентитета у више услуга, типови објеката морају имати @кеи директива. |
| ИСцхемаАсинц.ЕкецутеАсинц() | Асинхроно извршава ГрапхКЛ упит, који се обично користи у тестовима јединица како би се осигурало да шема и директиве, као нпр. @кеи, правилно се спроводе. |
| [Услуга] | Ова функција се користи за убацивање зависности као што су ризнице или услуге у аргументе метода ГрапхКЛ резолвера, омогућавајући преузимање услуге у ХотЦхоцолате-у. |
| Ассерт.Цонтаинс() | КСУнит-ова команда за тестирање јединица се користи да би се осигурало да су одређени стрингови или директиве, као што је @кеи директиве, укључени су у генерисану ГрапхКЛ шему током тестова. |
Разумевање улоге кључних директива у ХотЦхоцолате-у
Прва скрипта објашњава како имплементирати @кеи директива која користи ХотЦхоцолате у Ц#. Ова скрипта гарантује да креирана ГрапхКЛ шема садржи @кеи директива за федерацију са Аполо федерацијом. Скрипта почиње креирањем а Родитељ разреда и додељивање [Кључ] и [ИД] приписује својим пољима. Ова својства су важна за обавештавање ХотЦхоцолате да означи ид поље као јединствени идентификатор ентитета. Ово је кључно када се креира удружени ГрапхКЛ сервис у којем ентитети могу да се деле у неколико услуга. Означавање овог поља омогућава услузи ГрапхКЛ да разреши ентитет у федералним упитима.
Тхе РеференцеРесолвер функција је такође суштинска компонента скрипте. Ова статичка функција омогућава ХотЦхоцолате-у да разреши ентитет тражењем Родитељ објекат у спремишту. Тхе ПарентРепоситори је регистрован на ГрапхКЛ серверу, а Гет метода преузима родитељ својим ид. У боотстрап коду, .АддКуериТипе упутство региструје Упит објекат, који се користи за извршавање ГрапхКЛ упита.РегистерСервице дозвољава убацивање зависности као што је ПарентРепоситори у ГрапхКЛ разрешиваче. Овај дизајн поједностављује проналажење података уз очување јасног раздвајања брига.
Други пример користи приступ који се заснива на шеми, користећи ГрапхКЛ СДЛ (Сцхема Дефинитион Лангуаге) да дефинише @кеи директива унутар шеме. Ово решење је посебно ефикасно за тимове који су већ упознати са ГрапхКЛ-овом СДЛ синтаксом. У овом примеру, @кеи директива се примењује на Родитељ типа, јасно указујући на ид поље као јединствени идентификатор. Коришћење сцхема-фирст омогућава програмерима да имају већу контролу над начином на који је ГрапхКЛ шема изграђена и да је модификују без потребе да улазе у Ц# код, што је чини флексибилнијом опцијом за веће тимове.
Коначно, компонента за тестирање јединица потврђује да код ради како је предвиђено. Користећи оквир за тестирање кУнит, Ассерт.Тхе Цонтаинс команда осигурава да резултујућа шема укључује @кеи директива. Овај тест потврђује шему за присуство @кеи директива, која потврђује да је услуга правилно конфигурисана за федерацију. Тестирање јединица је најбоља пракса да се осигура да промене ваше ГрапхКЛ шеме или метода решавања не ометају функционалност, посебно у федералном систему где више услуга мора да функционише заједно неприметно.
Имплементација кључне директиве у ХотЦхоцолате за типове ГрапхКЛ објеката
Ово решење користи Ц#, ХотЦхоцолате и Аполло Федератион за модификацију ГрапхКЛ шеме из позадине.
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();}
Коришћење првог приступа ГрапхКЛ шеме за примену @кеи директиве
Ово решење користи приступ први шеми са ГрапхКЛ СДЛ и ХотЦхоцолате за конструисање прилагођене шеме са @кеи директивом.
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}
Јединично тестирање ХотЦхоцолате ГрапхКЛ са @кеи директивом
Ево Ц# јединичног теста који користи кУнит оквир да би се осигурало да ХотЦхоцолате сервер правилно примењује @кеи директиву у ГрапхКЛ шеми.
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());}}
Побољшање ГрапхКЛ-а уз Аполло Федератион и ХотЦхоцолате
Коришћење ГрапхКЛ-а са ХотЦхоцолате-ом у федералном окружењу захтева добро структурисано спајање шема. Аполло Федератион омогућава програмерима да поделе шеме на неколико сервиса уз одржавање јединственог интерфејса. Коришћењем @кеи директиве са ХотЦхоцолате, можете одредити како се ГрапхКЛ ентитети решавају у неколико услуга. Ово чини ваш АПИ модуларнијим и скалабилнијим, што је посебно корисно у великим, дистрибуираним системима где више тимова контролише различите аспекте ГрапхКЛ шеме.
У типичној федералној шеми, ентитети као нпр Родитељ може постојати у многим услугама. Аполо федерација користи @кеи директива за јединствену идентификацију ентитета на основу одређеног поља, нпр ид. ХотЦхоцолате-ова подршка за Аполло Федератион осигурава да се ваша услуга без напора интегрише у већу инфраструктуру. Поред подешавања кључева, можете користити директиве федерације као што је ас @ектендс или @ектернал за управљање пољима података распоређених у неколико микросервиса, пружајући већу флексибилност за ваше ГрапхКЛ подешавање.
Још један кључни фактор при коришћењу ХотЦхоцолате је оптимизација перформанси. Прекомерно преузимање података је чест проблем са ГрапхКЛ АПИ-јима, посебно у федералним контекстима. Коришћење исправних разрешивача, као што је РеференцеРесолвер описан у ранијим случајевима, гарантује да ваш АПИ испоручује само потребне податке без претераних претрага. Штавише, ХотЦхоцолате подржава напредне алгоритме за груписање упита и кеширање, који могу повећати брзину одговора и ефикасност АПИ-ја у федералној шеми.
Уобичајена питања о ХотЦхоцолате и Аполло федерацији
- Како Аполло Федерација користи развоју ГрапхКЛ-а?
- Аполло Федератион вам омогућава да поделите ГрапхКЛ шеме на многе услуге, од којих је свака одговорна за део шеме, али и даље одржава конзистентан АПИ.
- Шта је @key директива која се користи за ХотЦхоцолате?
- Тхе @key директива креира јединствени идентификатор за ентитет, омогућавајући његово решавање у неколико ГрапхКЛ сервиса.
- Могу ли да користим [Key] и [ID] атрибути заједно у ХотЦхоцолате?
- Да, [Key] имовина се користи за федерацију, и [ID] специфицира поље као идентификатор унутар шеме.
- Шта ради .RegisterService радити у ХотЦхоцолате?
- .RegisterService Региструје услугу, као што је спремиште, са ГрапхКЛ сервером, омогућавајући убризгавање зависности унутар ваших разрешавача.
- Како тестирате ГрапхКЛ шеме са ХотЦхоцолате?
- ХотЦхоцолате омогућава тестирање шеме помоћу јединичних тестова позивањем шеме и провером директива као што су @key у резултирајућем резултату.
Завршавање процеса федерације
Коришћење ХотЦхоцолате'с @кеи директива осигурава да ваш федерални ГрапхКЛ шема је на одговарајући начин конфигурисан за Аполо Федерацију. Овај приступ побољшава управљање типовима објеката и омогућава решавање ентитета између различитих услуга.
Конфигурисање вашег ГрапхКЛ сервера са ХотЦхоцолате и коришћењем директива као што су @кеи поједностављује изградњу великих, дистрибуираних АПИ-ја. Ова стратегија вам омогућава да лакше проширите своје услуге уз одржавање доследног спајања шема високих перформанси.
Референце и ресурси за ХотЦхоцолате и Аполло Федератион
- Елаборати о употреби @кеи директива у Аполло Федерацији и како се интегрише са ХотЦхоцолате. За више детаља погледајте званичну документацију ХотЦхоцолате на ХотЦхоцолате Доцс .
- Пружа преглед конфигурисања ГрапхКЛ-а са Аполло Федерацијом користећи ХотЦхоцолате. Погледајте овај водич из Аполо Федератион Доцс за више информација.
- Нуди детаљан пример регистрације услуге и решавања упита у ГрапхКЛ користећи ХотЦхоцолате. Више се може наћи у овом чланку о Интеграције услуга са ХотЦхоцолате .