restful理解
正如java面向对象一样,restful面向资源,其实也可以面向对象的路径版本。是一种对路径的设计。
正因为面向资源的设计,所以是路径上只有名词,而请求方式代表动作
一.动作侧重点
- put 增加或者修改 偏重于修改
- post 增加 或者修改 偏重于新增
- delete 删
- get 获得
2021-08-12
二.put和post的区别
put和post对于更新资源,put更为强大,如果指定的资源不存在,可以创建资源.
而创建资源,put是幂等的,多次操作以最后一次操作为准,多次重复操作都只会有同一个影响,以数据库为例,put创建资源时需要指定id,即没有id时创建,有id时更新。
而post创建资源,不是幂等的。以数据库为例,创建资源不能指定id,多次操作都是创建.如果指定id时,就一定是已有资源的更新.
总结:post只能更新已有资源,put创建资源是幂等的。
2021-08-12
三,思考问题
如何来表示对象的多个动作?
比如用户的冻结和解冻如何表示.
很明显/user put方式无法解决这个问题.
但是/user/id/unfreeze 和/user/id/freeze put违反了restful的名词资源设计原则,又回到最初的设计了
既然是动作,那能不能加一个move的请求方式来用/user 这样多个动作会有很多请求方式,会导致不好扩展
目前我能找到暂时的解决的办法是动作(增删查改)如果固定,找解冻和冻住的是用户的那种资源.
用//user/id/status put请求,通过body参数的不同来解冻和冻结客户,即用户状态资源的修改。
四.参考资料
https://blog.csdn.net/longge9999/article/details/84745648
https://blog.csdn.net/mian_CSDN/article/details/84099349?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control
https://www.baidu.com/s?ie=UTF-8&wd=%E5%B9%82%E7%AD%89
https://www.runoob.com/w3cnote/restful-architecture.html
https://www.iteye.com/problems/75742
https://zhuanlan.zhihu.com/p/68103094
https://www.ruanyifeng.com/blog/2014/05/restful_api.html