博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GraphQL:来来来,Union
阅读量:4036 次
发布时间:2019-05-24

本文共 2379 字,大约阅读时间需要 7 分钟。

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
() .AddType
() .AddType
() .AddType
() .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      }    ]  }}

转载地址:http://zpudi.baihongyu.com/

你可能感兴趣的文章
linux设备驱动模型代码分析
查看>>
uboot入门学习二 位置无关代码以及地址
查看>>
慢慢欣赏linux 块设备驱动基础
查看>>
慢慢欣赏linux文件缓冲区 mmap分析
查看>>
慢慢欣赏linux 页面回收
查看>>
微视linux waitX的意义
查看>>
微视linux 挂接中断action的前奏 设置中断处理函数
查看>>
RCU锁学习
查看>>
ppc解析保留内存
查看>>
微视linux uboot保留内存的传递
查看>>
微视linux scsi驱动错误中断处理
查看>>
linux动态库学习
查看>>
微视linux 释放文件节点流程
查看>>
new的过程
查看>>
作用域、作用域链、自由变量、变量提升
查看>>
var let const 区别
查看>>
事件委托(事件代理)
查看>>
函数防抖和函数节流
查看>>
vue中diff算法
查看>>
电商后台管理系统打包上线
查看>>