我有一个支持DELETE操作的API方法:
api/jobs/:id
Job
模型上的字段之一是reference
值(与:id
值不同)。
我需要能够公开另一个DELETE操作,允许第三方通过引用字段删除Job。第三方不了解作业:id
,因此需要使用他们确实知道的reference
字段。
揭露这个的最佳方法是什么?我应该如何处理这条路线?
谢谢!
答案 0 :(得分:0)
我认为您的问题不是关于实施,而是关于RESTful架构的风格,否则请自由填写以纠正我...
所以基本上Buddy Yaussy的评论是完全正确的。您有两种选择:
1)通过两个不同的标识符访问实体
GET/DELETE api/externaljobs/:reference
和
GET/DELETE api/jobs/:id
在RESTful API中,每个实体必须具有至少一个标识符才能被寻址,因此拥有两个标识符完全没有问题。
2)让外部客户端搜索正确的工作
根据您的技术和业务限制,您可以规定外部客户端必须先搜索正确的作业才能删除它。
这可以通过
工作GET api/jobs?reference=1337
得到结果:
<job>
[...]
<id>1234</id>
</job>
以及该调用的结果
DELETE api/jobs/1234
(您也可以在作业集合上允许DELETE
,因此外部客户端可以调用DELETE api/jobs?reference=1337
并且不会有两个发送两个调用)
我个人更喜欢第二种方法,因为它看起来更清晰,因为你想要的一切都可以使用基本的HTTP方法,你仍然只有一个作业实体的表示,但它们都可以在RESTful API和我认为依赖于“REST设计品味”的风格。
以下是另外三个要研究的问题:
RESTful API behavior for entitys with two independent primary keys
REST API DESIGN - Getting a resource through REST with different parameters but same url pattern
Different RESTful representations of the same resource