我想实现REST端点以确定是否可以关闭特定项目。从REST设计的角度来看,我该如何正确地做到这一点?
/ items / canbeclosed - 听起来很难看
可能像
/ items / status但我已将状态端点用于其他目的
答案 0 :(得分:2)
从REST设计的角度来看,我该如何正确地做到这一点?
REST并不关心您为URI使用的拼写。
考虑现在项目的真实情况可能会有所帮助,而不是考虑哪些行为是可行的。例如,如果项目“可以关闭”因为它们已“完成”,那么/items?completed
或/items/completed
或甚至'/ completedItems'可能是合理的拼写。
或者,也许这些是坐在任务队列中的任务,为不同的阶段设置不同的队列。所以像/stages/closeItem/tasks
这样的东西可能是正确的。
与所有REST一样,您的试金石将您的API想象成一个网站。如果您必须导航到网页以访问此信息,那么网页的标识符是什么?你去吧。
答案 1 :(得分:1)
根据您的具体要求,您有几种不同的可能性。
要获取特定项目是否可以关闭,请检索该项目并有一个回答此问题的字段:
GET /items/{itemNumber}
{
"canBeClosed": true,
...
}
您还可以为该特定字段使用子资源:
GET /items/{itemNumber}/can-be-closed
true
这也是" resty"但它只对某些边缘情况有帮助。您不希望通过网络拨打每一小部分信息。这会导致性能不佳。
请注意,上述解决方案指向由其ID标识的单个资源。有关收集资源和项目资源之间的区别,请查看restapitutorial.com。
也许您想获得可关闭的项目列表:
GET /items?closable=true
在这种情况下,我更喜欢使用矩阵参数:
GET /items;closable=true
Matrix params非常类似于查询参数,除了它们绑定到特定路径元素而不是最终结果。所以你可以这样:
GET /customers;country=Germany/orders
将返回居住在德国的客户的订单。对于查询参数,这是不可能的,因为它们总是被添加到结尾。所以在我看来,它们更适合分页和排序,而矩阵参数更适合过滤。