C#에서 GraphQL을 사용하고 싶습니다.

8487 단어 GraphQLC#.NET
Gjango에서 GraphQL 라이브러리를 사용했는데 생각했던 것보다 간단하게 쓸 수 있었기 때문에, 이것은 C#에서도 갈 수 있는 것은 아닌가? 라고 생각해 시험에 샘플 코드를 움직이기에 이르렀습니다.
하는 것은 간단합니다. Schema를 정의하고 Query와 Mutation을 작성하면 GraphQL API의 완성입니다.

C#에서 GraphQL을 시험하는 샘플 코드가 있었으므로 그것을 참고로 비망록입니다.

참고 링크



여러가지 조사한 결과 도착한 링크들.

  • GraphQL .NET
  • 이번 사용하는 라이브러리의 문서입니다.


  • 샘플 코드
  • 이번에 사용할 샘플 코드. examples/src/AspNetCore에 배치된 프로젝트를 사용했습니다.


  • 샘플 데이터
  • 문서와 같은 스타워즈 캐릭터가 샘플 데이터로 사용되고 있습니다. 스타워즈 본 적이 없는 사람은 이쪽을 참고로.


  • GraphQL 철저 입문 ─ REST와의 비교, API·프런트 양쪽의 실장으로부터 배운다
  • GraphQL 의 용어의 설명・실제로 사용할 때에 생기는 문제점 등, 매우 참고가 되었습니다.


  • 우선 움직여 보자



    소스 코드를 복제하고 이동합시다.
    # サンプルコードをクローンします
    git clone https://github.com/graphql-dotnet/examples.git
    # 使用するプロジェクトへ移動
    cd examples\src\AspNetCore
    # スクリプトを実行(中身はdotnet CLIのコマンドを実行してるだけ)
    ./run.sh
    

    완료되면 http://localhost:3000/ui/playground 로 이동합니다.

    위와 같은 화면이 표시될까 생각하기 때문에 이것으로 GraphQL을 시험하는 환경이 갖추어졌습니다.
    다음 명령으로 샘플 코드를 테스트할 수 있습니다.

    Mutation 실행


    mutation  {
      createHuman(human:{ name: "hoge_001", homePlanet: "hogehogeplanet"}) {
        name
        homePlanet
      }
    }
    

    쿼리 실행


    query {
      human(id:"1"){
        name
      }
    }
    

    Schema



    스키마 타입



    Schema는 Query와 Mutation을 정의합니다.
        public class StarWarsSchema : Schema
        {
            public StarWarsSchema(IServiceProvider provider)
                : base(provider)
            {
                Query = provider.GetRequiredService<StarWarsQuery>();
                Mutation = provider.GetRequiredService<StarWarsMutation>();
            }
        }
    

    또한 Query와 Mutation에서 사용하는 클래스는 다음과 같습니다.
    다음 클래스의 속성은 Query 및 Mutaition 필드 이름에 해당합니다.
        public abstract class StarWarsCharacter
        {
            public string Id { get; set; }
            public string Name { get; set; }
            public string[] Friends { get; set; }
            public int[] AppearsIn { get; set; }
        }
    
        public class Human : StarWarsCharacter
        {
            public string HomePlanet { get; set; }
        }
    
        public class Droid : StarWarsCharacter
        {
            public string PrimaryFunction { get; set; }
        }
    

    Query



    Query는 데이터를 검색하는 처리를 작성합니다.
        public class StarWarsQuery : ObjectGraphType<object>
        {
            public StarWarsQuery(StarWarsData data)
            {
                // クエリあることを設定する
                Name = "Query";
    
                // heroというクエリを定義                  ↓LINQが書ける
                Field<CharacterInterface>("hero", resolve: context => data.GetDroidByIdAsync("3"));
             }
         }
    

    Mutation



    쫓아 씁니다.

    좋은 웹페이지 즐겨찾기