HotChocolate를 사용하여 GraphQL의 객체 유형에 Key 지시어를 적용하는 방법

Key Directive

HotChocolate의 Key 지시어를 사용하여 개체 유형 최적화

HotChocolate와 함께 GraphQL을 사용할 때 다음과 같은 지시어로 객체 유형을 확장해야 할 수도 있습니다. Apollo Federation과의 호환성을 보장하기 위한 지침입니다. 이는 키가 여러 서비스에서 엔터티를 식별하는 연합 스키마에 특히 중요합니다. 이러한 지시문을 사용하여 개체 유형을 적절하게 디자인하는 방법을 이해하는 것이 중요합니다.

이 기사에서는 사용 방법을 보여줍니다. 다음을 사용하여 객체 유형을 장식합니다. 지령. 또한 C# 코드를 활용하여 간단한 코드를 구성하는 특정 예제도 살펴보겠습니다. 클래스 및 생성된 GraphQL 스키마를 변경하는 방법을 알아보세요. 이 기능을 만들기 위해 취할 수 있는 실제 작업에 중점을 둡니다.

HotChocolate를 사용하여 GraphQL 객체 유형을 생성할 때, 지시문은 예상대로 즉시 적용되지 않을 수 있습니다. 대신, 스키마는 연합에 필요한 중요한 기능이 부족한 단순한 유형 구조를 생성할 수 있습니다. 이 문제를 해결하고 스키마가 예상대로 작동하도록 하는 방법을 살펴보겠습니다.

또한 GraphQL 서버 설정 수정 및 권한 사용과 같은 중요한 구성 작업도 다룹니다. 그리고 패키지. 적절한 구성을 사용하면 쉽게 지시문을 적용하고 서비스에 대한 적절한 스키마 연합을 보장할 수 있습니다.

명령 사용예
HotChocolate에서 이 명령은 지령. Apollo Federation을 처리하는 동안 유형의 고유 식별자 역할을 할 필드를 정의합니다.
메소드에 적용되면 이 속성은 HotChocolate에 해당 메소드를 연합 유형에 대한 해결 방법으로 사용하도록 지시합니다. 외부 참조를 통해 연합 서비스에서 관련 데이터를 검색할 수 있습니다.
이 명령은 HotChocolate GraphQL 서버에서 Apollo Federation 지원을 구성합니다. 다음과 같은 연합 스키마 기능을 활성화해야 합니다. 지령.
다음과 같은 서비스를 등록합니다. , GraphQL DI 컨테이너에 있습니다. 이를 통해 GraphQL 해석기에 서비스를 직접 주입할 수 있습니다.
SDL 모델에서 이 지시어는 페더레이션을 위한 기본 키 필드를 지정합니다. 서비스 간 엔터티 확인을 활성화하려면 개체 유형에 다음이 있어야 합니다. 지령.
단위 테스트에서 일반적으로 사용되는 GraphQL 쿼리를 비동기식으로 실행하여 다음과 같은 스키마와 지시어가 올바른지 확인합니다. , 제대로 구현되었습니다.
이 기능은 저장소나 서비스와 같은 종속성을 GraphQL 해석기 메서드 인수에 주입하여 HotChocolate에서 서비스 검색을 활성화하는 데 사용됩니다.
XUnit의 단위 테스트 명령은 다음과 같은 특정 문자열이나 지시문이 있는지 확인하는 데 사용됩니다. 지시문은 테스트 중에 생성된 GraphQL 스키마에 포함됩니다.

HotChocolate에서 주요 지시문의 역할 이해

첫 번째 스크립트는 구현 방법을 설명합니다. C#에서 HotChocolate를 사용하는 지시문입니다. 이 스크립트는 생성된 GraphQL 스키마에 다음이 포함되도록 보장합니다. @열쇠 Apollo Federation과의 연합을 위한 지침. 스크립트는 다음을 생성하는 것으로 시작됩니다. 수업과 배정 그리고 [ID] 해당 필드에 속성을 부여합니다. 이러한 속성은 HotChocolate에 다음을 표시하도록 알리는 데 중요합니다. 필드를 엔터티의 고유 식별자로 사용합니다. 이는 여러 서비스에서 엔터티를 공유할 수 있는 연합 GraphQL 서비스를 생성할 때 중요합니다. 이 필드를 표시하면 GraphQL 서비스가 통합 쿼리에서 엔터티를 확인할 수 있습니다.

