karloku
2015-10-03 04:01:47 +08:00
其实参考了 elasticsearch 的 api 设计方式, 觉得 uri 里包含动词也不是一件天崩地裂的事情, 也就是在 crud 之外.
比如我有一串资源是 /items, 这些 items 是支持排序的, 那么我排序的接口应该怎么设计呢.
PUT /items
{
"_action": "reorder",
"params": {...}
}
这样似乎就会污染 update 这个街口, 变得很复杂
把路由放到
PUT /items/orders
操作实际上不存在的 orders 资源. 总觉得有种自欺欺人的感觉. 这种做法最常见的是用在搜索或者点赞上. 但是前者的确因为请求而产生了一次性的资源. 而后者也是可以勉强算是嵌套在某个资源内部的资源.
或者是针对所有资源进行
PUT /items/x
去更新每一个 item 的 order. 这个好像 restful 了, 不过使用起来会变的非常麻烦...
最后尝试下来做下来还是包含一个动词的 URI, 会让 api 的语义更清楚:
POST /items/_reorder