構(gòu)完全解析:6大模塊的REST API單體架構(gòu)設(shè)計一圖看懂)
NestJS Starter 項目結(jié)構(gòu)完全解析6大模塊的REST API單體架構(gòu)設(shè)計一圖看懂【免費(fèi)下載鏈接】nestjs-starter-rest-apiNestJS Starter Kit. Monolithic Backend. REST API.項目地址: https://gitcode.com/gh_mirrors/ne/nestjs-starter-rest-api本文帶你快速搞懂 nestjs-starter-rest-api——一個基于 NestJS 11 的輕量級單體后端 REST API 啟動套件。它開箱即用地內(nèi)置了 JWT 認(rèn)證、RBAC 權(quán)限、TypeORM 數(shù)據(jù)庫、Docker 部署等能力是新手搭建企業(yè)級 Node.js 后端的理想起點。為什么值得用這個 NestJS 啟動套件相比從零搭建這個 starter kit 把后端開發(fā)中最耗時的基礎(chǔ)設(shè)施都做好了能力技術(shù)方案狀態(tài)身份認(rèn)證JWTRS256 非對稱密鑰? 已完成權(quán)限控制RBAC 角色模型 ACL 服務(wù)? 已完成ORM 集成TypeORM? 已完成數(shù)據(jù)庫遷移TypeORM Migrations? 已完成日志winston? 已完成參數(shù)校驗class-validator 全局管道? 已完成分頁SQL offset limit? 已完成容器化Dockerfile docker-compose? 已完成API 文檔自動生成 Swagger / OpenAPI? 已完成此外還附帶 Prettier 格式化、Husky 提交鉤子、Commitlint 規(guī)范、SonarCloud 代碼質(zhì)量檢查等隱性福利。全景圖6大模塊一圖看懂整個src/采用 NestJS 的模塊化單體架構(gòu)所有業(yè)務(wù)模塊在 app.module.ts 中統(tǒng)一裝配src/ ├── main.ts # 應(yīng)用入口端口、前綴、Swagger ├── app.module.ts # 根模塊裝配所有業(yè)務(wù)模塊 ├── cli.ts # 命令行入口 │ ├── ① 應(yīng)用入口區(qū)src/ 根文件 ├── ② user/ 用戶模塊賬戶管理 ├── ③ auth/ 認(rèn)證授權(quán)模塊JWT RBAC ├── ④ article/ 文章模塊業(yè)務(wù) CRUD 示例 ├── ⑤ shared/ 共享模塊配置、日志、過濾器、中間件 │ migrations/ # ⑥ 數(shù)據(jù)庫遷移文件 test/ # ⑥ E2E 端到端測試 scripts/ # ⑥ 輔助腳本npm 代理、JWT 密鑰生成 docs/ # ⑥ 架構(gòu)與 API 文檔一句話理解業(yè)務(wù)模塊各管一個領(lǐng)域共享模塊提供公共地基外圍區(qū)域負(fù)責(zé)數(shù)據(jù)演進(jìn)和質(zhì)量保障。官方結(jié)構(gòu)說明見 project-structure.md。① 應(yīng)用入口區(qū)main.ts 如何拉起整個應(yīng)用main.ts 是全局裝配點做了四件關(guān)鍵事全局路由前綴所有接口統(tǒng)一掛在/api/v1下天然支持未來版本升級全局校驗管道ValidationPipe配合 class-validator 自動攔截非法參數(shù)請求追蹤RequestIdMiddleware為每個請求打上唯一 ID方便日志排查Swagger 文檔啟動后訪問/swagger即可看到全部接口文檔根模塊 app.module.ts 僅做一件事——導(dǎo)入四大模塊SharedModule、UserModule、AuthModule、ArticleModule。結(jié)構(gòu)極簡一眼看清依賴全貌。② auth 模塊JWT 認(rèn)證與 RBAC 權(quán)限核心auth 模塊是整個安全體系的心臟內(nèi)部按職責(zé)拆成六個目錄auth/ ├── constants/ # 角色常量、策略常量 ├── controllers/ # 登錄、注冊、刷新 Token 接口 ├── decorators/ # Roles 角色裝飾器 ├── dtos/ # 登錄/注冊輸入輸出 DTO ├── guards/ # 4 道守衛(wèi)本地認(rèn)證、JWT、刷新Token、角色校驗 └── strategies/ # 3 種 Passport 策略local、jwt-auth、jwt-refresh亮點設(shè)計RS256 非對稱簽名JWT 使用公鑰/私鑰對auth.module.ts私鑰僅用于簽發(fā)公鑰用于校驗安全性高于常見的 HS256雙 Token 機(jī)制短期 access token 長期 refresh tokenjwt-refresh.guard.ts專門負(fù)責(zé)無感刷新聲明式鑒權(quán)控制器方法上標(biāo)注角色裝飾器配合roles.guard.ts自動攔截越權(quán)請求③ user 模塊標(biāo)準(zhǔn)業(yè)務(wù)模塊的分層樣板user 模塊是最值得抄作業(yè)的標(biāo)準(zhǔn)分層結(jié)構(gòu)每個目錄都有明確分工目錄職責(zé)示例文件controllers/接收請求、返回響應(yīng)user.controller.tsdtos/定義數(shù)據(jù)進(jìn)出網(wǎng)絡(luò)的嚴(yán)格格式user-create-input.dto.tsentities/映射數(shù)據(jù)庫表結(jié)構(gòu)user.entity.tsrepositories/連接并操作數(shù)據(jù)庫user.repository.tsservices/編寫業(yè)務(wù)邏輯user.service.ts注意其中的user-acl.service.ts它繼承共享模塊的BaseAclService聲明誰能對 User 資源做什么操作。這套 ACL 機(jī)制的完整用法可參考 acl.md比如可以寫出自定義規(guī)則——只有文章作者本人能修改自己的文章。④ article 模塊可復(fù)用的 CRUD 業(yè)務(wù)模板article 模塊與 user 模塊結(jié)構(gòu)完全同構(gòu)controller → service → repository → entity是標(biāo)準(zhǔn)的增刪改查業(yè)務(wù)模板。當(dāng)你要新增一個業(yè)務(wù)域比如訂單、商品只需照此結(jié)構(gòu)復(fù)制一份再在 app.module.ts 中導(dǎo)入即可——這就是模塊化單體架構(gòu)最爽的地方每個領(lǐng)域自成一包內(nèi)部高內(nèi)聚之間低耦合。⑤ shared 模塊所有模塊共享的地基shared.module.ts 是全應(yīng)用的基礎(chǔ)設(shè)施層其他模塊都依賴它配置中心ConfigModule統(tǒng)一管理.env環(huán)境變量數(shù)據(jù)庫、JWT 密鑰、端口數(shù)據(jù)庫連接TypeOrmModule全局注冊 Postgres 連接實體按約定路徑自動掃描winston 日志AppLoggerModule提供結(jié)構(gòu)化日志能力全局異常過濾器AllExceptionsFilter兜底捕獲所有未處理異常統(tǒng)一返回錯誤格式日志攔截器LoggingInterceptor記錄每個請求的處理耗時中間件request-id.middleware.ts注入請求追蹤 ID簡單說業(yè)務(wù)模塊負(fù)責(zé)做什么shared 模塊負(fù)責(zé)怎么跑。⑥ 外圍基建區(qū)數(shù)據(jù)演進(jìn)與質(zhì)量保障根目錄下還有四個非 src區(qū)域構(gòu)成項目的工程化保障migrations/TypeORM 遷移文件CreateUsers.ts數(shù)據(jù)庫結(jié)構(gòu)隨代碼版本可追溯地演進(jìn)test/E2E 端到端測試覆蓋 app、auth、user、article 四大場景scripts/generate-jwt-keys 一鍵生成 JWT 密鑰對npm腳本讓 Docker 內(nèi)外命令行為一致docs/架構(gòu)文檔與 middleware.md 等專項說明請求生命周期6大模塊如何協(xié)同工作以一個用戶登錄請求為例完整走一遍架構(gòu)請求進(jìn)入 →RequestIdMiddleware打上追蹤 ID經(jīng)過ValidationPipe校驗參數(shù)合法性路由到 auth.controller.tslocal.strategy.ts驗證用戶名密碼AuthService調(diào)用 UserModule 查詢用戶簽發(fā) JWT返回 access refresh tokenLoggingInterceptor記錄耗時若中途拋錯AllExceptionsFilter統(tǒng)一格式化返回一條請求橫向穿越 shared、auth、user 三個模塊——模塊間協(xié)作清晰但各自職責(zé)獨(dú)立這正是單體架構(gòu)好維護(hù)的關(guān)鍵??焖偕鲜?步本地啟動指南想親手體驗這套架構(gòu)三步即可跑起來git clone https://gitcode.com/gh_mirrors/ne/nestjs-starter-rest-api cd nestjs-starter-rest-api npm install cp .env.template .env ./scripts/generate-jwt-keys然后把生成的 JWT 公鑰/私鑰 base64 值填入.env執(zhí)行npm run start即可。訪問http://localhost:3000/swagger你將看到一個文檔齊全的 REST API——這就是這套 starter kit 的交付水準(zhǔn)。小結(jié)這套架構(gòu)給新手的3個啟示單體不等于混亂按領(lǐng)域劃分模塊user / auth / article每個模塊內(nèi)部嚴(yán)格分層未來需要拆分微服務(wù)時成本極低安全體系一次到位JWT 雙 Token RBAC ACL 三層防護(hù)避免了先上線后補(bǔ)安全的常見陷阱基建與業(yè)務(wù)分離shared 模塊承載配置、日志、異常處理等橫切關(guān)注點業(yè)務(wù)模塊保持純粹對于想快速交付企業(yè)級 Node.js 后端的新手而言讀懂這 6 大模塊的設(shè)計邏輯你就掌握了 NestJS 單體架構(gòu)的核心骨架?!久赓M(fèi)下載鏈接】nestjs-starter-rest-apiNestJS Starter Kit. Monolithic Backend. REST API.項目地址: https://gitcode.com/gh_mirrors/ne/nestjs-starter-rest-api創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考