그만큼 함수는 스크립트의 필수 구성 요소이기도 합니다. 이 정적 함수를 사용하면 HotChocolate가 다음을 검색하여 엔터티를 확인할 수 있습니다. 저장소의 개체입니다. 그만큼 GraphQL 서버에 등록되어 있으며 얻다 메서드는 부모를 검색합니다. . 부트스트랩 코드에서는 명령어는 GraphQL 쿼리를 실행하는 데 사용되는 개체입니다. RegisterService를 사용하면 ParentRepository와 같은 종속성을 GraphQL 확인자에 주입할 수 있습니다. 이 디자인은 명확한 관심사 분리를 유지하면서 데이터 검색을 단순화합니다.

두 번째 예는 GraphQL SDL(스키마 정의 언어)을 활용하여 스키마 우선 접근 방식을 취합니다. 스키마 내의 지시어. 이 솔루션은 GraphQL의 SDL 구문에 이미 익숙한 팀에게 특히 효과적입니다. 이 예에서는 @열쇠 지시문은 다음에 적용됩니다. 유형을 명확하게 나타냅니다. 필드를 고유 식별자로 사용합니다. 스키마 우선을 사용하면 개발자는 C# 코드를 사용하지 않고도 GraphQL 스키마를 구축하고 수정하는 방법을 더 효과적으로 제어할 수 있으므로 대규모 팀에 더 유연한 옵션이 됩니다.

마지막으로 단위 테스트 구성 요소는 코드가 의도한 대로 작동하는지 확인합니다. xUnit 테스트 프레임워크를 사용하여 Assert.The Contains 명령은 결과 스키마에 다음이 포함되어 있는지 확인합니다. 지령. 이 테스트는 스키마의 존재 여부를 검증합니다. @열쇠 지시문을 통해 서비스가 페더레이션에 대해 올바르게 구성되었는지 확인합니다. 단위 테스트는 GraphQL 스키마 또는 확인자 메서드 변경으로 인해 기능이 중단되지 않도록 하는 모범 사례입니다. 특히 여러 서비스가 원활하게 함께 작동해야 하는 페더레이션 시스템에서는 더욱 그렇습니다.

GraphQL 객체 유형에 대해 HotChocolate에서 Key 지시문 구현

이 솔루션은 C#, HotChocolate 및 Apollo Federation을 사용하여 백엔드에서 GraphQL 스키마를 수정합니다.

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

@key 지시문 적용을 위한 GraphQL 스키마 우선 접근 방식 사용

이 솔루션은 GraphQL SDL 및 HotChocolate와 함께 스키마 우선 접근 방식을 사용하여 @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
}

@key 지시문을 사용하여 HotChocolate GraphQL 단위 테스트

다음은 xUnit 프레임워크를 사용하여 HotChocolate 서버가 GraphQL 스키마에 @key 지시문을 올바르게 적용하는지 확인하는 C# 단위 테스트입니다.

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

Apollo Federation 및 HotChocolate로 GraphQL 향상

연합 환경에서 HotChocolate와 함께 GraphQL을 사용하려면 잘 구조화된 스키마 스티칭이 필요합니다. Apollo Federation을 사용하면 개발자는 균일한 인터페이스를 유지하면서 여러 서비스에 걸쳐 스키마를 분할할 수 있습니다. 사용하여 HotChocolate 지시문을 사용하여 GraphQL 엔터티가 여러 서비스에서 해결되는 방법을 지정할 수 있습니다. 이렇게 하면 API가 더욱 모듈화되고 확장 가능해지며, 이는 여러 팀이 GraphQL 스키마의 다양한 측면을 제어하는 ​​대규모 분산 시스템에 특히 유용합니다.

