【问题标题】:Laravel 5: Convert existing web.php to api.php (RESTFUL API)Laravel 5:将现有的 web.php 转换为 api.php(RESTFUL API)
【发布时间】:2018-04-28 23:26:09
【问题描述】:

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

【问题讨论】:

  • 您的 web 路由返回 HTML 对吗?并且您想要一个 1-answer 解决方案来将这些聚合数据转换为 JSON api?

标签: php laravel rest api


【解决方案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 已经添加了中间件,检查方法 mapWebRoutes this file。您还将看到mapApiRoutes() 将api 中间件添加到api.php 文件中定义的所有路由。

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 2020-08-18
    • 1970-01-01
    • 2015-09-21
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2016-12-16
    相关资源
    最近更新 更多