在RESTful看来, 删除肯定是发DELETE请求, 删除一条记录没什么问题, 直接把id附在路径上, 但如果要做批量删除, 路径里不能放一个数组, 该如何实现呢?

这时想起一个知识盲点: DELETE请求能带请求体吗?

答案是可以, HTTP 1.1没规定DELETE请求不能带请求体, 但同时又规定, 没规定不能带请求体的, 收到这种请求时默认给你忽略掉请求体。绕了一圈, 简直然并卵, 结论就是不要在DELETE请求带请求体。

那有人就直接改POST请求出去了, 这时又有点担心不够RESTful, 毕竟是删除啊...

我们公司的处理办法是, 如果是在分页的页面上全选, 毕竟选中的记录数有限, 可以把ids的数组转字符串放在DELETE请求后, 后台按照分隔符解析还原成数组, 然后处理一个个id的删除请求。这种方法一般不至于长度撑爆URL, 但也使用不多。另外一种就是改发PUT请求, 这就意味着不是要对记录做删除, 而是更新处理。从PUT的请求体中拿ids数组,将每个id实体在数据库中有对应的标志位置为0表示删除, 这种逻辑删除是比较常见的解决办法, 又不至于违背RESTful风格。

回头一想, 增删改本来就可以都看作更新, 其实说到底还是POST那一套。RESTful在统一规范路径的格式上做出贡献, 让请求的URL不再那么天马行空, 但还是有需要完善的地方。

据说HTTP 2.0在2013年8月就开始测试, 只适用于https协议,而http://网址将继续使用HTTP/1。大部分浏览器厂商在2015年底都做到了支持HTTP/2,但它的主要目标是改进传输性能,实现低延迟和高吞吐量。HTTP的高层协议语义并没有因为版本升级而受影响,所有HTTP请求头、请求体,以及它们的使用场景都仍然沿用。