实现API Rest服务我面临url签名中的方式/位置传递API版本的问题。
通过阅读我决定通过像
这样的版本http://mydomainservice.tld/api/version/entity ...
关于将版本视为可选版本并解析引用最新API版本的请求,这将是意图:
http://mydomainservice.tld/version/entity ...
问题不是关于如何在API休息中管理/安排版本控制,而是如果有机会实现路由规则以在URI中添加可选参数,那就更多了:
这是有效的:
Route::group(['prefix' => 'api/'], function(){
Route::get('{v}/subscribers', 'APIRequestController@show');
Route::get('subscribers', 'APIRequestController@show);
});
对于这两个电话:
http://mydomain.tld/api/subscribers http://mydomain.tld/api/1/subscribers
但我想在一条规则中解决它:
Route::get('{v?}/subscribers', 'APIRequestController@show');
但如果我尝试与以下请求联系,那么第二条规则本身就不会起作用:
答案 0 :(得分:2)
干净利落是不可能的。每个路由参数都需要某种值,当它在URL的末尾时可以为null,但不能在URL的中间。
尽管如此,还有超级肮脏的解决方案:
Route::get('{v}subscribers', 'APIRequestController@show')->where('v', '([0-9/]+)?');
现在您可以访问“yourdomain / api / 1 / subscribers”以及“yourdomain / api / subscribers”,但请确保您的控制器中的v
参数具有默认值。而且你已经削减了参数附带的斜杠。
最后:不要这样做,最好写两个单独的行并尽可能保持代码干净,而不是这种魔法。