REST是英文representational state transfer(表象性状态转变)或者表述性状态转移;Rest是web服务的一种架构风格;使用HTTP,URI,XML,JSON,HTML等普遍流行的标准和协议;轻量级,跨平台,跨语言的架构设计;它是一种设计风格,不是一种标准,是一种思想java
Rest架构的主要原则web
网络上的全部事物都被抽象为资源spring
每一个资源都有一个惟一的资源标识符json
同一个资源具备多种表现形式(xml,json等)restful
对资源的各类操做不会改变资源标识符网络
全部的操做都是无状态的mybatis
符合REST原则的架构方式便可称为RESTful架构
什么是Restful:app
对应的中文是rest式的;Restful web service是一种常见的rest的应用,是遵照了rest风格的web服务;rest式的web服务是一种ROA(The Resource-Oriented Architecture)(面向资源的架构).post
为何会出现Restful
在Restful以前的操做:
http://127.0.0.1/user/query/1 GET 根据用户id查询用户数据
http://127.0.0.1/user/save POST 新增用户
http://127.0.0.1/user/update POST 修改用户信息
http://127.0.0.1/user/delete GET/POST 删除用户信息
RESTful用法:
http://127.0.0.1/user/1 GET 根据用户id查询用户数据
http://127.0.0.1/user POST 新增用户
http://127.0.0.1/user PUT 修改用户信息
http://127.0.0.1/user DELETE 删除用户信息
以前的操做是没有问题的,大神认为是有问题的,有什么问题呢?
你每次请求的接口或者地址,都在作描述,例如查询的时候用了query,新增的时候用了save,其实彻底没有这个必要,我使用了get请求,就是查询.使用post请求,就是新增的请求,个人意图很明显,彻底没有必要作描述,这就是为何有了restful.
如何使用:
SpringMVC实现restful服务:
SpringMVC原生态的支持了REST风格的架构设计
所涉及到的注解:
--@RequestMapping
---@PathVariable
---@ResponseBody
package cn.itcast.mybatis.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import cn.itcast.mybatis.pojo.User; import cn.itcast.mybatis.service.NewUserService; @RequestMapping("restful/user") @Controller public class RestUserController { @Autowired private NewUserService newUserService; /** * 根据用户id查询用户数据 * * @param id * @return */ @RequestMapping(value = "{id}", method = RequestMethod.GET) @ResponseBody public ResponseEntity<User> queryUserById(@PathVariable("id") Long id) { try { User user = this.newUserService.queryUserById(id); if (null == user) { // 资源不存在,响应404 return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); } // 200 // return ResponseEntity.status(HttpStatus.OK).body(user); return ResponseEntity.ok(user); } catch (Exception e) { e.printStackTrace(); } // 500 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } /** * 新增用户 * * @param user * @return */ @RequestMapping(method = RequestMethod.POST) public ResponseEntity<Void> saveUser(User user) { try { this.newUserService.saveUser(user); return ResponseEntity.status(HttpStatus.CREATED).build(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // 500 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } /** * 更新用户资源 * * @param user * @return */ @RequestMapping(method = RequestMethod.PUT) public ResponseEntity<Void> updateUser(User user) { try { this.newUserService.updateUser(user); return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); } catch (Exception e) { e.printStackTrace(); } // 500 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } /** * 删除用户资源 * * @param user * @return */ @RequestMapping(method = RequestMethod.DELETE) public ResponseEntity<Void> deleteUser(@RequestParam(value = "id", defaultValue = "0") Long id) { try { if (id.intValue() == 0) { // 请求参数有误 return ResponseEntity.status(HttpStatus.BAD_REQUEST).build(); } this.newUserService.deleteUserById(id); // 204 return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); } catch (Exception e) { e.printStackTrace(); } // 500 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } }
HTTP相应状态码:
总结:
restful就是旧技术,新风格.以前写过一篇关于restful接口的博客:【Restful接口】restful接口的两种使用方式--------------------- 做者:陈晓婵 来源:CSDN 原文:https://blog.csdn.net/chenxiaochan/article/details/73716617 版权声明:本文为博主原创文章,转载请附上博文连接!