RESTful

RESTful是一种代码风格,不是一种标准,不必遵循

在RESTful中,一切都被认为是资源,每个资源有对应的URL标识

RESTful规范

接口url

传统接口

1
2
3
http://localhost:8080/api/get_list?id=1
http://localhost:8080/api/delete_list?id=1
http://localhost:8080/api/update_list?id=1

接口尾部携带参数

RESTful接口

1
http://localhost:8080/api/get_list/1

RESTful风格,只使用一个接口就完成增删改差

不同的操作通过不同的请求方式(GET、POST、PUT、PATCH、DELETE等)和请求路径区分

版本控制

版本控制风格一共有三种:

  • URI Versioning 版本将在请求的URI中传递
  • Header Versioning 自定义请求标头将指定版本
  • Media Type Versioning 请求的Accept标头将指定版本

一般用第一种,更加语义化

main:

1
2
3
4
5
6
7
8
9
10
11
12
13
import { NestFactory } from '@nestjs/core';
import { VersioningType } from '@nestjs/common';
import { AppModule } from './app.module';

async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableVersioning({
// 选择版本控制风格
type: VersioningType.URI,
})
await app.listen(3000);
}
bootstrap();

conrtoller:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import { Controller, Get, Post, Body, Patch, Param, Delete, Version } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';

// 可以配置版本
@Controller({
path:"user",
version:'1'
})
export class UserController {
constructor(private readonly userService: UserService) {}

@Post()
create(@Body() createUserDto: CreateUserDto) {
return this.userService.create(createUserDto);
}

@Get()
// 这样是只给某个接口加
// @Version('1')
findAll() {
return this.userService.findAll();
}

@Get(':id')
findOne(@Param('id') id: string) {
return this.userService.findOne(+id);
}

@Patch(':id')
update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) {
return this.userService.update(+id, updateUserDto);
}
}

Code码

英文含义中文含义
200OK成功
304Not Modified协商缓存了
400Bad Request参数错误
401Unauthorized token错误
403Forbidden referer origin验证失败
404Not Found接口不存在
500Internal Server Error服务端错误
502Bad Gateway上游接口有问题或者服务器问题