我在Laravel 5.3上有一组当前正在工作的路线(它们被称为路线或web.php)。
例如:
Route::group(['middleware' => ['web','auth']], function () {
Route::get('/post-aaron', 'ProductsController@postaaron');
Route::post('/post-aaron', 'ProductsController@savepostaaron');
Route::get('/aarons-posted', 'ProductsController@aaronsposted');
Route::get('/aaron-board', 'ProductsController@aaronboard');
Route::get('/edit-aaron/{id}', 'ProductsController@editaaron');
Route::get('/edit-aaron', 'ProductsController@updatepostaaron');
});
我想制作RESTFUL API,以便在不同平台上进行扩展。如何将现有的web.php转换为api.php?
答案 0 :(得分:1)
这取决于控制器中的代码和逻辑。最有可能的是,您的控制器正在撤回视图。例如,return view('aaron-board')
。
但是,RESTful api需要JSON响应,例如return response()->json(['data' => 'users'])
。
如果您从一开始就没有计划,那么将传统的Web应用程序转换为api并不是一件容易的事。但是,它是可行的。
根据应用程序的规模,您可能希望有专用控制器来处理api请求,或者如果您的应用程序很小,您可以让它们由当前/相同的控制器处理。另一个问题是路由。中间件web
将导致api请求出现问题。
以下是我要做的起点。我将调整我的控制器以响应api请求以及对Web应用程序的正常请求。
例如,假设我们有以下路线:
// web.php
Route::get('/users', 'UsersController@index');
我们的索引方法:
public function index(Request $request)
{
$users = App\User::paginate();
return view('users.index', compact('users');
}
如果即将发出的请求是api请求,我们基本上可以更改index
方法以返回JSON响应:
public function index(Request $request)
{
$users = App\User::paginate();
if ($request->wantsJson()) {
return response()->json(['data' => $users]);
}
return view('users.index', compact('users');
}
现在,对于路线,我们将在api.php
文件中复制相同的路线。
// api.php
Route::get('/users', 'UsersController@index');
这将为我们的应用程序提供两条路线:
注意为api请求设置正确的标头以获取JSON响应非常重要。即Accept: application/json
。并且还要注意CORS配置。
作为旁注,您将web
中间件添加到web.php
文件中的路由中。这很好但不必要。 RouteServiceProvider
已添加中间件,并在this file检查方法mapWebRoutes
。您还将看到mapApiRoutes()
将api中间件添加到api.php
文件中定义的所有路由。