2012-11-13 163 views
3

我正在構建遵循REST架構風格的Web服務。我正在使用JAX-RS使其更容易。然而,這個問題並不關心一項技術,而是正確使用資源路徑。REST風格的web服務中的資源路徑

我在我的應用程序中創建了一些資源,例如Quiz,Question和QuestionFeedback。

我已創建的路徑如

/quiz /question/1

等。現在,我已經看到了一些暴露路徑的Web服務API,例如/approved/questions/approved。經過認可的部分路徑看起來更像是問題可能具有的屬性(在這種情況下),我想知道這是否正確,以及在將邊界設置爲請求參數和部分路徑之間的界限?

,並就OK暴露在以某種方式在這種情況下Question暴露了預期的資源之一,你的系統,如Web服務的路徑,而是通過除了像正常/questions路徑/approved的路徑?什麼是規則,這應該是怎樣的?

如果我沒有人問我會創建一個像/questions?type=approved這樣的路徑:GET。

因爲批准的不是我係統中的資源。或者可以創建暴露資源的路徑,但不要直接使用資源名稱。

+2

使用'/ questions?type = approved'。爲什麼不選擇顯而易見的方式去? – 2012-11-13 14:57:13

+1

我會像@Tichodroma建議的那樣做。 'approved'是'question'的一個屬性,所以它是有道理的。 – Alex

+0

但我想知道何時以及如何決定。如果我認爲是正確的。 – LuckyLuke

回答

2

您在問是否只能通過附加信息理解路徑。那麼,他們不是錯誤但我不會選擇他們。

你的問題是(在我的文字):

給我所有的都被批准了額外的功能問題。

這可以歸結爲兩個步驟:

第一步

獲取所有問題。

GET /questions 

第二步

其中只得到那些已被批准。

GET /questions?approved=true 

這很自然。

相比之下,爲什麼第二步導致/approved?這與/questions有什麼關係?沒有明顯的方法來回答這個問題。雖然在技術上可以使用像/pink-elephants這樣奇怪的路徑,但這應該轉化爲「給我所有批准的問題」,但這不是我推薦的。

+0

這可能有點奇怪的例子。假設你有一個測驗資源'/測驗'。然後你想要所有批准的問題,那麼你會使用'/ quiz/questions?type = approved'權限,而不是'/ quiz/approved',儘管它是允許的,但它使得一個奇怪的外觀API?那是對的嗎? – LuckyLuke

+0

爲此,您將擁有'/ quize/42/questions?type = approved':給我所有經過批准的測驗42的問題。是的,我會推薦這個:問題屬於* one *測驗,可以批准。 – 2012-11-13 15:14:20

+0

所以資源是路徑,它們可能具有的屬性是..支付並且不應該在路徑中。 – LuckyLuke