【.NET 遇上 GraphQL】使用 Hot Chocolate 构建 GraphQL 服务

cac0d96bfd4193d0b9912e37a72edc9c.png

Hot Chocolate 是 .NET 平台下的一个开源组件库, 您可以使用它创建 GraphQL 服务, 它消除了构建成熟的 GraphQL 服务的复杂性, Hot Chocolate 可以连接任何服务或数据源,并创建一个有凝聚力的服务,为您的消费者提供统一的 API。

在本文中, 我会在 .NET 应用中使用 Hot Chocolate 组件来构建 GraphQL 服务, 让我们开始吧!

01

创建 GraphQL Server


这里我们创建一个空的 .NET Web项目, 并且使用了 .NET 6 的 mini api

dotnet new web -n HotChocolateDemo

然后通过命令或者 Nuget 安装 Hot Chocolate 包

dotnet add ./HotChocolateDemo package HotChocolate.AspNetCore

接下来,需要修改 Program.cs, 注入 GraphQL 服务

var builder = WebApplication.CreateBuilder(args);var services = builder.Services;services.AddGraphQLServer();var app = builder.Build();app.MapGet("/", () => "Hello World!");app.UseRouting().UseEndpoints(endpoints =>{endpoints.MapGraphQL();});app.Run();

运行项目, 并访问 /graphql 端点

2a0769b59b7bcc67295c36dc29a00e53.png

项目会显示上面的页面, 这是 ChilliCream 平台提供的 GraphQL IDE, Banana Cake Pop, 可以使用它浏览,请求 GraphQL 服务, 有点像 swagger 和 Postman 的结合体。

现在它是空的, 因为我们没有创建任何的 GraphQL API, 接下来,我会创建最简单的查询服务, 然后使用 Banana Cake Pop 查询我们的 GraphQL 服务。


02

 创建 GraphQL Schema

首先, 在项目中添加下面的实体类

/// <summary>/// 书籍/// </summary>public class Book{ /// <summary>/// 编号/// </summary>public int Id { get; set; }/// <summary>/// 标题/// </summary>public string? Title { get; set; } }/// <summary>/// 用户/// </summary>public class Person{/// <summary>/// 年龄/// </summary>public int Age { get; set; }/// <summary>/// 姓名/// </summary>public string? Name { get; set; }}

接下来,为实体创建查询服务

