美文网首页IT@程序员猿媛
使用Nest搭建GraphQL服务

使用Nest搭建GraphQL服务

作者: 敬亭阁主 | 来源:发表于2020-05-23 10:25 被阅读0次

快速开始

Nest是Nodejs的一个重要实现,它实现了一套类似SpringBoot的MVC框架结构,支持注释和自动注入等编程方法,使用Typescript的强类型来提供可靠的开发体验。

GraphQL的出现使得对于服务API的设计进入到了和数据库设计一样的水平,通过精心设计的schema,可以长期保证服务的稳定和可用性,同时又不会限制后台服务逻辑的升级。

此次采用Nest作为服务环境来搭建一个GraphQL服务脚手架,能够满足基本业务需求场景,方便在此基础上进行二次开发。

预设的业务需求场景包括以下内容:

  1. 简单查询、关联查询,增删改操作
  2. 循环依赖关系的Module定义
  3. 访问控制管理,增加角色定义,可对指定操作按角色进行控制
  4. 查询分页功能
  5. ...

依赖

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官方示例进行扩展,该示例中有两个对象:authorpost,类型定义如下:

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

更详细的系列文章可以参考 这里

相关文章

网友评论

    本文标题:使用Nest搭建GraphQL服务

    本文链接:https://www.haomeiwen.com/subject/jfdkahtx.html