SpringBoot RESTful api
LiuFqiang 人气:1
一、REST简单介绍
REST代表Representational State Transfer,是一种URI风格,是一组架构约束条件和原则。REST风格服务调用就是解析URL请求,将请求由逻辑构建处理,并将处理结果返回给前端的一种调用形式。这个风格被广泛用于微服务系统之间的交互,一般前后端分离的项目采用这种风格,而不是一种标准。总结来说rest设计规范通过URL表示接口名,HTTP请求方式来区分请求类型,同时前端根据HTTP状态响应做相应的操作
二、URI介绍
URI:统一资源定位符(Uniform Resource Locator),资源(Resource)就是网络上的一个实体,或者说是网络上的一个具体信息,每一个资源类和其资源实体都可以用一个URI地址来唯一标识,比如https://cnblogs.com标识博客资源类,https://cnblogs.com/p/2478932.html表示一个唯一的博客资源实体,它的资源类是cnblogs.com,资源实体表示就是2478932
对资源类和对资源实体的访问和操作被称为资源请求(ResourceRequest),请求中包含要访问的资源类、资源实体(可选)以及资源动作。如上所述,资源类和资源实体可以由一个唯一的URI表示,而资源动作(即对资源增删改查)则需要用方法(Method)和参数(Param)表示。
基于资源的请求示例
方法 | URL | 示例解释 |
GET | https://cnblogs.com/ | 获取博客类所有实体 |
GET | https://cnblogs.com/23424 | 获取指定博客文章的资源实体 |
POST | https://cnblogs.com/ | 创建一个博客文章,参数可以是包含初始值的对象 |
PUT | https://cnblogs.com/23424 | 更新指定博客文章资源实体,参数是增量变更的对象 |
DELETE | https://cnblogs.com/23424 | 删除指定的资源实例 |
资源概念横跨后台和各类前端,两端之间采用REST风格的服务暴露形式,因此每一个资源URI会对应于一个HTTPURL,而资源请求中的方法正好对应于HTTPMethod。
在后台,首先需要定义资源操作,约定根据URL请求路径地址信息、URL请求路径中的参数和HTTP请求方法对应的资源操作方法,映射到具体操作资源类和方法。
HTTP存在创建、修改、访问、删除这几种操作
Rest风格的url一般不会出现动词,对资源的操作方式已经交给了HTTPMethod了
错误:http:xxxxxx.com/getUserById
未使用RESTful之前与之后对比
操作 | 未使用RESTful | 使用RESTful |
查找(SELECT-GET) | /rest/api/getUser | /rest/api/user |
修改(UPDATE-PUT) |
/rest/api/editUser | /rest/api/user/34543 |
增加(INSERT-POST) | /rest/api/addUser | /rest/api/user/34543 |
删除(DELETE-PUT) | /rest/apihttps://img.qb5200.com/download-x/deleteUser | /rest/api/user/34543 |
三、SpringBoot对REST风格请求调用
下面基于SpringBoot使用rest风格请求示例:
@RestController @RequestMapping(value="/rest/api") public class ConsTranChkController { @Autowired private IConsTranChkService consTranChkService; /** * RESTful查询 * @return * @author liufq * @Date 2019年11月14日 下午5:44:41 */ @RequestMapping(value="/user", method=RequestMethod.GET) public List<Map<String, Object>> getUserInfo(){ List<Map<String, Object>> resultList = consTranChkService.getChksList(); System.out.println(resultList); return resultList; } /** * RESTful修改 * @param userId * @return * @author liufq * @Date 2019年11月14日 下午5:44:56 */ @RequestMapping(value="user/{userId}", method=RequestMethod.PUT) public int editUser(@PathVariable String userId){ System.out.println("获取到用户ID:" + userId); return consTranChkService.editUser(userId); }
这里不再贴Dao层及业务层的代码了,只是简单说明从前端请求到spring 的控制层rest风格的接受参数,为了可以更明显的看到HTTPMethod,我们可以使用@RequestMapping(value="/user", method=RequestMethod.GET)比如这样的注解形式,让URL映射到对应的控制器,不过为了更好的支持REST风格的开发,spring之后还提供了@GetMapping,@PostMapping,@PatchMapping,@DeleteMapping
通过@RequestMapping,@GetMapping等注解可以定位到指定的控制器方法上,通过注解@Pathvariable能够将URL参数获取,通过@RequestBody可以讲请求体为json格式的字符串转为java对象。
加载全部内容