想咨询一下不使用 dingo/API 如何实现路由的版本控制?
Route::get('v1/xxx', 'xxx@xxx');
Route::get('v2/xxx', 'xxx@xxx');
这种方式也可以实现版本控制,不过不太好。
希望能通过header来实现版本控制,只是不知道如何实现,求帮助。
理想的效果是 同一个路由,header不一样可以走入两个不同的控制器。
這部分因為我們公司要實作微服務,因此我有一些初步的想法,但未經過實作,供您參考看看
我們知道 Laravel 的 route 是在
RouteServiceProvider
中定義的其中,我們會看到這樣一段程式碼
也就是說,只要我們能改變
$this->namespace
就可以改變不同 API 版本再往下深入,會發現
map
這個方法被調用是在Illuminate\Foundation\Support\Providers\RouteServiceProvider
中的boot
方法而這個
boot
方法被調用的時機又要回到我們的RouteServiceProvider
也就是說,只要我們能在
parent::boot()
執行之前,修改$this->namespace
的值就能動態切換版本基於以上,我們可以這樣做
因為我還沒進入實作,一直沒把這篇文章發出來
若樓主有成功的話再告訴我,我發成教學文跟大家分享?
@leochien 感谢你的回答,还有个问题。
請問 v2 的路由 v1 不存在的話,拋出 404 異常不是很正確的回應嗎?
不過您的方案也蠻好的,將每個版本拆分文件
但 route:catch 的話,因為我沒有很深入了解他背後的實現方式,我也不知道這樣做會不會有什麼影響
@leochien 404是对的,我说错了,按照你一开始的方案 ,是所有版本共用路由,那样会抛出 class not found 不是404。
@cherrytools 確實是有您講的問題,沒有想到那麼深入?,看來我們的微服務之路還有很多挑戰?