Laravel API 的 POST 接口在 routes/api.php 中通过 Route::post() 注册,绑定控制器方法(如 UserController@login)或闭包,配合请求验证与 JSON 响应实现;API 路由默认禁用 CSRF,自动解析 JSON/表单数据并支持统一 JSON 返回。

在 Laravel 中,API 的 POST 接口不是在“某个 api 文件里”硬编码定义的,而是通过 路由 + 控制器(或闭包) 配合请求验证来实现的。核心位置是 routes/api.php,它专门负责 API 路由注册。
1. 在 routes/api.php 中注册 POST 路由
打开 routes/api.php,用 Route::post() 声明接口:
use App\Http\Controllers\Api\UserController;
// 基础写法:指向控制器方法
Route::post('/login', [UserController::class, 'login']);
// 带参数的 POST(如 /users/123/activate)
Route::post('/users/{id}/activate', [UserController::class, 'activate']);
// 匿名闭包方式(适合简单逻辑,不推荐复杂业务)
Route::post('/test', function (Request $request) {
return response()->json(['message' => 'Received', 'data' => $request->all()]);
});
2. 创建对应控制器并处理请求
运行命令快速生成 API 控制器:
php artisan make:controller Http/Controllers/Api/UserController --api
该命令会生成一个不含 create、edit 等视图方法的精简控制器。然后在方法中接收和校验数据:
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
public function login(Request $request)
{
// 自动验证(推荐)
$validated = $request->validate([
'email' => 'required|email',
'password' => 'required|string|min:6'
]);
// 手动获取字段(等价于 $request->input('email'))
$email = $request->email;
$password = $request->password;
// 你的登录逻辑(如 Auth::attempt()、JWT 生成等)
// ...
return response()->json(['token' => 'xxx']);
}
}
3. 注意关键细节
-
CSRF 保护默认关闭:API 路由(
routes/api.php)自动属于api中间件组,已禁用 CSRF,无需额外配置 -
请求体格式:前端需以
application/json或application/x-www-form-urlencoded发送数据,Laravel 自动解析到$request -
参数获取方式:POST 表单用
$request->input('key');JSON 请求用$request->json()->get('key')或统一用$request->get('key')(自动适配) -
响应格式统一:建议返回 JSON,使用
response()->json(...)或直接return [...](Laravel 自动转 JSON)


















