自定义参数

时间:2016-02-13 20:37:02

标签: api rest routes

我有一个支持DELETE操作的API方法:

api/jobs/:id

Job模型上的字段之一是reference值(与:id值不同)。

我需要能够公开另一个DELETE操作,允许第三方通过引用字段删除Job。第三方不了解作业:id,因此需要使用他们确实知道的reference字段。

揭露这个的最佳方法是什么?我应该如何处理这条路线?

谢谢!

1 个答案:

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