对Restful的理解

桃扇骨 2022-05-09 05:14 334阅读 0赞

什么是Restful?

Restful是Roy Thomas Fielding这位大神在他的博士论文文中提出来。由于其超前的思想,在当时并未引起过多的注意。

直到近几年来,大概08年以后开始慢慢流行起来。

restful是一种设计思想。是Representational State Transfer的英文缩写:表现层状态转换或者表述型状态转换。这里省略了主语,是资源的表现型状态转换。

资源在网络中的体现就是URI。我们平时网上冲浪其实就是获取各种URI资源。获取的方式最简单的就是在浏览器地址栏输入URL。例如要访问百度资源:htttp://www.baidu.com

没有出现rest风格的时候,我们在编写javaweb程序时,例如要操作数据库里用户信息,我们的URL可以能会设计成:

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 删除用户信息

可以发现URI都是一样的,改变的只是客户端的请求方式而已,这就是restful风格的服务端无状态性(个人肤浅理解,更深入理解还需多实践才能懂得)。

Restful风格接口实现

  1. @RestController
  2. @RequestMapping("new/user")
  3. public class UserController {
  4. @Autowired
  5. private UserService userService;
  6. /**
  7. * 查询
  8. * @param id
  9. * @return
  10. */
  11. @RequestMapping(value="{id}",method=RequestMethod.GET)
  12. public ResponseEntity<User> queryUserById(@PathVariable Long id){
  13. try {
  14. User user=this.userService.queryById(id);
  15. if (user == null) {
  16. return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
  17. }
  18. return ResponseEntity.status(HttpStatus.OK).body(user);
  19. } catch (Exception e) {
  20. e.printStackTrace();
  21. }
  22. return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
  23. }
  24. /**
  25. * 新增
  26. * @param user
  27. * @return
  28. */
  29. @RequestMapping(method=RequestMethod.POST)
  30. public ResponseEntity<Void> insertUser(User user){
  31. try {
  32. Boolean bool=userService.save(user)==1;
  33. if (bool) {
  34. return ResponseEntity.status(HttpStatus.CREATED).build();//HttpStatus.CREATED:201,build();没有返回值用build.
  35. }
  36. } catch (Exception e) {
  37. e.printStackTrace();
  38. }
  39. return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();//HttpStatus.INTERNAL_SERVER_ERROR:500
  40. }
  41. /**
  42. * restful风格修改资源接口
  43. * @param user
  44. * @return void
  45. */
  46. @RequestMapping(method=RequestMethod.PUT)
  47. public ResponseEntity<Void> updateUser(User user){
  48. try {
  49. Boolean bool=userService.update(user)==1;
  50. if (bool) {
  51. return ResponseEntity.status(HttpStatus.NO_CONTENT).build();//HttpStatus.NO_CONTENT:204,build();没有返回值用build.
  52. }
  53. } catch (Exception e) {
  54. e.printStackTrace();
  55. }
  56. return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
  57. }
  58. /**
  59. * 删除
  60. * @param id
  61. * @return
  62. */
  63. @RequestMapping(method=RequestMethod.DELETE)
  64. public ResponseEntity<Void> deleteUser(long id){
  65. try {
  66. Boolean bool=userService.deleteById(id)==1;
  67. if (bool) {
  68. return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
  69. }
  70. } catch (Exception e) {
  71. e.printStackTrace();
  72. }
  73. return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
  74. }
  75. }

HTTP响应状态码

70

响应结果示例

70 1

SpringMVC框架很强大,原生态的支持了restful风格

例如:@RequestMapping

  1. @ResponseBody
  2. @PathVariable

发表评论

表情:
评论列表 (有 0 条评论,334人围观)

还没有评论,来说两句吧...

相关阅读

    相关 微服务和RESTful理解

    微服务的理解 最近这一个月,按照leader浩哥的要求,在项目中应用了微服务和restful架构,受益颇多,不但是接触了一个新思想而且立马进行实践,这种感觉还是很好的。现

    相关 RESTful 理解

    1 协议HTTPs 2 域名选用 3 版本(考虑兼容问题) 4 路径–资源 5 方法选用 GET POST PUT PATCH DELETE 6 过滤信息

    相关 Restful理解

    什么是Restful? Restful是Roy Thomas Fielding这位大神在他的博士论文文中提出来。由于其超前的思想,在当时并未引起过多的注意。 直到近几年