可以将特定项目关闭REST API

时间:2017-06-30 11:01:48

标签: rest api

我想实现REST端点以确定是否可以关闭特定项目。从REST设计的角度来看,我该如何正确地做到这一点?

/ items / canbeclosed - 听起来很难看

可能像

/ items / status但我已将状态端点用于其他目的

2 个答案:

答案 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

将返回居住在德国的客户的订单。对于查询参数,这是不可能的,因为它们总是被添加到结尾。所以在我看来,它们更适合分页和排序,而矩阵参数更适合过滤。