2010-09-18 116 views
2

我正在用ZF 1.10.8構建RESTful API服務,因爲這是新手,它在處理ZF路由時有點混亂。REST Zend框架,如何路由基於模塊的版本控制和Api Key

我需要的版本,API_KEY,並在URL響應格式,是這樣的:

/:版本/:response_format /:API_KEY /:控制器... /1.0/json/1234567890/articles/

該版本是基於默認最新版本的模塊

如何完成此操作?

回答

4

版本控制並不像在URI中放置/ v1 /那樣簡單。 事實上,這使得API非REST。

要正確執行REST,每個資源(客戶端要訪問的東西)都有且只有一個URI。 該URI保持不變v1 & v2 & v2;您將該資源呈現給客戶的方式有哪些變化。

  • 你怎麼知道他們想要哪個版本?他們將其設置爲請求標題。
  • 你怎麼知道他們想要的格式(json,xml,html,wml等)?他們將其設置爲請求標題。
  • 你怎麼知道他們想要哪種語言?請求標題。

需要記住的是他們所請求的URI保持不變。 由於每個資源只有一個URI,因此您永遠不需要URI中的方法名稱。

這是不好: - /編輯/位/ 43

相反,你應該使用正確的HTTP方法 - 創造一個地方,做一個HTTP POST到/地方 - 查看位置43,做的HTTP GET來/地點/ 43 - 更新場所43中,執行一個HTTP PUT到/地點/ 43 - 刪除的地方43,做一個HTTP DELETE至/地點/ 43

當返回到響應客戶端,您還應該包含客戶端可能要檢索的所有相關位數據的URI。 REST的一個原則是,一旦客戶端連接,它就可以在API本身內找到它需要的所有URI。它只需要知道一個URI就可以進入系統,並且從那時起,所有必需的URI都會在響應中提供。這樣做的好處是允許您隨意更改URI,因爲客戶端永遠不應該關注它們是什麼......只是根據需要使用它們(即客戶端知道URI指向的內容,而不知道它指向的地方)。

最後,請記住,您不希望將成功/錯誤標記發送爲xml或json。它們應該作爲HTTP響應代碼發回。有創造一個代碼,一個用於刪除和一個用於更新等

這裏是REST一般來說,做REST一些精彩的文章與Zend框架具體爲:

我特別推薦weierophinney.net上的文章,瞭解實現細節。

0

這只是一個想法,但我會避免讓代碼知道關於該版本的任何信息。 (除了它的當前版本號是什麼)。相反,我會將/:版本/你的URI的一部分作爲你的重寫方案的基礎。

所以不是基本是這樣的: 「http://www.example.com/」

這將是: 「http://www.example.com/1.0/」

通過這種方式,您可以簡單地在服務器上分別設置不同的源代碼管理分支,並且您的Web服務器可以確定將URI路由到哪個版本。然後,您的代碼不需要任何有關如何處理不同版本的知識,並且您的代碼庫不會受到大型交換語句的污染,無法根據版本執行不同的操作。

爲了讓它更安全一點,您可以要求在標題中包含版本號。然後,您的代碼可以檢查標題中的版本號是否與其路由到的代碼的版本號匹配,如果它們不匹配則會引發錯誤。

例如:發送一個GET到http://www.example.com/2.0/並在1.0頭中的版本號會引發「錯誤的版本」錯誤。你的代碼只需要知道header_version!= current_version,所以在你發佈新版本時不需要改變。