Rest ful 风格的api 我会带着你远行 2024-03-27 10:48 26阅读 0赞 ## REST ful ## 全称是Resource Representational State Transfer - ful * Resourse: 资源,即数据 * Representational: 表现形式的,例如json,xml等 * State: 状态 * Transfer: 转移 * ful:形容词后缀,标识xxx风格的 连起来就是数据资源的状态变化表现在api的一种风格 即前端向后端发出对数据的增删改查的请求路径 **传统的api** * 查询所有:GET /user/get/all 或者 GET /user/list * 根据id查询:GET /user?id=1 * 添加:POST /user/add * 修改:POST /user/update * 删除:GET /user/delete?id=1 或者 GET /user/remove?id=1 **使用RESTful** * 查询所有:GET /user * 根据id查询:GET /user/1 * 添加:POST /user * 修改:PUT /user * 删除:DELETE /user/1 通过比较,我们可以发现RESTful风格api的**优点**是 * 风格统一,不会出现delUser/deleteUser/removeUser各种命名的代码了 * 面向资源,一目了然,具有自解释性 * 充分利用 HTTP 协议本身语义 ### 注意 ### html的form不支持put和delete,只支持get和post 解决方法如下: 1. 使用javascript的ajax来发送put和delete 2. SpringMVC 提供了 **HiddenHttpMethodFilter** 帮助我们将 POST 请求转换为 DELETE 或 PUT 请求(较少使用,使用步骤如下) **HiddenHttpMethodFilter** 处理put和delete请求的条件: a.当前请求的请求方式必须为post b.当前请求必须传输请求参数\_method 满足以上条件,**HiddenHttpMethodFilter** 过滤器就会将当前请求的请求方式转换为请求参数\_method的值,因此请求参数\_method的值才是最终的请求方式 在web.xml中注册**HiddenHttpMethodFilter** <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 源码 if ("POST".equals(request.getMethod()) && request.getAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE) == null) { //this.methodParam="_method" String paramValue = request.getParameter(this.methodParam); if (StringUtils.hasLength(paramValue)) { String method = paramValue.toUpperCase(Locale.ENGLISH); if (ALLOWED_METHODS.contains(method)) { requestToUse = new HttpMethodRequestWrapper(request, method); } } } filterChain.doFilter(requestToUse, response); 后端 @RequestMapping(value = "/user" ,method = RequestMethod.PUT) public String insertUser(User user){ System.out.println("修改用户"+user); return "success"; } 前端 ![在这里插入图片描述][bd7233366d32426db593a5884c23ab10.png] > 注: > > 目前为止,SpringMVC中提供了两个过滤器:CharacterEncodingFilter和HiddenHttpMethodFilter > > 在web.xml中注册时,必须先注册CharacterEncodingFilter,再注册HiddenHttpMethodFilter > > 原因: > > * 在 CharacterEncodingFilter 中通过 request.setCharacterEncoding(encoding) 方法设置字符集的 > * request.setCharacterEncoding(encoding) 方法要求前面不能有任何获取请求参数的操作 > * 而 HiddenHttpMethodFilter 恰恰有一个获取请求方式的操作: > > String paramValue = request.getParameter(this.methodParam); [bd7233366d32426db593a5884c23ab10.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/27/e04fc6a26d1e42deb87bbfd9731d936c.png
还没有评论,来说两句吧...