GraphQL怎么在ASP.NET Core中使用
这篇文章给大家介绍GraphQL怎么在ASP.NET Core中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
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-dotnet 。本系列博客中我们都将使用这个组件。
首先我们创建一个空的ASP.NET Core App
dotnetnewweb--namechatper1
然后我们添加对 graphql-dotnet 库的引用
dotnetaddpackageGraphQL
创建第一个Query
下面我们来创建一个 query 类, 我们将它命名为 HelloWorldQuery 。 graphql-dotnet 中,查询类都需要继承 ObjectGraphType 类,所以 HelloWorldQuery 的代码如下
usingGraphQL.Types; publicclassHelloWorldQuery:ObjectGraphType { publicHelloWorldQuery() { Field<StringGraphType>( name:"hello", resolve:context=>"world" ); } }
这里你可能注意到我们使用了一个泛型方法 Field ,并传递了一个GraphQL的字符串类型 StringGraphType 来定义了一个 hello 字段, resolve 参数是一个Func委托,在其中定义了如何返回当前字段的值,这里我们是直接返回了一个字符串hello。
查询类中的返回字段都是定义在查询类的构造函数中的
现在我们一个有了一个查询类,下一步我们需要使用这个查询类构建一个结构(schema)。
在 Startup.cs 文件的 Configure 方法中,使用以下代码替换原有代码
varschema=newSchema{ Query=newHelloWorldQuery() }; app.Run(async(context)=> { varresult=awaitnewDocumentExecuter() .ExecuteAsync(doc=> { doc.Schema=schema; doc.Query=@" query{ hello } "; }).ConfigureAwait(false); varjson=newDocumentWriter(indent:true) .Write(result) awaitcontext.Response.WriteAsync(json); });
DocumentExecuter 类的 ExecuteAsync 方法中我们定义Action委托,并通过这个委托设置了一个 ExecutionOptions 对象。这个对象初始化了我们定义的结构(schema), 并执行了我们定义的查询字符串。
doc.Query 定义了一个查询字符串
最终查询执行的结果会通过 DocumentWriter 类实例的 Write 被转换成一个JSON字符串
下面我们来运行一下这个程序
dotnetrun
你将在浏览器中看到以下结果
{ "data": { "hello": "world" }}
从以上的例子中,你会发现使用GraphQL并不像想象中那么难。下面我们可以在 HelloWorldQuery 类的构造函数中再添加一个字段 howdy , 并指定这个字段会返回一个字符串 universe 。
Field<StringGraphType>( name:"howdy", resolve:context=>"universe" );
然后我们继续修改 Startup 类中的 Configure 方法, 修改我们之前定义的query
varschema=newSchema{ Query=newHelloWorldQuery() }; app.Run(async(context)=> { varresult=awaitnewDocumentExecuter() .ExecuteAsync(doc=> { doc.Schema=schema; doc.Query=@" query{ hello howdy } "; }).ConfigureAwait(false); varjson=newDocumentWriter(indent:true) .Write(result) awaitcontext.Response.WriteAsync(json); });
重新启动项目后,结果如下
{ "data": { "hello": "world", "howdy": "universe" }}
关于GraphQL怎么在ASP.NET Core中使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
推荐阅读
-
ASP.NET怎么实现登出系统并清除Cookie
-
CentOS下怎么实现Mono和Asp.net
CentOS下怎么实现Mono和Asp.net这篇文章主要介绍“C...
-
ASP.NET的Core AD域登录过程怎么实现
ASP.NET的Core AD域登录过程怎么实现本文小编为大家详细...
-
ASP.NET MVC中两个配置文件的作用是什么
-
ASP.NET MVC过滤器执行顺序是什么
-
ASP.NET Core Zero模块系统的示例分析
ASP.NET Core Zero模块系统的示例分析这篇文章主要为...
-
asp.net多级分类统计列表怎么实现
asp.net多级分类统计列表怎么实现本篇内容介绍了“asp.ne...
-
C#怎么用ASP.NET Core开发学生管理系统
-
ASP.net中aspx与cs函数怎么实现互调
ASP.net中aspx与cs函数怎么实现互调,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇...
-
ASP.NET中怎么优化站点构建托管资源
这篇文章将为大家详细讲解有关ASP.NET中怎么优化站点构建托管资源,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完...