首页 > 网络编程 > ASP.NET > 正文

ASP.NET Core使用GraphQL第一章之Hello World_实用技巧

2018-12-02 11:31:49

前言

你是否已经厌倦了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)

本篇源代码:https://github.com/lamondlu/GraphQL_Blogs (本地下载)

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

  • 相关标签:ASP.NET
  • 本文发布HTML5中文学习网 ,转载请注明出处,感谢您!
  • 相关文章


  • 曝网友假装外国人写投诉信 ofo秒退押金并回函致歉
  • 苹果市值缩水逾2000亿美元 遭多家投行下调目标价
  • Asp.net Core与类库读取配置文件信息的方法_实用技巧
  • asp.net在Repeater嵌套的Repeater中使用复选框详解_实用技巧
  • 利用IIS调试ASP.NET网站程序的完整步骤_实用技巧
  • Asp.Net Core轻松学习系列之配置文件_实用技巧
  • ASP.NET 页生命周期概述(小结)_实用技巧
  • 详解ASP.NET Core WebApi 返回统一格式参数_实用技巧
  • 2018年网络流行语有哪些?2018年十大网络流行语盘点
  • 华为首席财务官孟晚舟被暂扣 深圳市政府要求加方立即放人!
  • 独孤九贱(4)_PHP视频教程

    江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。 PHP中文网出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...

    独孤九贱(5)_ThinkPHP5视频教程

    ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...

    独孤九贱(1)_HTML5视频教程

    《php.cn原创html5视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。 ...

    ThinkPHP5实战之[教学管理系统]

    本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。

    PHP入门视频教程之一周学会PHP

    所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...

    作者信息

    kevin

    永远在学习的路上!

    相关教程

  • javascript初级视频教程 javascript初级视频教程
  • jquery 基础视频教程 jquery 基础视频教程
  • javascript三级联动视频教程 javascript三级联动视频教程
  • 独孤九贱(3)_JavaScript视频教程 独孤九贱(3)_JavaScript视频教程
  • 独孤九贱(6)_jQuery视频教程 独孤九贱(6)_jQuery视频教程
  • 热门教程