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 リクエストを受けて値を返却する場合に使用する
广告
将在 10 秒后关闭
bannerAds