2013-08-29 34 views
2

我正在使用Laravel創建一個版本化的JSON API,然後通過AngularJS訪問我的頁面。目前我使用版本控制器返回JSON(最終我計劃實現依賴注入&版本化的存儲庫)。PHP命名空間約定用於版本化API?

我試圖命名空間我的控制器格式App\Controllers\API\v1.0,但是當我訪問本地主機:800/API/1.0 /公司在我的瀏覽器,在返回JSON,我通知Class App\Controllers\API\v1.0\CompaniesController does not exist 。我猜這是因爲.被解釋爲反斜槓之一?我可以通過將命名空間更改爲App\Controllers\API\v1App\Controllers\API\v1\v0來製作應用程序功能,但前者不允許進行正確的版本控制,而後者似乎有點...不雅觀。

我應該使用什麼約定爲我的命名空間充分地版本化我的API?任何意見,將不勝感激! :)

+0

試試'php composer dump-autoload'。你把這些控制器放在哪裏? PSR-0是否自動加載它們?或者他們在'app/controllers'目錄中? – fideloper

+0

我每次更改命名空間時都會使用'composer dumpautoload'。控制器存儲在'app/controllers/API/1.0/.'中。在我的'routes.php'中,我將控制器直接引用爲'App \ Controllers \ API \ v1.0 \ CompaniesController'。路由和控制器的工作,但不是與我想要的名稱空間或我想要的名稱空間 –

回答

3

API只能在外部使用主要版本。按照最佳實踐semantic versioning,當您向項目引入向後不兼容的更改時,主要版本會發生變化。

如果您只是添加功能,或以向後兼容的方式修改現有功能,那麼您只需執行此操作,並且不會影響現有的使用者(不過,如果需要,他們可以使用新的更改) 。您的API可以將1.0.0版本更改爲1.1.0 內部版本,但暴露給您的客戶的版本仍然是「v1」。

如果您只是修補錯誤,同樣適用。從1.0.1更改爲1.0.2 內部,但API應停留在「v1」。

現在,如果您重命名/刪除資源或進行其他一些會破壞現有客戶端的重大更改,那麼您的內部版本可能會從1.2.0升級到2.0.0,因爲向後兼容需要重大版本更改。因此,新的主要版本必須作爲「v2」暴露給API的使用者。

因此,爲了保持這一點,您的名稱空間和網址應該僅反映主要版本(例如「v1」),並且您應該確保在主版本中不會破壞向後兼容性。