Jak používat HotChocolate k aplikaci klíčové směrnice na typy objektů v GraphQL

Key Directive

Optimalizace typů objektů pomocí klíčové směrnice v HotChocolate

Když používáte GraphQL s HotChocolate, možná budete muset rozšířit typy objektů pomocí direktiv, jako je směrnice, aby byla zajištěna kompatibilita s federací Apollo. To je důležité zejména pro federovaná schémata, ve kterých klíče identifikují entity napříč několika službami. Porozumění tomu, jak vhodně navrhnout typy objektů pomocí těchto direktiv, je zásadní.

Tento článek ukáže, jak používat pro zdobení typů objektů pomocí směrnice. Podíváme se také na konkrétní příklady využívající kód C# k vytvoření jednoduchého třídy a jak změnit vytvořené schéma GraphQL. Důraz bude kladen na skutečné akce, které můžete provést k vytvoření této funkce.

Při použití HotChocolate ke konstrukci typů objektů GraphQL, směrnice nemusí být aplikována okamžitě, jak se očekávalo. Místo toho může schéma vytvořit jednoduchou typovou strukturu, která postrádá kritické funkce požadované pro federaci. Projdeme si, jak to vyřešit, a zajistíme, aby vaše schéma fungovalo podle očekávání.

Budeme se také zabývat klíčovými konfiguračními úkoly, jako je úprava nastavení vašeho serveru GraphQL a použití správného a balíčky. Se správnou konfigurací můžete snadno použít direktivy a zajistit správnou federaci schémat pro vaše služby.

Příkaz Příklad použití
V HotChocolate tento příkaz zdobí typ objektu pomocí směrnice. Definuje, které pole bude sloužit jako jedinečný identifikátor typu při jednání s federací Apollo.
Při použití na metodu dává tento atribut pokyn HotChocolate, aby tuto metodu použil jako řešení pro federované typy. Umožňuje načítání relevantních dat ve federovaných službách prostřednictvím externích odkazů.
Tento příkaz nakonfiguruje podporu Apollo Federation na serveru HotChocolate GraphQL. Je nutné povolit funkce federovaného schématu, jako je směrnice.
Registruje službu, např , v kontejneru GraphQL DI. To vám umožní vložit služby přímo do překladače GraphQL.
V modelu SDL tato směrnice určuje hlavní klíčové pole pro federaci. Chcete-li povolit rozlišení entit mezi službami, typy objektů musí mít směrnice.
Asynchronně provede dotaz GraphQL, běžně používaný v testech jednotek, aby se zajistilo, že schéma a direktivy, jako je např. , jsou řádně implementovány.
Tato funkce se používá k vložení závislostí, jako jsou úložiště nebo služby, do argumentů metody řešení GraphQL, což umožňuje načítání služeb v HotChocolate.
Příkaz XUnit unit testing se používá k zajištění toho, že určité řetězce nebo direktivy, jako je direktivy, jsou zahrnuty do generovaného schématu GraphQL během testů.

Pochopení role klíčových směrnic v HotChocolate

První skript vysvětluje, jak implementovat direktiva pomocí HotChocolate v C#. Tento skript zaručuje, že vytvořené schéma GraphQL obsahuje @klíč směrnice pro federaci s federací Apollo. Skript začíná vytvořením a třídy a přiřazení a [ID] atributy ke svým polím. Tyto vlastnosti jsou důležité pro informování HotChocolate o označení pole jako jedinečný identifikátor entity. To je zásadní při vytváření federované služby GraphQL, ve které lze entity sdílet v několika službách. Označení tohoto pole umožní službě GraphQL vyřešit entitu ve federovaných dotazech.

The funkce je také nezbytnou součástí skriptu. Tato statická funkce umožňuje HotChocolate vyřešit entitu hledáním objekt v úložišti. The je registrován na serveru GraphQL a Získat metoda načte rodiče podle jeho . V zaváděcím kódu je instrukce registruje objekt, který se používá ke spouštění dotazů GraphQL.RegisterService umožňuje vkládání závislostí, jako je ParentRepository, do překladačů GraphQL. Tento design zjednodušuje získávání dat a zároveň zachovává jasné oddělení zájmů.

Druhý příklad využívá přístup schématu, který využívá GraphQL SDL (Schema Definition Language) k definování směrnice v rámci schématu. Toto řešení je zvláště efektivní pro týmy, které již znají syntaxi SDL GraphQL. V tomto příkladu je @klíč směrnice se vztahuje na typ, jasně označující pole jako jedinečný identifikátor. Použití schema-first umožňuje vývojářům mít větší kontrolu nad tím, jak je schéma GraphQL sestaveno a upravovat jej, aniž by museli přecházet do kódu C#, což z něj činí flexibilnější možnost pro větší týmy.

