GraphQL:来来来,Union

 

 

  Union就是把不相干的一些数据实体,合并起来,一起供外部查询。不用像webapi,完成查询不同的数据,需要多次请求。一次请求,获取多样数据,减少请求次数,这也是GraphQL的优势之一。怎么弄,来来来,代码看过来:

using HotChocolate;
using HotChocolate.Execution;
using HotChocolate.Types;
using System;

namespace GraphQLBase006
{
    class Program
    {
        static void Main(string[] args)
        {
            UnionDemo.Run();
        }
    }
    public class UnionDemo
    {
        public static void Run()
        {
            var schema = SchemaBuilder.New()
                .AddQueryType<Query>()
                .AddType<Car>()
                .AddType<Cabbage>()
                .AddType<Earth>()
                .AddProjections()
                .Create();

            var executor = schema.MakeExecutable();
            Console.WriteLine(executor.Execute(@"
{
    formats
    {
        __typename,
        ... on Car{
            brand,
            price
        },
        ... on Cabbage{
            name,
            nutrition
        }
        ... on Earth{
            diameter        
        }
    } 
}").ToJson());
        }
    }

    public class Query
    {
        public IUnion[] GetFormats()
        {
            return new IUnion[]
            {
                    new Car{
                         Brand="Benz",
                         Price=1000000
                    },
                    new Cabbage{
                       Name="灰子白",
                       Nutrition="纤维"
                    },                 
                    new Earth{
                      Diameter=12742
                    }
            };
        }
    }

    [UnionType("Unio")]
    public interface IUnion
    {
    }
    public class Car : IUnion
    {
        public string Brand { get; set; }
        public decimal Price { get; set; }
    }

    public class Cabbage : IUnion
    {
        public string Name { get; set; }
        public string Nutrition { get; set; }
    }
    public class Earth : IUnion
    {
        public double Diameter { get; set; }   
    }
}

  案例中就是把不相干的Car,Cabbage,Earth,通过继承一个空接口合并起来,供外部访问,通过自定义查询接口语句,达到灵活取想要的数据,比如一些数据字典的查询就很有用,不相干的一些配置,同时获取到,以备后用。

  结果:

{
  "data": {
    "formats": [
      {
        "__typename": "Car",
        "brand": "Benz",
        "price": 1000000
      },
      {
        "__typename": "Cabbage",
        "name": "\u7070\u5B50\u767D",
        "nutrition": "\u7EA4\u7EF4"
      },
      {
        "__typename": "Earth",
        "diameter": 12742
      }
    ]
  }
}

 

  想要更快更方便的了解相关知识,可以关注微信公众号 
 

 

 

posted @ 2022-02-03 13:50  刘靖凯  阅读(49)  评论(0编辑  收藏  举报