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-Firstpublic 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-Firstpublic 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-Firstpublic 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方法,不过看来也只有这样一个数据了。

GraphQL:从头开始相关推荐

  1. graphql是什么_为什么GraphQL是避免技术债务的关键

    graphql是什么 GraphQL (not to be confused with GraphDB or Open Graph or even an actual graph) is a rema ...

  2. java world_Java World中的GraphQL简介

    java world 许多人认为GraphQL仅适用于前端和JavaScript,它在Java等后端技术中不占优势,但事实确实如此. 还经常将GraphQL与REST进行比较,但是这种比较是否合理? ...

  3. Java World中的GraphQL简介

    许多人认为GraphQL仅适用于前端和JavaScript,它在Java等后端技术中没有定位,但事实确实如此. 还经常将GraphQL与REST进行比较,但是这种比较是否合理? 首先,让我开始回答其中 ...

  4. 【超详细教程】如何使用TypeScript和GraphQL开发应用

    GraphQL是一个专为构建灵活的API而生的强大的查询语言.它允许您为数据定义类型系统,因此在执行查询时,它仅返回所需的数据. 与TypeScript一起使用时,GraphQL可以为开发人员提供更好 ...

  5. 从头开始开发gis_DevRel工程师一:从头开始建立开发人员关系团队

    从头开始开发gis It sounds like an exciting challenge: join a company and  shape the entire developer relat ...

  6. 开放API 与 查询语言GraphQL

    1.开放API 什么是API? API(Application Programming Interface,应用程序接口)是一些预先定义的接口(如函数.HTTP接口),或指软件系统不同组成部分衔接的约 ...

  7. [译] Elixir、Phoenix、Absinthe、GraphQL、React 和 Apollo:一次近乎疯狂的深度实践 —— 第二部分(测试相关部分)...

    原文地址:Elixir, Phoenix, Absinthe, GraphQL, React, and Apollo: an absurdly deep dive - Part 2 原文作者:Zach ...

  8. 如何使用Django和GraphQL创建URL缩短器

    The author selected Girls Who Code to receive a donation as part of the Write for DOnations program. ...

  9. 使用GraphQL,React Native和AWS AppSync编写应用程序代码:该应用程序

    您将要创造的 在这些教程中,我将向您展示如何使用AWS AppSync和React Native创建GraphQL数据库并与之交互. 该应用程序将具有实时和脱机功能,我们通过AppSync开箱即用. ...

最新文章

  1. UI设计工作好找吗?有哪些面试技巧?
  2. fusionchart图表遮挡Ext下拉控件或日期控件解决办法(IE下有问题firefox与chrome正常)...
  3. MySQL下优化SQL的一般步骤
  4. Hadoop集群中增加与ElasticSearch连接的操作
  5. Oracle 的两种工作模式Dedicated Server 和 Shared Server
  6. “短路求值(Short-Circuit Evaluation)
  7. halcon 将数据保存到excel_Python保存数据到Excel文件的多个sheet
  8. python中的元组操作
  9. Windows核心思想-宽字符与窄字符(Unicode和ASCII)
  10. mysql分组查询后插入新表,MySQL获取分组后的TOP 1和TOP N记录
  11. Nginx 配置一个虚拟站点
  12. MYSQL 学习笔记记录整理之二:分组数据
  13. 让程序员崩溃只需要一句话
  14. springboot处理静态资源
  15. java常见的异常_Java常见的10个异常
  16. scrapy爬取彼岸图网照片(搜索关键字,去重)
  17. linux res shr区别,linux下VIRT,RES,SHR的含义
  18. python获取pdf页数_Python分割指定页数的pdf文件方法
  19. ctfshow—Node.js漏洞总结
  20. word2003文档转pdf预览加盖水印与套红

热门文章

  1. Java基础 Day04(个人复习整理)
  2. 双谷人才财务管理(序)
  3. 【转】基于 Android NDK 的学习之旅-----数据传输(引用数据类型)
  4. UVA-1045 - The Great Wall Game(二分图最佳匹配)
  5. Subversion之路--实现精细的目录访问权限控制(v1.0 更新于2006.12.05)(二)
  6. 用户帐户控制设置_创建快捷方式以避免用户帐户控制弹出式快捷方式
  7. Hadoop----hdfs的基本操作
  8. 面对峰值响应冲击,解决高并发的三大策略
  9. 人工智能教程007:创建一个卷积神经网络(2)
  10. 我为什么卸载了今日头条