在我决定提出这个问题之前,我已经搜索了很长时间才得到答案,但我没有找到任何令人满意的答案.(例如,最好的SOAP/REST/RPC Web API的示例?为什么你喜欢它们?它们有什么问题?)
问题实际上很简单.我有一个名为Account的对象/资源.我的REST API支持所有带有GET,POST,PUT和DELETE的CRUD,并且具有正确的错误处理,状态代码等.
另外,我想公开一个API("命令")来激活和停用所选的帐户资源.即使"isActive"是帐户的属性,我也不想仅使用整个帐户的CRUD更新.
我知道很容易违反REST原则并使用如下设计进行RPC样式设计:
PUT/api/account /:accountId/activate
PUT/api/account /:accountId/deactivate
那么这个用例的最佳解决方案是什么?
我目前的想法是使用像这样的PUT和DELETE动词(将其视为子资源),如http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#restful:
PUT/api/account /:accountId/isActive //用于激活
DELETE/api/account /:accountId/isActive //用于停用
你有什么解决方案?
Mic*_*l-7 12
如何为要修改的功能提供名词 - 在此实例中为"状态".这将成为父实体的子资源.因此,对于您的情况,我将按如下方式对URI进行建模:
/api/accounts/{accountId}/status
Run Code Online (Sandbox Code Playgroud)
如果'update'语义是幂等的,则PUT将是最合适的,否则需要是POST(例如,如果涉及nonce并且服务无效).实际有效载荷将包括新状态的描述符.
请注意,我复制了"帐户",因为您可以拥有多个帐户,但状态是单数的,因为您的帐户只能有一个州.
POST 方法将创建资源“帐户”。Active 可以看作是资源“帐户”的属性之一。因此它应该是一个 PUT 请求。
我会说即使停用也必须是 PUT 请求,因为帐户资源仍然存在。
要激活帐户,您可以在资源上设置属性。那是:
/api/account/{accountId}?activate=true
Run Code Online (Sandbox Code Playgroud)
停用:
/api/account/{accountId}?activate=false
Run Code Online (Sandbox Code Playgroud)
对帐户的 GET 请求将返回一个包含激活值的 JSON。
DELETE 请求应完全删除帐户资源。
| 归档时间: |
|
| 查看次数: |
11195 次 |
| 最近记录: |