Laravel的web.php和api.php文件有什么不同【路由文件】
首先
因为我无意中在Laravel的路由文件中进行了一些调整,所以我将其作为备忘录留下来。
※ 使用Laravel 8
目标人群
本文针对以下类型的人群。
-
- 駆け出しエンジニア
- プログラミング初学者
路由文件的类型
-
- web.php
- api.php
关于差异
网页.php
由于默认启用了CSRF保护功能,无法从外部进行POST请求。
api.php可以进行本地化的中文重述如下:接口.php
由于CSRF保护未启用,可以从外部进行POST请求。
详细
kernel.php中已经将web.php和api.php的设置作为中间件进行了集成。
默认情况下,设置如下,由于api.php中没有VerifyCsrfToken,因此CSRF保护功能不起作用。
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
/* CSRF保護 */
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
验证
我們將使用curl命令進行驗證,來確定實際上會發生什麼樣的動作。
对于web.php文件
在事前准备阶段,我们需要设置终端节点。
- ルーティング
Route::post('/test', [TestController::class, 'test']);
- コントローラーはリクエストをそのまま返却する処理とします
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller
{
function test(Request $request)
{
return $request;
}
}
curl -X POST -H "Content-Type: application/json" -d '{"name":"太郎"}' http://localhost:8000/test
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Page Expired</title>
由于启用了CSRF保护功能,因此显示为“页面已过期”。
如果是api.php的情况下
与上述相同,作为预先准备,需要设置端点。
- ルーティング
Route::post('/test', [TestController::class, 'test']);
- コントローラー
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller
{
function test(Request $request)
{
return $request;
}
}
curl -X POST -H "Content-Type: application/json" -d '{"name":"太郎"}' http://localhost:8000/api/test
POST /api/test HTTP/1.1
Accept: */*
Content-Length: 17
Content-Type: application/json
Host: localhost:8000
User-Agent: curl/7.64.1
{"name":"太郎"}
由于未启用CSRF保护,外部可以通过POST方法访问。
最后,
我总结了有关PHP路由文件的内容。默认设置有所不同的CSRF保护,并且主要的使用方法如下所示。
-
- web.php
-
- 画面に表示するようなルーティングを設定する場合に使用する
-
- api.php
- 外部からの HTTP リクエストを受けて値を返却する場合に使用する