public class Query{/// <summary>/// 获取指定的书籍/// </summary>/// <param name="id">书籍编号</param>/// <returns></returns>public Book GetBook(int id){return new Book{Id = id,Title = "C# in depth."}; }/// <summary>/// 获取指定的用户/// </summary>/// <param name="name">用户名</param>/// <returns></returns>public Person GetPerson(string name){return new Person{ Age = 20,Name = name};}}

然后修改 Program.cs, 如下

services.AddGraphQLServer().AddQueryType<Query>();

 

03

执行 GraphQL 查询

准备工作完成,我们再次运行项目,并访问 /graphql 端点,Ctrl + Alt + T 新建 tab, 然后选择 Schema Reference,可以查看到 Query API, 如您所见, 也可以看到每个api 的描述信息, 前提是在 .NET 项目中选择输出 xml 文档。

8e08a13137f24b55a65d965b9ae2a264.png

然后可以输入下面的查询语句,进行查询

query{book(id:123456){idtitle}
}

后端服务会返回下面的内容, 这是一个最简单的查询

8ade45cfaffcb20c3191dcbaecaf0cff.png

使用 Hot Chocolate 搭建一个 GraphQL 服务, 就是这么简单!当然接下来我会继续介绍更新,订阅,以及和 EF Core 结合使用的操作。

e7c097019d2477922071480781df2874.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POJ2184 Cow Exhibition(DP:变种01背包)

题意&#xff1a; 一群奶牛分别有s和f两个值&#xff0c;要求选出一些奶牛使s与f的和最大并且s和f分别的和不能为负数。 要点&#xff1a; 用dp[i]j表示当s的和为i时f的和为j&#xff0c;这样最后只要求dp[i]i的最大值即可。注意这题因为有负数&#xff0c;所以引入一个偏移量。…

PHP命令注入***

PHP命令注入***漏洞是PHP应用程序中常见的脚本漏洞之一&#xff0c;国内著名的Web应用程序Discuz!、DedeCMS等都曾经存在过该类型漏洞。本文描述了常见的PHP命令注入***漏洞存在形式和利用方法&#xff0c;结合漏洞实例进行分析和漏洞利用&#xff0c;并针对如何防范PHP命令注入…

Vim文本编辑器 指令大全(二)

经常处理文本以及经常需要写代码的人&#xff0c;都会有自己比较常用的编辑器&#xff0c;本人喜欢用Vim&#xff0c;理由就是Vim编辑器灵活&#xff0c;并且可以达到纯键盘操作&#xff0c;使用纯熟情况下&#xff0c;根本不需要鼠标操作&#xff0c;听起来是不是很酷的&#…

电脑用户名_仁霸下料优化软件如何找回密码、更换绑定电脑?

今天有客户来找我们管件管家&#xff0c;说注册密码忘记了&#xff0c;登陆不上软件问怎么找回&#xff1b;还有个用户因为换了电脑&#xff0c;需要将账号移到新电脑上。此前我们以玻璃软件为例说了如何下载以及在哪里找到下载文件的位置&#xff0c;这期还是以玻璃软件为例讲…

linux之universal usb installer安装ubuntu

Universal-USB-Installer这个工具是用来制作U盘启动盘的&#xff0c;下面以制作Ubuntu版本Linux系统的U盘启动盘为例&#xff0c;方法如下&#xff1a; 1、安装Universal USB Installer软件&#xff0c;打开后&#xff0c;点击“Browse”按钮浏览下载到本地磁盘的Ubuntu系统ISO…

Android系统的体系结构、开发语言及源码结构

整理自android系统体系结构 Android 是google公司针对手机开发的一个平台&#xff0c;并公布了其中大部分代码&#xff0c;其大部分应用程序都是用JAVA开发的&#xff0c;毕竟它是商业性的产品嘛&#xff0c;有所保留也是理所 当然的。对于搞嵌入式linux开发的人来说我们可以从…

Blazor系列终结!

终于完结Blazor系列转载终结啦&#xff0c;其实站长在25号时就已完成转载&#xff0c;并同步在Dotnet9网站&#xff08;https://dotnet9.com&#xff09;发布&#xff0c;并创建了一个专辑《大家一起学Blazor》&#xff0c;大家可随时在网站浏览。Dotnet9网站同步转载感受 ASP.…

Mysql安装及自动化部署脚本方案

一.简介 数据库&#xff08;Database&#xff09;是按照数据结构来组织、存储和管理数据的仓库&#xff0c; 每个数据库都有一个或多个不同的API用于创建&#xff0c;访问&#xff0c;管理&#xff0c;搜索和复制所保存的数据。 我们也可以将数据存储在文件中&#xff0c;但是在…

男人对待恋爱的不同阶段......

1 小猫咪为何那样恨我&#xff08;via.豆瓣哈组&#xff0c;侵删&#xff09;▼2 驾驶位上方的扶手有什么用&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 回村听到最劲爆的消息&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 男人对待恋…

PPT快捷键大全(作分析报告的人有福了)

AltF9 隐藏参考线 ctrl[ 缩小字号 ctrl] 增大字号 ctrlz 撤销 ctrly 撤销的反向动作 ctrld 快速复制 CTRLG 组合 A 在放映时&#xff0c;隐藏/显示鼠标箭头 AltG 切换到“设计”功能选项卡中 AltH 切换到“开始”功能选项卡中 AltK …

用递归方式实现二叉树先序、中序、后序遍历

先序遍历:中、左、右 中序遍历:左、中、右 后序遍历:左、右、中 比如下面这科树 1 2 3 4 5 6 7 package com.sangfor.tree;public class Node {public int value;public Node left;public Node right;public Node(int value) {this.value = value;} } pac…

2个网页跳来跳去_好人网页同步器,使用教程

好人网页同步器&#xff0c;点我下载软件作用&#xff1a;操作N个浏览器&#xff0c;且动作同步操作。软件操作流程&#xff1a;1、打开软件&#xff0c;点击注册账号&#xff0c;系统就算1小时测试时间给你。然后用你的账号登录到好人网页同步器。2、进入主界面后&#xff0c;…

2013阿里笔试题

2013阿里巴巴暑期实习笔试 答题说明&#xff1a; 1.答题时间90分钟&#xff0c;请注意把握时间; 2.试题分为四个部分&#xff1a;单项选择题(10题&#xff0c;20分)、不定向选择题(4题&#xff0c;20分)、填空问答(5题&#xff0c;40分)、综合体(1题&#xff0c;20分); 3.其他一…

如何提升 Kestrel 上传文件的大小限制?

咨询区 ToddBFisher我的程序是 ASP.NET Core WebApp,我希望上传一个大的文件&#xff0c;我知道在 IIS 中可以轻松的在 web.config 中做如下配置即可&#xff0c;参考如下代码&#xff1a;<system.webServer><security><requestFiltering><!--<request…

2014.7.11

技术&#xff1a; 了解jqzoom 英语&#xff1a; autism转载于:https://www.cnblogs.com/glasscat/p/3840140.html

Wpf控件ListBox使用实例2

2.Xaml绑定选择结果 <StackPanel Orientation"Vertical"><TextBlock Margin"10,10,10,10" FontWeight"Bold"> Pick a color from below list</TextBlock><ListBox Name"mcListBox" Height"100" Width…

FBI承认特斯拉是外星人?公开354页文件,揭秘特斯拉研究UFO,制造“死光武器”.........

全世界只有3.14 % 的人关注了爆炸吧知识作业太少吃得太饱特斯拉是外星人吗&#xff1f;偶然点开这个问题&#xff0c;让超模君震惊得心律不齐。作为人类有史以来最伟大的科学家之一&#xff0c;特斯拉一度被称为“最接近神的人”。但估计特斯拉本人也没有想到&#xff0c;在他长…

用非递归方式实现二叉树先序便利

先序遍历:中、左、右 中序遍历:左、中、右 后序遍历:左、右、中 比如下面这科树 1 2 3 4 5 6 7 package com.sangfor.tree; public class Node { public int value; public Node left; public Node right; public Node(int value) { this.value = val…

人生133个规则,能领悟多少算多少!!!看自己的造化!!!

1、人之所以痛苦&#xff0c;在于追求错误的东西。 2、与其说是别人让你痛苦&#xff0c;不如说自己的修养不够。 3、如果你不给自己烦恼&#xff0c;别人也永远不可能给你烦恼。 4、好好的管教你自己&#xff0c;不要管别人。 5、你永远要感谢在你逆境时给你帮助的人。 6、你永…