ICode9

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

GraphQL:从头开始

2022-02-01 15:31:48  阅读:169  来源: 互联网

标签:从头开始 Run GraphQL schemaString var schema public First


  GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。

                                  ——出自 https://graphql.cn

  前面几篇博文介绍了GraphQL在asp.net core框架下的实例,初步了解到Hot Chocolate的功能,不如从这篇开始,细致的过一下Hot Chocoklate,看看.net下这个GrpahQL框架究竟做了点什么,我们又能做点什么。
  首先使用HotChocolate有两种姿势,代码姿势(code-first)和脚手架姿势(schema-first),那长什么样呢?实例送上:

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

namespace GraphQLBase001
{
    class Program
    {
        static void Main(string[] args)
        {
            var schemaString = @"
        type Query {
            hello: String
        }";
            Console.WriteLine("Schema-First");
            SchemaFirst.Run(schemaString);
            Console.WriteLine("Schema-First");
            CodeFirst.Run(schemaString);
            Console.WriteLine("PurCode-First");
            PureCodeFirst.Run();
            C.Run(schemaString);
            D.Run(schemaString);
            E.Run();
        }
    }
    #region Schema-First
    public class SchemaFirst
    {
        public static void Run(string schemaString)
        {
            var schema = SchemaBuilder
                .New()
                .AddDocumentFromString(schemaString)
                .AddResolver("Query", "hello", () => "world")
                .Create();
            var executor = schema.MakeExecutable();
            Console.WriteLine(executor.Execute("{ hello }").ToJson());
        }

    }
    #endregion
    #region Code-First
    public class CodeFirst
    {
        public static void Run(string schemaString)
        {
            var schema = SchemaBuilder
                .New()
                .AddDocumentFromString(schemaString)
                .BindComplexType<Query>()
                .Create();
            var executor = schema.MakeExecutable();
            Console.WriteLine(executor.Execute("{ hello }").ToJson());
        }
        public class Query
        {
            /// <summary>
            /// 目测这里只对Hello或GetHello免疫
            /// </summary>
            /// <returns></returns>
            public string Hello() => "world";
        }
    }
    #endregion
    #region PureCode-First
    public class PureCodeFirst
    {
        public static void Run()
        {
            var schema = SchemaBuilder
                .New()        
                .AddQueryType<Query>()
                .Create();
            var executor = schema.MakeExecutable();
            Console.WriteLine(executor.Execute("{ hello }").ToJson());
        }
        public class Query
        {
            /// <summary>
            /// 目测这里只对Hello或GetHello免疫
            /// </summary>
            /// <returns></returns>
            public string Hello() => "world";
        }
    }
    #endregion
}

  通过上面实例,这两种不同点在于Query是定义了一个类来实现,还是通过一个约定字符串来实现,本质上都是一个方法(也可以是属性要一个字符串的返回值)。如果你注意到了PureCode-First,这只是一个变种,不过这个看起来对一个C#程序来说情怀实足。

  其中不管那种方式,执行api的方式始终不变"{hello}",这里我们实际上调用的是hello方法,不过看来也只有这样一个数据了。

 

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

 

 

标签:从头开始,Run,GraphQL,schemaString,var,schema,public,First
来源: https://www.cnblogs.com/axzxs2001/p/15859121.html

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

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

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

ICode9版权所有