2016-02-13 14 views
1

REST API我具有支持一個DELETE動作的API方法:定製參數

api/jobs/:id 

一旦在Job模型的字段是一個reference值(不一樣的:id值)。

我需要能夠公開另一個DELETE動作,它允許第三方通過引用字段刪除作業。第三方將不知道工作:id,因此需要使用他們確實知道的reference字段。

什麼是揭露這種最好的方式?我應該如何處理這條路線?

謝謝!

+0

您使用的超薄或您的API一些其他的框架? –

+0

換句話說,你用什麼來構建REST接口或Web服務? PHP? Node.js的?別的東西? –

+0

嗨@BuddyYaussy它使用Rails構建。 – cman77

回答

0

我認爲你的問題不是關於執行而是REST式建築風格,否則填指正...
所以基本上好友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並且不會有兩個sen d兩個調用)


我個人比較喜歡第二種方法更多,因爲它看起來乾淨多了,因爲你想,一切皆有可能與基本的HTTP方法,你仍然有工作單位的只是一種表示,但兩者的它們在RESTful API中是可以接受的,並且依賴於我認爲的「REST設計品味」風格。

這裏有三個其他SO問題尋找到:
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

+0

感謝@羅伯特如果我去'GET/DELETE api/jobsbyreference /:reference'之類的東西我想這將是一個完全不同的控制器? – cman77

+0

,這取決於Rails或Rails框架如何處理這些HTTP調用。在一些框架中,可以向一個控制器添加不同的路徑。如果可能的話,我寧願這樣做,因爲兩條路線應該完全相同或不相同?如果在框架中不可行,我會盡量不要有太多重複的代碼,並讓兩個控制器儘可能地共享盡可能多的邏輯。 – Robert