实现API Rest服务我面临的问题是如何/在url签名中传递API版本。
通过阅读,我决定传递这样的版本
http://mydomainservice.tld/api/version/entity..。
关于将版本视为可选并解析引用最新API版本的请求,这将是意图:
http://mydomainservice.tld/version/entity..。
问题不在于如何管理/安排API rest中的版本控制,而在于是否有机会实现路由规则以在URI中添加可选参数:
正在运行:
Route::group(['prefix' => 'api/'], function(){
Route::get('{v}/subscribers', 'APIRequestController@show');
Route::get('subscribers', 'APIRequestController@show);
});
对于两个调用,如:
http://mydomain.tld/api/subscribershttp://mydomain.tld/api/1/subscribers
但是我想用一条规则来解决它:
Route::get('{v?}/subscribers', 'APIRequestController@show');
但是如果我试图发出这样的请求,第二条规则本身就不起作用了:
http://mydomain.tld/api/subscribers这是不可能做到的干净。每个路由参数都需要某种值,当它出现在URL的末尾时可以为null,但不能出现在URL的中间。
尽管如此,有一个超级肮脏的解决方案:Route::get('{v}subscribers', 'APIRequestController@show')->where('v', '([0-9/]+)?');
现在你可以访问"yourdomain/api/1/subscribers"以及"yourdomain/api/subscribers",但要确保你的控制器中v
参数的默认值。而且你已经剪掉了带有参数的斜杠。
最后:不要这样做,最好分开写两行,尽量保持代码干净,而不是这样做。