일반적인 연합 스키마에서는 다음과 같은 엔터티가 있습니다. 여러 서비스에 걸쳐 존재할 수 있습니다. Apollo Federation은 다음을 사용합니다. 다음과 같이 지정된 필드를 기반으로 엔터티를 고유하게 식별하는 지시어 . Apollo Federation에 대한 HotChocolate의 지원은 귀하의 서비스가 더 큰 인프라에 쉽게 통합되도록 보장합니다. 키 설정 외에도 다음과 같은 연합 지시문을 사용할 수 있습니다. @확장 또는 여러 마이크로서비스에 분산된 데이터 필드를 관리하여 GraphQL 설정에 더 큰 유연성을 제공합니다.

HotChocolate을 활용하는 또 다른 핵심 요소는 성능 최적화입니다. 데이터를 과도하게 가져오는 것은 GraphQL API, 특히 페더레이션된 컨텍스트에서 흔히 발생하는 문제입니다. 다음과 같은 올바른 리졸버를 사용합니다. 이전 사례에서 설명한 대로 API는 과도한 검색 없이 필요한 데이터만 제공하도록 보장합니다. 또한 HotChocolate은 고급 쿼리 일괄 처리 및 캐싱 알고리즘을 지원하여 연합 스키마에서 API 응답 속도와 효율성을 높일 수 있습니다.

  1. Apollo Federation은 GraphQL 개발에 어떤 이점을 제공합니까?
  2. Apollo Federation을 사용하면 GraphQL 스키마를 여러 서비스로 분할할 수 있습니다. 각 서비스는 스키마 섹션을 담당하면서도 일관된 API를 유지합니다.
  3. 무엇입니까? HotChocolate에서 지시문이 사용됩니까?
  4. 그만큼 지시문은 엔터티에 대한 고유 식별자를 생성하여 여러 GraphQL 서비스에서 엔터티를 확인할 수 있도록 합니다.
  5. 사용할 수 있나요? 그리고 HotChocolate에서 속성을 함께 사용하시겠습니까?
  6. 예, 속성은 페더레이션에 사용되며, 필드를 스키마 내의 식별자로 지정합니다.
  7. 무엇을 핫초콜릿에서 해?
  8. 리포지토리와 같은 서비스를 GraphQL 서버에 등록하여 해석기 내에서 종속성 주입을 활성화합니다.
  9. HotChocolate로 GraphQL 스키마를 어떻게 테스트합니까?
  10. HotChocolate은 스키마를 호출하고 다음과 같은 지시문을 확인하여 단위 테스트를 사용하여 스키마 테스트를 가능하게 합니다. 결과적으로.

핫초콜릿을 이용해서 지시문은 귀하의 페더레이션을 보장합니다 Apollo Federation에 맞게 구성되었습니다. 이 접근 방식은 객체 유형 관리를 개선하고 서비스 간 엔터티 확인을 허용합니다.

HotChocolate로 GraphQL 서버를 구성하고 다음과 같은 지시문을 사용합니다. 대규모 분산 API 구축을 단순화합니다. 이 전략을 사용하면 일관된 고성능 스키마 스티칭을 유지하면서 서비스를 보다 쉽게 ​​확장할 수 있습니다.

  1. 사용법을 자세히 설명합니다. Apollo Federation의 지침 및 HotChocolate과 통합하는 방법. 자세한 내용은 공식 HotChocolate 문서를 참조하세요. 핫초콜릿 문서 .
  2. HotChocolate를 사용하여 Apollo Federation으로 GraphQL을 구성하는 방법에 대한 개요를 제공합니다. 이 가이드를 참조하세요 아폴로 페더레이션 문서 자세한 내용은
  3. HotChocolate를 사용하여 GraphQL에서 서비스 등록 및 쿼리 해결에 대한 자세한 예를 제공합니다. 자세한 내용은 이 기사에서 확인할 수 있습니다. HotChocolate과 서비스 통합 .