我正在创建一个只能通过POST
使用的API。我计划使用多个版本的API,因此当前使用 v1 作为网址的一部分。
现在,如果通过GET
,PUT
或DELETE
进行API调用,我想返回失败响应。为此,我使用Route::match()
,工作在下面的代码中完全正常:
Route::group(['namespace'=>'API', 'prefix' => 'api/v1', 'middleware' => 'api.v1'], function() {
Route::match(['get', 'put', 'delete'], '*', function () {
return Response::json(array(
'status' => 'Fail',
'message' => 'Wrong HTTP verb used for the API call. Please use POST.'
));
});
// User
Route::post('user/create', array('uses' => 'APIv1@createUser'));
Route::post('user/read', array('uses' => 'APIv1@readUser'));
// other calls
// University
Route::post('university/create', array('uses' => 'APIv1@createUniversity'));
Route::post('university/read', array('uses' => 'APIv1@readUniversity'));
// other calls...
});
但是,我注意到我可以对路线进行分组,将API版本和调用特定实体分开,例如user
和university
:
Route::group(['namespace'=>'API', 'prefix' => 'api'], function() {
Route::match(['get', 'put', 'delete'], '*', function () {
return Response::json(array(
'status' => 'Fail',
'message' => 'Wrong HTTP verb used for the API call. Please use POST.'
));
});
/**
* v.1
*/
Route::group(['prefix' => 'v1', 'middleware' => 'api.v1'], function() {
// User
Route::group(['prefix' => 'user'], function() {
Route::post('create', array('uses' => 'APIv1@createUser'));
Route::post('read', array('uses' => 'APIv1@readUser'));
});
// University
Route::group(['prefix' => 'university'], function() {
Route::post('create', array('uses' => 'APIv1@createUniversity'));
Route::post('read/synonym', array('uses' => 'APIv1@readUniversity'));
});
});
});
上方代码中的Route::match()
不起作用。当我尝试访问任何API调用时,例如GET
,匹配被忽略,我得到 MethodNotAllowedHttpException 。
我可以让第二个路径结构再次与Route::match()
一起使用吗?我试图在组中的任何地方放置它。将Route::match()
放在孔结构之外并将路径设置为'api / v1 / *'也会起作用。
答案 0 :(得分:0)
如果您使用post()
功能,则不需要拒绝其他动词。
您可以做的是为MethodNotAllowedHttpException
创建一个监听器并显示您想要的内容。或者您也可以在路线组末尾使用any()
功能来处理未定义的所有路线。