ASP.NET Core使用GraphQL第一章之Hello World
 更新时间:2018年11月05日 11:07:34   作者:LamondLu  

这篇文章主要给大家介绍了关于ASP.NET Core使用GraphQL第一章之Hello World的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

你是否已经厌倦了REST风格的API? 让我们来聊一下GraphQL。
 下面是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

dotnet new web –name chatper1

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

dotnet add package GraphQL

创建第一个Query

下面我们来创建一个 query 类, 我们将它命名为 HelloWorldQuery 。 graphql-dotnet 中,查询类都需要继承 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字符串

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

dotnet run

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

{
  “data”: {
    “hello”: “world”
  }
}

从以上的例子中,你会发现使用GraphQL并不像想象中那么难。下面我们可以在 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)
本篇源代码:github.com/lamondlu/GraphQL_Blogs (本地下载)
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对华域联盟的支持。

您可能感兴趣的文章:ASP.NET Core使用GraphQL第二章之中间件

asp.net
core
graphql

相关文章
Asp.net给站点某目录增加Aspnet用户Asp.net给站点某目录增加Aspnet用户… 2006-09-09
ASP.NET中TimeSpan的用法实例解析这篇文章主要介绍了ASP.NET中TimeSpan的用法,以实例的形式具体分析了TimeSpan应用中的各种常见常量、字段、属性与方法等,非常具有参考学习价值,需要的朋友可以参考下 2014-10-10
.NET Core中Object Pool的多种用法详解本文通过实例代码给大家介绍了.NET Core中Object Pool的简单使用 ,大概给大家提供了四种方法,每种方法都很经典,需要的朋友可以参考下 2018-09-09
asp.net Repeater分页实例(PageDataSource的使用)Asp.net提供了三个功能强大的列表控件:DataGrid、DataList和Repeater控件,但其中只有DataGrid控件提供分页功能。相对DataGrid,DataList和Repeater控件具有更高的样式自定义性,所以很多时候我们喜欢使用DataList或Repeater控件来显示数据 2013-04-04
ASP.net如何连接SQL SERVER 2012数据库这篇文章主要介绍了ASP.net连接SQL SERVER 2012数据库的方法,非常不错,在项目开发中经常可以用到,需要的朋友可以参考下 2016-08-08
微信公众平台开发之语音识别.Net代码解析这篇文章主要为大家详细解析了微信公众平台开发之语音识别.Net代码,感兴趣的小伙伴们可以参考一下 2016-06-06
asp.net自定义分页控件示例这篇文章主要介绍了asp.net自定义分页控件示例,大家参考使用吧 2014-01-01
swagger上传文件并支持jwt认证的实现方法今天通过本文给大家分享swagger上传文件并支持jwt认证的实现方法,文中提到了安装方法及实现代码,感兴趣的朋友跟随华域联盟小编一起学习吧 2018-05-05
asp.net jquery无刷新分页插件(jquery.pagination.js)采用Jquery无刷新分页插件jquery.pagination.js 实现无刷新分页效果:本示例Handler中采用StringBuilder的append方法追加HTML,小数据量可以,但是大数据或是布局常变,建议返回JSON格式的数据,性能和灵活性更好,望使用者好好把握 2013-01-01
asp.net core 获取 MacAddress 地址方法示例这篇文章主要介绍了asp.net core获取MacAddress地址方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2019-02-02

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。