Laravel接口路由必须写在routes/api.php中,因其默认启用无状态的api中间件组(禁用session/CSRF、自动JSON响应),避免web.php中CSRF校验导致TokenMismatchException,并自动添加/api前缀。

Laravel 接口路由应写在 routes/api.php 文件中。
为什么必须用 api.php 而不是 web.php
api.php 中的路由默认启用 api 中间件组,特点是无状态、不依赖 session、跳过 CSRF 验证,适合前后端分离、移动端或第三方调用场景。若误写在 web.php,会强制经过 CSRF 检查,导致 POST/PUT/DELETE 等请求直接失败(TokenMismatchException)。
api.php 自带 /api 前缀
框架通过 RouteServiceProvider 自动为 api.php 中所有路由添加 /api 前缀。例如:
-
Route::get('users', ...)实际匹配/api/users -
Route::post('posts', ...)实际匹配/api/posts
无需手动写 /api/users,否则会变成 /api/api/users。
如何自定义前缀或中间件
如需修改默认行为,可调整 app/Providers/RouteServiceProvider.php 中的 mapApiRoutes() 方法:
- 修改前缀:改
prefix('api')为prefix('v1')→ 变成/v1/users - 追加中间件:在
middleware('api')数组中加入'throttle:api'等
不要混用 web 和 api 路由
同一逻辑路径如 /users,若同时有页面渲染(web.php)和 JSON 返回(api.php),务必分开放置。混写不仅易引发 CSRF 冲突,还会让路由职责不清、难以维护。



















