6:RestFul API-Java Spring

185 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情

6.1 RestFul API介绍

Rest表示性状态转移(Representation State Transfer),用URI表示资源,用HTTP方法(GET, POST, PUT, DELETE)表征对这些资源的操作,用于 Web 数据接口的设计,Rest的最基本特征是面向资源

  • Resource 资源,资源是构成应用系统的所有的基本概念,即数据
  • Representational 表述,REST的资源可以用XML,JSON,纯文本等多种方式表述
  • State Transfer 状态转移,客户端通过HTTP的GET/POST/PUT/DELETE/PATCH对资源进行操作,实现资源的状态转移

6.2 URL构成

Restful API用URL表示特定的资源或资源集合,例如http://www.xxx.com/goods

  • URI(统一资源标识符)用于标识一个资源,提供标识资源的方法
  • URL(统一资源定位符)用于提供找到某个资源的路径,比如网址
  • URL是URI的子集
URL描述
/categories商品的所有一级分类categories
/categories/1id为1的一级分类
/categories/1/goodsid为1的一级分类下所有商品
/categories/1/subcategoriesid为1的一级分类下的所有二级分类
/subcategories/2id为2的二级分类
/subcategories/2/goodsid为2的二级分类下所有商品
/goods/5id为5的商品

6.3 RestFul API原理

RESTful API 是一种指REST设计风格的API,采用HTTP做传输协议,用一套协议来规范多种形式的前端和同一个后台的交互方式

用户在Android、IOS、PC等终端平台向服务端发送请求后,需要为每个平台的数据请求单独定义相应的返回格式,需要为每个平台单独写一个后台系统

而RESTful API 要求前端用一套协议来规范的语法格式发送请求,并与同一个后台系统交互,服务端只需要定义一个统一的响应接口(API)即可

在这里插入图片描述

传统API

  • http://localhost:8080/user/queryUser (GET查询用户)
  • http://localhost:8080/user/addUser(POST添加用户)
  • http://localhost:8080/user/updateUser (PUT更新用户)
  • http://localhost:8080/user/deleteUser (DELETE删除用户)

RestFul API

  • http://localhost:8080/user/1 (@GetMapping("/user/{userId}") 查询)
  • http://localhost:8080/user (@PostMapping("/user") 添加或修改)
  • http://localhost:8080/user (@PutMapping("/user") 修改)
  • http://localhost:8080/user/1 (@DeleteMapping("/user/{userId}") 删除)

6.4 RestFul API映射注解

请求方法用途
@Controller表明了这个类或方法是一个控制器,用于返回对象
@ResponseBody将返回的Java对象转为JSON格式的数据
@RestController包含了@Controller@ResponseBody
@RequestMapping全注解,将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上
@GetMapping接收GET的请求方式,等同于 @RequestMapping(value ="/user", method = RequestMethod.GET)
@PostMapping接收Post的请求方式,等同于 @RequestMapping(value ="/user", method = RequestMethod.POST)
@PutMapping接收Put的请求方式,等同于@RequestMapping(value ="/user", method = RequestMethod.PUT)
@DeleteMapping接收Delete的请求方式,等同于@RequestMapping(value ="/user", method = RequestMethod.DELETE)
@RequestParam将请求参数绑定到控制器的方法参数上
@PathVariable接收请求路径中占位符的值
@RequestBody接收前端传递给后端的json字符串中的数据(请求体中的数据的)

6.5 RestFul API操作

RestFul API接口响应的资源(返回给前端的数据格式)的表现形式是, @RestController@Controller标签相同,用于标注在类定义前面,使得类会被认定为Controller对象,用于告知Spring容器,该类所有方法的返回值需要以JSON或XML格式写到@ResponseBody

  • 可在控制类(@Controller类)上添加@ResponseBody 注解
  • 可在每个接口的方法上添加@ResponseBody 注解
  • 可把@ResponseBody注解提取到控制器上,这个控制器中所有的返回值会写到@ResponseBody
  • 可在控制类(@Controllerr类)上合并@Controller@ResponseBody成一个@RestController注解

RestFul API通过两种方式实现定义接口的URL

1.指定请求方式

  • @RequestMapping(value ="/user", method = RequestMethod.GET) 查询

2.特定请求方式

  • @PostMapping("/user") 添加或修改

HTTP的五种请求方法

请求方法用途
POST创建一个新的资源并返回新资源
GET查询特定资源
PUT修改资源的全部属性并返回修改后的资源
PATCH修改资源的特定属性并返回修改后的资源
DELETE删除资源

HTTP状态码

HTTP状态码描述
2**操作成功接收并处理
3**重定向
4**客户端错误,请求包含语法错误
5**服务器错误,服务器在处理请求的过程中发生了错误

共用HTTP状态码

HTTP状态码描述
400参数格式错误(缺少或不符合要求)
401用户需登录访问
403用户无权限访问
409资源冲突或资源被锁定(由于事务回滚造成的)
500服务器通用错误(服务器程序错误)
503服务当前无法处理请求(服务器忙)

GET请求

URL描述
GET /categories获取所有的一级商品分类
GET /categories/1获取id为1的一级商品分类对象
GET /categories/1/goods获取id为1的一级商品分类下所有商品
GET /categories/1/subcategories获取id为1的分类下的所有子分类
GET /goods?name=电视机 &sort=price&order=acend获取商品名称为电视机的商品,按照价格升 序排序

Get请求的HTTP状态码

HTTP状态码描述
200请求成功,数据在Response中返回

POST请求

URL描述
POST /categories创建一个新的一级商品分类
POST /categories/1/subcategories在id为1的一级商品分类下创建一个二级分类
POST /subcategories/1/goods/1在id为1的二级商品分类下增加id为1的商品
POST /orders/1000/payments为id为1000的订单付款
POST /login用户登录

Post请求的HTTP状态码

HTTP状态码描述
201新资源成功,数据在Response中返回
202已经接受处理请求但尚未完成(异步处理)

PUT请求

URL描述
PUT /categories/1修改id为1的一级商品分类
PUT /subcategories/1修改id为1的二级商品分类
PUT /goods/5/onshelves将id为5的商品上架
PUT /goods/5/offshelves将id为5的商品下架

PUT请求的HTTP状态码

HTTP状态码描述
200修改成功
202已经接受处理请求但尚未完成(异步处理)

DELETE请求

URL描述
DELETE /categories/1删除id为1的一级商品分类
DELETE /categories/1/goods/5在id为1的分类中将id为5的商品移除

Delete请求的HTTP状态码

HTTP状态码描述
200删除成功
202已经接受处理请求但尚未完成(异步处理)