如何设计优雅的符合restful风格的API

2020-04-16  本文已影响0人  逆水清寒

一:RESTful是什么

二:为什么要使用RESTful架构风格的接口

三:设计RESTful接口的规范

概念 含义
幂等性 一个操作或者多个操作导致资源的结果是一样的
RFC Internet服务的标准,通常标准文件由数字标识,数字越大,代表标准越新
URI 表示资源,资源对应的是服务器端领域模型的实体类
Endpoint 路径,表示api的具体网址
1:URI规范
@GetMapping("/api/app/Order") //Order大写字母开头,错误
@GetMapping("/api/app/orders") //正确
@GetMapping("/api/app/order") //order不是复数,错误 
@GetMapping("/api/app/orders") //正确
@GetMapping("/api/app/order_type/1") //错误
@GetMapping("/api/app/order-type/1") //正确
 @GetMapping("/api/app/orders/1/good-type/1") //错误
 @RequestMapping("/api/app/orders"){
 @RequestParam(value = "goodType") Integer goodsType} //正确
 
2:Request规范
方法 含义 幂等性 DEMO
GET 查询 /api/orders
POST 新增 /api/orders
PUT 修改完整资源 /api/orders/1
PATCH 修改部分属性 /api/orders/1
DELETE 删除资源 /api/orders/1
3:response规范
{
  "id": "1246021398806081538",
  "projectName": "沈磊的项目",
  "companyId": "1246020467318276097",
  "companyName": "沈磊的企业",
  "address": "北京第二小学",
  "type": 3,
  "firstPartName": "我不太清楚甲方是谁",
  "secondPartName": null,
  "contractAmount": 222558,
  "deviceCategory": 5,
  "deviceBrand": "北京",
  "deviceAmount": 333586,
  "upstreamSupplierType": 3,
  "upstreamSupplierName": "上游供应商的东西",
  "createBy": "艾新建",
  "updateTime": "2020-04-03 18:27:20",
  "updateBy": "艾新建"
}
方法 返回格式
GET 查询的对象
POST 新增成功的对象
PUT 更新成功的对象
PATCH 更新成功的对象
DELETE
4:错误码规范
5:完整的demo

根据我们已有的项目,包含完整的CURD的操作,展示出来供参考

    @ApiOperation(value = "查询工程项目详情",notes = "查询工程项目详情",httpMethod = "GET")
    @GetMapping("/{id}")
    public Project detail(@PathVariable("id") Long id) {
        return projectService.detail(id);
    }

    @ApiOperation(value = "添加工程项目",notes = "添加工程项目",httpMethod = "POST")
    @PostMapping
    public Project add(@RequestBody@Valid ReqProject req) {
        return projectService.add(req);
    }

    @ApiOperation(value = "修改项目工程", notes = "修改工程项目", httpMethod = "PUT")
    @PutMapping
    public Project update(@RequestBody @Valid ReqProject req) {
        return projectService.update(req);
    }
    
    @ApiOperation(value = "查询工程项目列表(分页)",notes = "查询工程项目列表(分页)",httpMethod = "GET")
    @GetMapping(value = "/page")
    public IPage<RespProject> page(ReqProjectQuery req) {
        return projectService.page(req);
    }
    
    @ApiOperation(value = "删除工程项目",notes = "删除工程项目",httpMethod = "DELETE")
    @DeleteMapping("/{id}")
    public void delete(@PathVariable("id") Long id) {
        log.info("查询工程信息详情入参:{}",id);
        projectService.delete(id);
    }
上一篇 下一篇

猜你喜欢

热点阅读