Nakonec komponenta testování jednotky ověří, že kód funguje tak, jak bylo zamýšleno. Pomocí testovacího rámce xUnit Assert.The Contains příkaz zajistí, že výsledné schéma zahrnuje směrnice. Tento test ověřuje schéma na přítomnost @klíč direktivu, která potvrzuje, že služba je správně nakonfigurována pro federaci. Testování jednotek je osvědčeným postupem pro zajištění toho, že změny vašeho schématu GraphQL nebo metod resolveru nenaruší funkčnost, zejména ve federovaném systému, kde musí více služeb fungovat bez problémů společně.

Implementace klíčové směrnice v HotChocolate pro typy objektů GraphQL

Toto řešení používá C#, HotChocolate a Apollo Federation k úpravě schématu GraphQL z backendu.

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

Použití prvního přístupu schématu GraphQL pro použití směrnice @key

Toto řešení využívá schema-first přístup s GraphQL SDL a HotChocolate k vytvoření vlastního schématu s direktivou @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
}

Testování jednotek HotChocolate GraphQL se směrnicí @key

Zde je test jednotky C#, který používá rámec xUnit, aby se ujistil, že server HotChocolate správně aplikuje direktivu @key ve schématu 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());
    }
}

Vylepšení GraphQL pomocí Apollo Federation a HotChocolate

Používání GraphQL s HotChocolate ve federovaném prostředí vyžaduje dobře strukturované spojování schémat. Apollo Federation umožňuje vývojářům rozdělit schémata mezi několik služeb při zachování jednotného rozhraní. Pomocí direktivou HotChocolate, můžete určit, jak jsou entity GraphQL řešeny v několika službách. Díky tomu je vaše API modulárnější a škálovatelnější, což je výhodné zejména ve velkých distribuovaných systémech, kde různé týmy řídí různé aspekty schématu GraphQL.

V typickém federovaném schématu jsou entity jako např může existovat v mnoha službách. Federace Apollo používá direktiva k jedinečné identifikaci entity na základě zadaného pole, např . Podpora společnosti HotChocolate pro Apollo Federation zajišťuje, že se vaše služba bez námahy integruje do větší infrastruktury. Kromě nastavení klíčů můžete použít federační direktivy jako as @prodlužuje nebo ke správě datových polí rozptýlených v několika mikroslužbách, což poskytuje větší flexibilitu pro vaše nastavení GraphQL.

Dalším klíčovým faktorem při používání HotChocolate je optimalizace výkonu. Častým problémem s GraphQL API je nadměrné načítání dat, zejména ve federovaných kontextech. Pomocí správných překladačů, jako je např popsané v dřívějších případech, zaručuje, že vaše API poskytuje pouze požadovaná data bez nadměrného vyhledávání. Kromě toho HotChocolate podporuje pokročilé algoritmy pro dávkování dotazů a ukládání do mezipaměti, které mohou zvýšit rychlost odezvy API a efektivitu ve federovaném schématu.

  1. Jak Apollo Federation prospívá vývoji GraphQL?
  2. Apollo Federation vám umožňuje rozdělit schémata GraphQL do mnoha služeb, z nichž každá odpovídá za část schématu, ale stále udržuje konzistentní API.
  3. Co je direktiva použitá v HotChocolate?
  4. The Direktiva vytváří jedinečný identifikátor pro entitu, což umožňuje její řešení napříč několika službami GraphQL.
  5. Mohu použít a atributy společně v HotChocolate?
  6. Ano, majetek se používá pro federaci a určuje pole jako identifikátor v rámci schématu.
  7. Co dělá dělat v HotChocolate?
  8. Registruje službu, jako je úložiště, na serveru GraphQL a umožňuje vkládání závislostí do vašich resolverů.
  9. Jak testujete schémata GraphQL s HotChocolate?
  10. HotChocolate umožňuje testování schématu pomocí jednotkových testů vyvoláním schématu a kontrolou direktiv, jako je ve výsledném výsledku.

Použití HotChocolate's směrnice zajišťuje, že vaše federace je vhodně nakonfigurován pro federaci Apollo. Tento přístup zlepšuje správu typů objektů a umožňuje řešení entit napříč službami.

Konfigurace vašeho serveru GraphQL pomocí HotChocolate a použití direktiv jako zjednodušuje vytváření velkých, distribuovaných rozhraní API. Tato strategie vám umožňuje snadněji rozšiřovat vaše služby při zachování konzistentního a vysoce výkonného spojování schémat.

  1. Rozpracovává použití směrnice v Apollo Federation a jak se integruje s HotChocolate. Další podrobnosti naleznete v oficiální dokumentaci HotChocolate na adrese Dokumenty HotChocolate .
  2. Poskytuje přehled konfigurace GraphQL s Apollo Federation pomocí HotChocolate. Viz tento návod od Dokumenty federace Apollo pro více informací.
  3. Nabízí podrobný příklad registrace služby a řešení dotazů v GraphQL pomocí HotChocolate. Více najdete v tomto článku na Integrace služeb s horkou čokoládou .