ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

GraphQL:来来来,Union

2022-02-03 14:00:36  阅读:192  来源: 互联网

标签:set get Union Car class IUnion GraphQL 来来来 public


 

 

  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
      }
    ]
  }
}

 

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

 

 

标签:set,get,Union,Car,class,IUnion,GraphQL,来来来,public
来源: https://www.cnblogs.com/ljknlb/p/15861449.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有