系列導航
使用Hot Chocolate和.NET 6構建GraphQL應用文章索引
前言
這篇文章是這個系列的第一篇,我們會簡單地討論一下GraphQL,然后介紹一下這個系列將會使用的示例專案,
關于GraphQL
關于GraphQL和Restful API的討論已經有很多了,我在本文里不會試圖去推銷什么技術,GraphQL的官方主頁在這里GraphQL | A query language for your API,它的出現是為了解決Restful API面臨的當所需查詢的資料結構呈現及其復雜的樹狀結構或依賴關系時,需要多次按順序發送不同的Restful請求,并且需要額外的Dto物件來保證當前的API介面不會回傳多余的資料,此外,當資料之間的關系發生變動導致原本的Resful API無法獲取關聯的資料時,就需要去修改介面定義,
GraphQL能通過精確定義客戶端需要的資料,無需多次請求就可以獲取無冗余的結果,關于GraphQL的基本概念就不詳細介紹了,可以參考官方檔案,或者跟著這個系列親手實作一個感受一下,
關于GraphQL和Restful API各自的優點和缺點,可以參考這篇文章REST vs GraphQL for an API,用我的理解簡單地解釋就是:
- Restful API更為開發人員所熟悉,但是我覺得文章里提到的API Client的接受度和Learning Resources現在來看幾乎都不是太大的優勢了,越來越多的主流API Client像是Postman,小眾一點的Insomia,都支持發送GraphQL請求,社區的資源也很多了,Restful API最明顯的短處在于我們必須使用Dto來減少回傳資料的冗余,
- GraphQL的優勢在于它能更好地發送聚合請求,并且能夠精確定義資料使得回傳值無冗余,缺點也很明顯,開發人員相對來說不夠熟悉,對檔案下載的支持不好,
專案模版
這兩天抽空整理之前的內容,寫了一個基于Clean Architecture的.NET 6 Web API專案模版,放在這里了:Asinta/Code4NothingCaTempate,還沒有推到Nuget上,如果有需要使用的,可以clone到本地,在解決方案根目錄執行:
$ dotnet new --install .
The following template packages will be installed:
/Users/yu.li1/Projects/asinta/netcore/Code4Nothing
Success: /Users/yu.li1/Projects/asinta/netcore/Code4Nothing installed the following templates:
Template Name Short Name Language Tags
------------------------------------------------- ---------- -------- ----
Code4Nothing Clean Architecture Solution Template ca-c4n [C#]
接下來就可以從本地使用這個模版來創建新專案了
dotnet new ca-c4n -n PostGraphi
這個解決方案模版包含了測驗專案,我們在這個系列里暫時都不會用到,src目錄下的專案還是按照之前使用.NET 6開發TodoList應用文章索引這個系列里的方式進行劃分,用做示例的TodoItem相關的可以作為參考實作自己的物體和相關功能,
在GraphQL的這個系列里,我們會基于這個模版來構建一個博客文章管理的示例應用,主要用來練習如何在.NET 6 Web API應用里構建GraphQL介面以及相關的功能,
領域物體關系
下圖是我們即將構建的應用涉及的物體以及相互之間的關系,一些基礎欄位比如創建時間和更新時間我沒有畫上去,足夠理解用了,

關于Hot Chocolate
Hot Chocolate作為GraphQL和.NET生態中近幾年迅速獲得大量使用的GraphQL服務端框架,提供了非常方便的使用方法,你可以應用它來構建獨立的基于.NET 6的GraphQL Server,也可以用來部署在Azure Functions或者AWS Lambda上用來作為GraphQL Server,同時也可以實作GraphQL網關,一些.NET生態中推薦使用的網關框架如Envoy也支持GraphQL請求,
我們會使用這個框架來實作GraphQL的常用功能,
關于GraphQL更多的資源
- chentsulin/awesome-graphql
- graphql/graphiql
- 一個很棒的GraphQL介面可視化工具:APIs-guru/graphql-voyager
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/415882.html
標籤:.NET Core
