前言

你是否已经厌倦了REST风格的API"color: #ff0000">安装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,core使用graphQL,graphql教程,graphql,中文文档

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
狼山资源网 Copyright www.pvsay.com

评论“ASP.NET Core使用GraphQL第一章之Hello World”

暂无“ASP.NET Core使用GraphQL第一章之Hello World”评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。