Laravel纯API项目需执行:创建骨架、删Web相关文件、配置HTTPS、用Sanctum认证、设API路由、生成API控制器、配CORS、建模型与迁移。

你需要在Laravel项目中快速对外暴露标准API接口,供Vue或React前端调用,不希望被视图渲染、Session、CSRF等Web层逻辑干扰。
初始化纯净API项目结构
执行命令创建最小化Laravel骨架:composer create-project laravel/laravel api-backend --prefer-dist "10.*"。Laravel 10+默认禁用Web中间件组,更适合纯API场景。
进入项目目录后,立即删除resources/views和routes/web.php——这两个目录和文件与前后端分离无关,保留反而可能引发路由冲突或意外视图渲染。
编辑app/Providers/AppServiceProvider.php,在boot()方法末尾添加:URL::forceScheme('https');(若部署在HTTPS环境)。这一步防止前端发起的请求因协议不一致被浏览器拦截。
配置无状态API认证
安装Sanctum:运行composer require laravel/sanctum,再执行php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"。
运行迁移命令:php artisan migrate。此操作会创建personal_access_tokens表,【缺少该表将导致所有token验证直接失败】。
打开config/auth.php,确认'api'守卫使用sanctum驱动:'api' => ['driver' => 'sanctum', 'provider' => 'users']。不要手动修改providers.users.model路径,除非你已自定义User模型命名空间。
定义RESTful资源路由
打开routes/api.php,删除默认示例路由,写入实际资源:
Route::middleware('auth:sanctum')->group(function () {
Route::apiResource('/posts', \App\Http\Controllers\Api\PostController::class)->except(['create', 'edit']);
Route::get('/profile', [\App\Http\Controllers\Api\ProfileController::class, 'show']);
});
注意:所有API路由自动加前缀/api,所以访问/api/posts即可,无需在路由中重复写/api。
执行命令生成控制器:php artisan make:controller Api/PostController --api --model=Post。【--api选项会跳过view相关代码,生成纯JSON响应方法】
启用跨域并设置响应头
安装CORS包:composer require fruitcake/laravel-cors。
发布配置:php artisan vendor:publish --tag="cors",然后打开config/cors.php,将'allowed_origins'设为['http://localhost:5173', 'https://your-vue-app.com']——必须精确匹配前端域名,不能写*(除开发调试外)。
在app/Http/Kernel.php的$middlewareGroups['api']数组中,确保\Fruitcake\Cors\HandleCors::class位于第一位。位置错误会导致CORS头不生效。
生成模型与数据库迁移
第一步:运行php artisan make:model Post -m,同时创建模型和迁移文件。
第二步:编辑database/migrations/*_create_posts_table.php,在up()方法中添加字段:$table->string('title'); $table->text('content'); $table->timestamps();。
第三步:运行php artisan migrate。如果提示Base table or view not found,说明数据库未创建或.env中DB_DATABASE值错误。
第四步:打开app/Models/Post.php,添加protected $fillable = ['title', 'content'];。不设此属性会导致Post::create()静默失败。


















