国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

ASP.NET Core使用GraphQL第一章之Hello World

2024-07-10 12:48:38
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

你是否已經(jīng)厭倦了REST風(fēng)格的API? 讓我們來(lái)聊一下GraphQL。

 下面是GraphQL的定義:

GraphQL 既是一種用于 API 的查詢語(yǔ)言也是一個(gè)滿足你數(shù)據(jù)查詢的運(yùn)行時(shí)。 GraphQL 對(duì)你的 API 中的數(shù)據(jù)提供了一套易于理解的完整描述,使得客戶端能夠準(zhǔn)確地獲得它需要的數(shù)據(jù),而且沒(méi)有任何冗余,也讓 API 更容易地隨著時(shí)間推移而演進(jìn),還能用于構(gòu)建強(qiáng)大的開(kāi)發(fā)者工具。

GraphQL由Facebook開(kāi)發(fā),始于2012年,2015年公開(kāi)。

GraphQL牛逼之處是它可以讓客戶端精確的查詢它們想要的,不附加額外的東西,這樣的話就很容易讓客戶端隨著API的演進(jìn)去使用。

GraphQL提供了一種聲明式的方式從服務(wù)器拉取數(shù)據(jù)。你可以從GraphQL官網(wǎng)中了解到GraphQL的所有優(yōu)點(diǎn)。在這一系列博客中,我將展示如何在ASP.NET Core中集成GraphQL, 并使用GraphQL作為你的API查詢語(yǔ)言。

使用GraphQL的聲明式查詢,你可以自定義API返回的屬性列表。這與REST API中每個(gè)API只返回固定字段不同。

安裝GraphQL

為了在C#中使用GraphQL, GraphQL社區(qū)中提供了一個(gè)開(kāi)源組件 graphql-dotnet 。本系列博客中我們都將使用這個(gè)組件。

首先我們創(chuàng)建一個(gè)空的ASP.NET Core App

dotnet new web --name chatper1

然后我們添加對(duì) graphql-dotnet 庫(kù)的引用

dotnet add package GraphQL

創(chuàng)建第一個(gè)Query

下面我們來(lái)創(chuàng)建一個(gè) query 類, 我們將它命名為 HelloWorldQuery 。 graphql-dotnet 中,查詢類都需要繼承 ObjectGraphType 類,所以 HelloWorldQuery 的代碼如下

using GraphQL.Types;public class HelloWorldQuery : ObjectGraphType{  public HelloWorldQuery()  {    Field<StringGraphType>(      name: "hello",      resolve: context => "world"    );  }}

這里你可能注意到我們使用了一個(gè)泛型方法 Field ,并傳遞了一個(gè)GraphQL的字符串類型 StringGraphType 來(lái)定義了一個(gè) hello 字段, resolve 參數(shù)是一個(gè)Func委托,在其中定義了如何返回當(dāng)前字段的值,這里我們是直接返回了一個(gè)字符串hello。

查詢類中的返回字段都是定義在查詢類的構(gòu)造函數(shù)中的

現(xiàn)在我們一個(gè)有了一個(gè)查詢類,下一步我們需要使用這個(gè)查詢類構(gòu)建一個(gè)結(jié)構(gòu)(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);});            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 巨野县| 保德县| 丰镇市| 宣化县| 松潘县| 大同县| 深水埗区| 湘乡市| 彭水| 商丘市| 西畴县| 宝清县| 孝感市| 桃源县| 罗平县| 独山县| 北流市| 福建省| 孟州市| 四平市| 麦盖提县| 合肥市| 康乐县| 庆安县| 疏附县| 沈丘县| 志丹县| 集安市| 恭城| 乌拉特前旗| 新和县| 大厂| 芮城县| 天水市| 林口县| 阿克陶县| 姚安县| 河西区| 佛冈县| 马边| 永德县|