Laravel 5:将现有的web.php转换为api.php(RESTFUL API)

时间:2017-11-15 16:23:35

标签: php laravel rest api

我在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?

1 个答案:

答案 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');

这将为我们的应用程序提供两条路线:

  • www.example.com/users(将返回视图)
  • www.example.com/api/users(将返回JSON回复)

注意为api请求设置正确的标头以获取JSON响应非常重要。即Accept: application/json。并且还要注意CORS配置。

作为旁注,您将web中间件添加到web.php文件中的路由中。这很好但不必要。 RouteServiceProvider已添加中间件,并在this file检查方法mapWebRoutes。您还将看到mapApiRoutes()将api中间件添加到api.php文件中定义的所有路由。