GraphQL:从头开始
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:从头开始相关推荐
- graphql是什么_为什么GraphQL是避免技术债务的关键
graphql是什么 GraphQL (not to be confused with GraphDB or Open Graph or even an actual graph) is a rema ...
- java world_Java World中的GraphQL简介
java world 许多人认为GraphQL仅适用于前端和JavaScript,它在Java等后端技术中不占优势,但事实确实如此. 还经常将GraphQL与REST进行比较,但是这种比较是否合理? ...
- Java World中的GraphQL简介
许多人认为GraphQL仅适用于前端和JavaScript,它在Java等后端技术中没有定位,但事实确实如此. 还经常将GraphQL与REST进行比较,但是这种比较是否合理? 首先,让我开始回答其中 ...
- 【超详细教程】如何使用TypeScript和GraphQL开发应用
GraphQL是一个专为构建灵活的API而生的强大的查询语言.它允许您为数据定义类型系统,因此在执行查询时,它仅返回所需的数据. 与TypeScript一起使用时,GraphQL可以为开发人员提供更好 ...
- 从头开始开发gis_DevRel工程师一:从头开始建立开发人员关系团队
从头开始开发gis It sounds like an exciting challenge: join a company and shape the entire developer relat ...
- 开放API 与 查询语言GraphQL
1.开放API 什么是API? API(Application Programming Interface,应用程序接口)是一些预先定义的接口(如函数.HTTP接口),或指软件系统不同组成部分衔接的约 ...
- [译] Elixir、Phoenix、Absinthe、GraphQL、React 和 Apollo:一次近乎疯狂的深度实践 —— 第二部分(测试相关部分)...
原文地址:Elixir, Phoenix, Absinthe, GraphQL, React, and Apollo: an absurdly deep dive - Part 2 原文作者:Zach ...
- 如何使用Django和GraphQL创建URL缩短器
The author selected Girls Who Code to receive a donation as part of the Write for DOnations program. ...
- 使用GraphQL,React Native和AWS AppSync编写应用程序代码:该应用程序
您将要创造的 在这些教程中,我将向您展示如何使用AWS AppSync和React Native创建GraphQL数据库并与之交互. 该应用程序将具有实时和脱机功能,我们通过AppSync开箱即用. ...
最新文章
- UI设计工作好找吗?有哪些面试技巧?
- fusionchart图表遮挡Ext下拉控件或日期控件解决办法(IE下有问题firefox与chrome正常)...
- MySQL下优化SQL的一般步骤
- Hadoop集群中增加与ElasticSearch连接的操作
- Oracle 的两种工作模式Dedicated Server 和 Shared Server
- “短路求值(Short-Circuit Evaluation)
- halcon 将数据保存到excel_Python保存数据到Excel文件的多个sheet
- python中的元组操作
- Windows核心思想-宽字符与窄字符(Unicode和ASCII)
- mysql分组查询后插入新表,MySQL获取分组后的TOP 1和TOP N记录
- Nginx 配置一个虚拟站点
- MYSQL 学习笔记记录整理之二:分组数据
- 让程序员崩溃只需要一句话
- springboot处理静态资源
- java常见的异常_Java常见的10个异常
- scrapy爬取彼岸图网照片(搜索关键字,去重)
- linux res shr区别,linux下VIRT,RES,SHR的含义
- python获取pdf页数_Python分割指定页数的pdf文件方法
- ctfshow—Node.js漏洞总结
- word2003文档转pdf预览加盖水印与套红
热门文章
- Java基础 Day04(个人复习整理)
- 双谷人才财务管理(序)
- 【转】基于 Android NDK 的学习之旅-----数据传输(引用数据类型)
- UVA-1045 - The Great Wall Game(二分图最佳匹配)
- Subversion之路--实现精细的目录访问权限控制(v1.0 更新于2006.12.05)(二)
- 用户帐户控制设置_创建快捷方式以避免用户帐户控制弹出式快捷方式
- Hadoop----hdfs的基本操作
- 面对峰值响应冲击,解决高并发的三大策略
- 人工智能教程007:创建一个卷积神经网络(2)
- 我为什么卸载了今日头条