GraphQL怎么在ASP。网络核心中使用

  介绍

这篇文章给大家介绍GraphQL怎么在ASP。网络核心中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

<强> GraphQL的定义:,

GraphQL既是一种用于API的查询语言也是一个满足你数据查询的运行时。GraphQL对你的API中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让API更容易地随着时间推移而演进,还能用于构建强大的开发者工具。

GraphQL由Facebook开发,始于2012年,2015年公开。

GraphQL牛逼之处是它可以让客户端精确的查询它们想要的,不附加额外的东西,这样的话就很容易让客户端随着API的演进去使用。

GraphQL提供了一种声明式的方式从服务器拉取数据。你可以从GraphQL官网中了解到GraphQL的所有优点。在这一系列博客中,我将展示如何在ASP。网络中核心集成GraphQL,并使用GraphQL作为你的API查询语言。

使用GraphQL的声明式查询,你可以自定义API返回的属性列表。这与REST API中每个API只返回固定字段不同。

<强>安装GraphQL

为了在c#中使用GraphQL, GraphQL社区中提供了一个开源组件graphql-dotnet。本系列博客中我们都将使用这个组件。

首先我们创建一个空的ASP。净核心应用

dotnet  new  web ——name  chatper1

然后我们添加对graphql-dotnet库的引用

dotnet  add  package  GraphQL

<强>创建第一个查询

下面我们来创建一个查询类,我们将它命名为HelloWorldQuery。graphql-dotnet中,查询类都需要继承ObjectGraphType类,所以HelloWorldQuery的代码如下

using  GraphQL.Types;   public  class  HelloWorldQuery : ObjectGraphType   {   public 才能;HelloWorldQuery ()   {才能   ,,,Field (   ,,,,,名字:,“hello",   ,,,,,解决:,context =祝辞,“world"   ,,,);   ,,}   }

这里你可能注意到我们使用了一个泛型方法,并传递了一个GraphQL的字符串类型StringGraphType来定义了一个喂字段,解决参数是一个Func委托,在其中定义了如何返回当前字段的值,这里我们是直接返回了一个字符串你好。

查询类中的返回字段都是定义在查询类的构造函数中的

现在我们一个有了一个查询类,下一步我们需要使用这个查询类构建一个结构(模式)。

在启动。cs文件的配置方法中,使用以下代码替换原有代码

var  schema =, new  schema  {   时间=Query 才能;new  HelloWorldQuery (),   };      app.Run (async (上下文),=比;   {   var 才能;result =, await  new  DocumentExecuter ()   ,,,.ExecuteAsync (doc =比;   ,,,{   ,,,,,doc.Schema =,模式;   ,,,,,doc.Query =, @"   ,,,,,,,query  {   ,,,,,,,,,你好   ,,,,,,,}   ,,,,,,,   ,,,}).ConfigureAwait(假);      var 才能;json =, new  DocumentWriter(缩进:,真的)   ,,,.Write(结果)   await 才能context.Response.WriteAsync (json);   }); <李>

DocumentExecuter类的ExecuteAsync方法中我们定义行动委托,并通过这个委托设置了一个ExecutionOptions对象。这个对象初始化了我们定义的结构(模式),并执行了我们定义的查询字符串。

<李>

doc。查询定义了一个查询字符串

<李>

最终查询执行的结果会通过DocumentWriter类实例的编写被转换成一个JSON字符串

下面我们来运行一下这个程序

dotnet 运行

你将在浏览器中看到以下结果

{
,“data": {
,,,“hello":“world"
,}
}

从以上的例子中,你会发现使用GraphQL并不像想象中那么难。下面我们可以在HelloWorldQuery类的构造函数中再添加一个字段你好,并指定这个字段会返回一个字符串宇宙。

Field (   ,,名字:“howdy",   解决:才能,context =祝辞,“universe"   );

然后我们继续修改启动类中配置的方法,修改我们之前定义的查询

var  schema =, new  schema  {,   时间=Query 才能;new  HelloWorldQuery ()   };      app.Run (async (上下文),=比;   {   var 才能;result =, await  new  DocumentExecuter ()   ,,,.ExecuteAsync (doc =比;   ,,,{   ,,,,,doc.Schema =,模式;   ,,,,,doc.Query =, @"   ,,,,,,,query  {   ,,,,,,,,,你好   ,,,,,,,,你好   ,,,,,,,}   ,,,,,,,   ,,,}).ConfigureAwait(假);      var 才能;json =, new  DocumentWriter(缩进:,真的)   ,,,.Write(结果)   await 才能context.Response.WriteAsync (json);   });

GraphQL怎么在ASP。网络核心中使用