使用Hot Chocolate和.NET 6构建GraphQL应用(1)——GraphQL及示例项目介绍
系列导航
使用Hot Chocolate和.NET 6构建GraphQL应用文章索引
前言
这篇文章是这个系列的第一篇,我们会简单地讨论一下GraphQL,然后介绍一下这个系列将会使用的示例项目。
关于GraphQL
关于GraphQL和Restful API的讨论已经有很多了,我在本文里不会试图去推销什么技术。GraphQL的官方主页在这里GraphQL | A query language for your API,它的出现是为了解决Restful API面临的当所需查询的数据结构呈现及其复杂的树状结构或依赖关系时,需要多次按顺序发送不同的Restful请求,并且需要额外的Dto对象来保证当前的API接口不会返回多余的数据,此外,当数据之间的关系发生变动导致原本的Resful API无法获取关联的数据时,就需要去修改接口定义。
GraphQL能通过精确定义客户端需要的数据,无需多次请求就可以获取无冗余的结果。关于GraphQL的基本概念就不详细介绍了,可以参考官方文档,或者跟着这个系列亲手实现一个感受一下。
关于GraphQL和Restful API各自的优点和缺点,可以参考这篇文章REST vs GraphQL for an API。用我的理解简单地解释就是:
- Restful API更为开发人员所熟悉,但是我觉得文章里提到的API Client的接受度和Learning Resources现在来看几乎都不是太大的优势了,越来越多的主流API Client像是Postman,小众一点的Insomia,都支持发送GraphQL请求,社区的资源也很多了。Restful API最明显的短处在于我们必须使用Dto来减少返回数据的冗余。
- GraphQL的优势在于它能更好地发送聚合请求,并且能够精确定义数据使得返回值无冗余。缺点也很明显,开发人员相对来说不够熟悉,对文件下载的支持不好。
项目模版
这两天抽空整理之前的内容,写了一个基于Clean Architecture的.NET 6 Web API项目模版,放在这里了:Asinta/Code4NothingCaTempate,还没有推到Nuget上,如果有需要使用的,可以clone到本地,在解决方案根目录执行:
$ dotnet new --install .
The following template packages will be installed:
/Users/yu.li1/Projects/asinta/netcore/Code4Nothing
Success: /Users/yu.li1/Projects/asinta/netcore/Code4Nothing installed the following templates:
Template Name Short Name Language Tags
------------------------------------------------- ---------- -------- ----
Code4Nothing Clean Architecture Solution Template ca-c4n [C#]
接下来就可以从本地使用这个模版来创建新项目了
dotnet new ca-c4n -n PostGraphi
这个解决方案模版包含了测试项目,我们在这个系列里暂时都不会用到,src目录下的项目还是按照之前使用.NET 6开发TodoList应用文章索引这个系列里的方式进行划分,用做示例的TodoItem相关的可以作为参考实现自己的实体和相关功能。
在GraphQL的这个系列里,我们会基于这个模版来构建一个博客文章管理的示例应用,主要用来练习如何在.NET 6 Web API应用里构建GraphQL接口以及相关的功能。
领域实体关系
下图是我们即将构建的应用涉及的实体以及相互之间的关系,一些基础字段比如创建时间和更新时间我没有画上去,足够理解用了。

关于Hot Chocolate
Hot Chocolate作为GraphQL和.NET生态中近几年迅速获得大量使用的GraphQL服务端框架,提供了非常方便的使用方法。你可以应用它来构建独立的基于.NET 6的GraphQL Server,也可以用来部署在Azure Functions或者AWS Lambda上用来作为GraphQL Server,同时也可以实现GraphQL网关,一些.NET生态中推荐使用的网关框架如Envoy也支持GraphQL请求。
我们会使用这个框架来实现GraphQL的常用功能。
关于GraphQL更多的资源
- chentsulin/awesome-graphql
- graphql/graphiql
- 一个很棒的GraphQL接口可视化工具:APIs-guru/graphql-voyager
使用Hot Chocolate和.NET 6构建GraphQL应用(1)——GraphQL及示例项目介绍的更多相关文章
- 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引
系列背景 在进入微服务的实践系列之前,我们一起来学习和实践一下.NET应用开发生态中一些比较重要的技术,这个系列就是关于GraphQL在.NET 6应用中的实现. 系列导航 使用Hot Chocola ...
- 使用Hot Chocolate和.NET 6构建GraphQL应用(2) —— 实体相关功能实现
系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 在本文中,我们将会准备好用于实现GraphQL接口所依赖的底层数据,为下一篇文章具体实现GraphQL接口做 ...
- 使用Hot Chocolate和.NET 6构建GraphQL应用(3) —— 实现Query基础功能
系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 在本文中,我们通过一个简单的例子来看一下如何实现一个最简单的GraphQL的接口. 实现 引入Hot Cho ...
- 使用Hot Chocolate和.NET 6构建GraphQL应用(4) —— 实现Query映射功能
系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 在上一篇文章使用Hot Chocolate和.NET 6构建GraphQL应用(3) -- 实现Query基 ...
- 使用Hot Chocolate和.NET 6构建GraphQL应用(5) —— 实现Query过滤功能
系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 对于查询来说,还有一大需求是针对查询的数据进行过滤,本篇文章我们准备实现GraphQL中基本的查询过滤. 思 ...
- 使用Hot Chocolate和.NET 6构建GraphQL应用(6) —— 实现Query排序功能
系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 从前几篇文章可以看出,使用Hot Chocolate实现GraphQL接口是比较简单的,本篇文章我们继续查询 ...
- 使用Hot Chocolate和.NET 6构建GraphQL应用(7) —— 实现Query分页功能
系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 GraphQL中的查询分页相对来说是查询中比较难理解的,接口的Schema也和其他不一样.在这篇文章中,我们 ...
- 使用Hot Chocolate和.NET 6构建GraphQL应用(8) —— 实现Mutate添加数据
系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 在讨论完GraphQL中的查询需求后,这篇文章我们将演示如何实现GraphQL中的数据添加任务. 思路 在G ...
- 使用Hot Chocolate和.NET 6构建GraphQL应用(9) —— 实现Mutate更新数据
系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 在上一篇文章中,我们演示了如何使用Hot Chocolate进行GraphQL的Mutate新增数据,这篇文 ...
随机推荐
- curl英文直译
文档概述 比较表 curl手册页 常见问题 HTTP脚本编写 mk-ca-bundle 教程 curl / 文件 / 工具文档 /手册页 curl.1手册页 相关: 手动 常见问题解答 HTTP脚本 ...
- Spring学习(二)三种方式的依赖注入
1.前言 上一篇讲到第一个Spring项目的创建.以及bean的注入.当然.注入的方式一共有三种.本文将展开细说. 1.set注入:本质是通过set方法赋值 1.创建老师类和课程类 1.Course ...
- 【LeetCode】35. Search Insert Position 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 二分查找 日期 题目地址:https://leetc ...
- 【LeetCode】290. Word Pattern 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- Pikachu漏洞练习-SQL-inject(三)
- 初识TMMi——测试成熟度模型集成
利用零碎的时间,粗略了解了一下TMMi V1.2,整理一下学习笔记跟大家分享一下. 本文分为四个部分,分别为TMMi概述.TMMi结构.成熟度级别和过程域.TMMi实施周期,希望能够帮助大家更好的理解 ...
- Hexo添加Live2D看板娘+模型预览
文章目录 添加和注意事项 模型预览 live2d-widget-model-chitose live2d-widget-model-epsilon2_1 live2d-widget-model-gf ...
- 第十个知识点:RSA和强RSA问题有什么区别?
第十个知识点:RSA和强RSA问题有什么区别 这个密码学52件事数学知识的第一篇,也是整个系列的第10篇.这篇介绍了RSA问题和Strong-RSA问题,指出了这两种问题的不同之处. 密码学严重依赖于 ...
- 「AHOI2013」 差异
知识点: SA,线段树,单调栈 原题面 Loj Luogu 题意简述 给定一长度为 \(n\) 的字符串 \(S\),令 \(T_i\) 表示从第 \(i\) 个字符开始的后缀,求: \[\sum_{ ...
- IT6516替代方案|CS5212替代IT6516|CapstoneCS5212
IT6516/IT6516BFN:是一款DP显示端口转VGA转换器的嵌入式MCU单片机. IT6516/IT6516BFN结合DisplayPort接收器和三重DAC,通过转换功能支持DisplayP ...