使用Nest搭建GraphQL服務(wù)

快速開(kāi)始

Nest是Nodejs的一個(gè)重要實(shí)現(xiàn),它實(shí)現(xiàn)了一套類(lèi)似SpringBoot的MVC框架結(jié)構(gòu),支持注釋和自動(dòng)注入等編程方法,使用Typescript的強(qiáng)類(lèi)型來(lái)提供可靠的開(kāi)發(fā)體驗(yàn)。

GraphQL的出現(xiàn)使得對(duì)于服務(wù)API的設(shè)計(jì)進(jìn)入到了和數(shù)據(jù)庫(kù)設(shè)計(jì)一樣的水平,通過(guò)精心設(shè)計(jì)的schema,可以長(zhǎng)期保證服務(wù)的穩(wěn)定和可用性,同時(shí)又不會(huì)限制后臺(tái)服務(wù)邏輯的升級(jí)。

此次采用Nest作為服務(wù)環(huán)境來(lái)搭建一個(gè)GraphQL服務(wù)腳手架,能夠滿(mǎn)足基本業(yè)務(wù)需求場(chǎng)景,方便在此基礎(chǔ)上進(jìn)行二次開(kāi)發(fā)。

預(yù)設(shè)的業(yè)務(wù)需求場(chǎng)景包括以下內(nèi)容:

  1. 簡(jiǎn)單查詢(xún)、關(guān)聯(lián)查詢(xún),增刪改操作
  2. 循環(huán)依賴(lài)關(guān)系的Module定義
  3. 訪問(wèn)控制管理,增加角色定義,可對(duì)指定操作按角色進(jìn)行控制
  4. 查詢(xún)分頁(yè)功能
  5. ...

依賴(lài)

Nest本身只是提供了對(duì)Apollo GraphQL Server的封裝,因此底層還是需要安裝apollo-server

"dependencies": {
  "@nestjs/common": "^7.0.1",
  "@nestjs/core": "^7.0.1",
  "@nestjs/graphql": "^7.3.9",
  "@nestjs/platform-express": "^7.0.1",
  "apollo-server": "^2.13.1",
  "apollo-server-express": "^2.13.1",
  "class-transformer": "^0.2.3",
  "class-validator": "^0.12.2",
  "graphql": "^15.0.0",
  "graphql-tools": "^5.0.0",
  "reflect-metadata": "^0.1.13",
  "rimraf": "^3.0.2",
  "rxjs": "^6.5.4"
},
"devDependencies": {
  "@nestjs/cli": "^7.0.0",
  "@nestjs/schematics": "^7.0.0",
  "@nestjs/testing": "^7.0.1",
  "@types/express": "^4.17.3",
  "@types/jest": "^25.1.4",
  "@types/node": "^13.9.1",
  "@types/supertest": "^2.0.8",
  "@typescript-eslint/eslint-plugin": "^2.23.0",
  "@typescript-eslint/parser": "^2.23.0",
  "eslint": "^6.8.0",
  "eslint-config-prettier": "^6.10.0",
  "eslint-plugin-import": "^2.20.1",
  "jest": "^25.1.0",
  "prettier": "^1.19.1",
  "supertest": "^4.0.2",
  "ts-jest": "^25.2.1",
  "ts-loader": "^6.2.1",
  "ts-node": "^8.6.2",
  "tsconfig-paths": "^3.9.0",
  "typescript": "^3.8.3"
},

示例

采用Nest官方示例進(jìn)行擴(kuò)展,該示例中有兩個(gè)對(duì)象:authorpost,類(lèi)型定義如下:

type Author {
  id: Int!
  firstName: String
  lastName: String
  posts: [Post!]!
}

type Post {
  id: Int!
  title: String!
  author: Author!
  votes: Int
}

下載

可以在碼云上獲取本示例全部源碼

git clone https://gitee.com/apollozhu/demo.graphql.starter.git

截圖

image.png

更詳細(xì)的系列文章可以參考 這里

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容