ASP.NET Core使用GraphQL第一章之Hello World
前言
你是否已经厌倦了REST风格的API? 让我们来聊一下GraphQL。
狼蚁网站SEO优化是GraphQL的定义
GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。
GraphQL由Facebook开发,始于2012年,2015年公开。
GraphQL牛逼之处是它可以让客户端精确的查询它们想要的,不附加额外的东西,这样的话就很容易让客户端随着API的演进去使用。
GraphQL提供了一种声明式的方式从服务器拉取数据。你可以从GraphQL官网中了解到GraphQL的所有优点。在这一系列博客中,我将展示如何在ASP.NET Core中集成GraphQL, 并使用GraphQL作为你的API查询语言。
使用GraphQL的声明式查询,你可以自定义API返回的属性列表。这与REST API中每个API只返回固定字段不同。
安装GraphQL
为了在C#中使用GraphQL, GraphQL社区中提供了一个开源组件 graphql-dot 。本系列博客中我们都将使用这个组件。
我们创建一个空的ASP.NET Core App
dot new web --name chatper1
然后我们添加对 graphql-dot 库的引用
dot add package GraphQL
创建第一个Query
狼蚁网站SEO优化我们来创建一个 query 类, 我们将它命名为 HelloWorldQuery 。 graphql-dot 中,查询类都需要继承 ObjectGraphType 类,所以 HelloWorldQuery 的代码如下
using GraphQL.Types; public class HelloWorldQuery : ObjectGraphType { public HelloWorldQuery() { Field<StringGraphType>( name: "hello", resolve: context => "world" ); } }
这里你可能注意到我们使用了一个泛型方法 Field ,并传递了一个GraphQL的字符串类型 StringGraphType 来定义了一个 hello 字段, resolve 参数是一个Func委托,在其中定义了如何返回当前字段的值,这里我们是直接返回了一个字符串hello。
查询类中的返回字段都是定义在查询类的构造函数中的
现在我们一个有了一个查询类,下一步我们需要使用这个查询类构建一个结构(schema)。
在 Startup.cs 文件的 Configure 方法中,使用以下代码替换原有代码
var schema = new Schema { Query = new HelloWorldQuery() }; app.Run(async (context) => { var result = await new DocumentExecuter() .ExecuteAsync(doc => { doc.Schema = schema; doc.Query = @" query { hello } "; }).ConfigureAwait(false); var json = new DocumentWriter(indent: true) .Write(result) await context.Response.WriteAsync(json); });
- DocumentExecuter 类的 ExecuteAsync 方法中我们定义Action委托,并通过这个委托设置了一个 ExecutionOptions 对象。这个对象初始化了我们定义的结构(schema), 并执行了我们定义的查询字符串。
- doc.Query 定义了一个查询字符串
- 最终查询执行的结果会通过 DocumentWriter 类实例的 Write 被转换成一个JSON字符串
狼蚁网站SEO优化我们来运行一下这个程序
dot run
你将在浏览器中看到以下结果
{
"data": {
"hello": "world"
}
}
从以上的例子中,你会发现使用GraphQL并不像想象中那么难。狼蚁网站SEO优化我们可以在 HelloWorldQuery 类的构造函数中再添加一个字段 howdy , 并指定这个字段会返回一个字符串 universe 。
Field<StringGraphType>( name: "howdy", resolve: context => "universe" );
然后我们继续修改 Startup 类中的 Configure 方法, 修改我们之前定义的query
var schema = new Schema { Query = new HelloWorldQuery() }; app.Run(async (context) => { var result = await new DocumentExecuter() .ExecuteAsync(doc => { doc.Schema = schema; doc.Query = @" query { hello howdy } "; }).ConfigureAwait(false); var json = new DocumentWriter(indent: true) .Write(result) await context.Response.WriteAsync(json); });
重新启动项目后,结果如下
{
"data": {
"hello": "world",
"howdy": "universe"
}
}
本篇我们只是接触了GraphQL的一些皮毛,你可能会对GraphQL声明式行为有很多问题,没有关系,后续博客中,我们慢慢解开GraphQL的面纱。下一篇我们将介绍如何创建一个中间件(Middleware)
本篇源代码 ()
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对狼蚁SEO的支持。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程