快速開始
Nest是Nodejs的一個重要實現(xiàn)呻纹,它實現(xiàn)了一套類似SpringBoot的MVC框架結(jié)構(gòu),支持注釋和自動注入等編程方法匣沼,使用Typescript的強類型來提供可靠的開發(fā)體驗狰挡。
GraphQL的出現(xiàn)使得對于服務(wù)API的設(shè)計進入到了和數(shù)據(jù)庫設(shè)計一樣的水平,通過精心設(shè)計的schema释涛,可以長期保證服務(wù)的穩(wěn)定和可用性加叁,同時又不會限制后臺服務(wù)邏輯的升級。
此次采用Nest作為服務(wù)環(huán)境來搭建一個GraphQL服務(wù)腳手架唇撬,能夠滿足基本業(yè)務(wù)需求場景它匕,方便在此基礎(chǔ)上進行二次開發(fā)。
預(yù)設(shè)的業(yè)務(wù)需求場景包括以下內(nèi)容:
- 簡單查詢窖认、關(guān)聯(lián)查詢超凳,增刪改操作
- 循環(huán)依賴關(guān)系的Module定義
- 訪問控制管理,增加角色定義耀态,可對指定操作按角色進行控制
- 查詢分頁功能
- ...
依賴
Nest本身只是提供了對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官方示例進行擴展首装,該示例中有兩個對象:author
和post
创夜,類型定義如下:
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ì)的系列文章可以參考 這里