在我的资源模型中,我有一个“订阅”资源。它会经历生命周期状态,如“取消订阅” - >“订阅待处理” - >“订阅” - >“取消订阅待处理” - >“取消订阅”。发布到控制器资源 - 控制器的ID是控制器URI还是POST参数的一部分?
为了允许客户订阅或取消订阅订阅,我打算公开两个控制器资源(称为“sub”和“unsub”)用于订阅/取消订阅订阅,每个接受POST请求将同步放置目标订阅资源转换为适当的“等待”状态,并异步执行额外的工作以将订阅置入“订阅”或“未订阅”状态。
我可以想到几种方法让客户端在向“sub”或“unsub”发出POST请求时指定目标订阅。我可以把目标预订ID为URI,就像这样:
/订阅/ {subscription_id} /子 也许 /子/ {subscription_id}
[注:在URI露出订阅ID不会出现安全问题,我的应用程序]
或者,我可以让订阅ID的POST参数去:
/子
思考哪种方法最好?如果你更喜欢URI方式,你更喜欢哪种URI风格,为什么?
注意:已取消订阅的订阅随后可能会重新订阅,因此“取消订阅”操作不等同于删除订阅资源。
感谢您的反馈意见。关于术语“订户”的含糊不清的好处;我会重新考虑这个名字。关于您的要点:对于我的应用程序,取消订阅不是删除 - 订阅在理论上可以在未来重新订阅。我没有提到这个问题。我最初认为要将“action = subscribe”或“action = unsubscribe”这样的表单参数传递给订阅资源,但从我读到的内容来看,这相当于隧道,这让人望而却步。这就是我带领两个控制器资源的方向。 – 2012-03-13 18:18:08
注意:我更新了原始问题以重命名控制器资源,并澄清取消订阅!=删除。 – 2012-03-14 12:45:54
为了响应您的编辑:在我的应用中,订阅通过POST创建到订阅集合。在预订操作的订阅资源上使用POST和取消订阅操作的PUT似乎不一致;两者的动词似乎都是可取的。我使用PUT来更改订阅的状态(不包括生命周期状态),例如改变名字。然而,我认为订阅/取消订阅是作为操作而不是状态改变(尽管状态受到影响),所以我倾向于POST,但是试图避免隧道,因此控制器资源。 – 2012-03-14 16:53:06