🗣 Wd提问: laravel api开发
🤖 Ai回答: Laravel 是一个优雅且功能强大的 PHP 框架,非常适合用于构建现代化的 API 应用。以下是 Laravel API 开发的核心步骤和最佳实践:
✅ 一、环境准备
1、安装 Laravel
bash
composer create-project laravel/laravel api-project
cd api-project
2、配置 `.env` 文件
设置 `APP_URL`
配置数据库(如 MySQL、PostgreSQL)
设置 `APP_ENV=production` 或 `local` 根据环境调整
3、启用 API 路由
Laravel 默认提供 `routes/api.php`,所有路由自动加上 `/api` 前缀,并默认返回 JSON。
✅ 二、基础结构设计
1、创建 Model + Migration + Controller
bash
php artisan make:model Post -mcr
-m: migration, -c: controller, -r: resource controller
2、定义迁移字段(database/migrations/xxx_create_posts_table.php)
php
Schema::create('posts', function (Blueprint $table) {
$table-id();
$table-string('title');
$table-text('content');
$table-timestamps();
});
运行迁移:
bash
php artisan migrate
✅ 三、编写 API 控制器(app/Http/Controllers/PostController.php)
使用资源控制器方法:
php
<?php
namespace App\Http\Controllers;
use App\Models\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index()
{
return response()-json(Post::all());
}
public function store(Request $request)
{
$validated = $request-validate([
'title' = 'required|string|max:255',
'content' = 'required|string',
]);
$post = Post::create($validated);
return response()-json($post, 201);
}
public function show(Post $post)
{
return response()-json($post);
}
public function update(Request $request, Post $post)
{
$validated = $request-validate([
'title' = 'sometimes|required|string|max:255',
'content' = 'sometimes|required|string',
]);
$post-update($validated);
return response()-json($post);
}
public function destroy(Post $post)
{
$post-delete();
return response()-json(null, 204);
}
}
✅ 四、定义 API 路由(routes/api.php)
php
use App\Http\Controllers\PostController;
Route::apiResource('posts', PostController::class);
自动注册以下路由:
GET /api/posts
POST /api/posts
GET /api/posts/{post}
PUT/PATCH /api/posts/{post}
DELETE /api/posts/{post}
✅ 五、API 返回格式统一(可选)
创建统一响应结构:
php
// app/Http/Responses/ApiResponse.php
<?php
namespace App\Http\Responses;
use Illuminate\Http\JsonResponse;
class ApiResponse
{
public static function success($data = null, $message = 'Success', $code = 200)
{
return new JsonResponse([
'success' = true,
'message' = $message,
'data' = $data,
], $code);
}
public static function error($message = 'Error', $code = 400, $errors = null)
{
return new JsonResponse([
'success' = false,
'message' = $message,
'errors' = $errors,
], $code);
}
}
在 Controller 中使用:
php
use App\Http\Responses\ApiResponse;
return ApiResponse::success($post);
✅ 六、添加认证(Passport / Sanctum)
推荐使用 Laravel Sanctum(轻量、适合 SPA 和移动端):
1、安装:
bash
composer require laravel/sanctum
php artisan vendor:publish provider=Laravel\Sanctum\SanctumServiceProvider
php artisan migrate
2、在模型中使用:
php
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens;
}
3、在路由中加中间件:
php
Route::middleware('auth:sanctum')-group(function () {
Route::apiResource('posts', PostController::class);
});
4、登录生成 Token:
php
// 登录后
$token = $user-createToken('api-token')-plainTextToken;
return response()-json(['token' = $token]);
✅ 七、请求验证 & 错误处理
使用 Form Request 或 `$request-validate()`
Laravel 自动返回 422 错误(带错误详情)
自定义异常处理器(app/Exceptions/Handler.php):
php
public function register()
{
$this-renderable(function (ValidationException $e, $request) {
if ($request-is('api/*')) {
return response()-json([
'message' = 'Validation Error',
'errors' = $e-errors(),
], 422);
}
});
}
✅ 八、API 文档(可选)
推荐使用 Scribe:
bash
composer require knuckleswtf/scribe
php artisan vendor:publish provider=Knuckles\Scribe\ScribeServiceProvider tag=scribe-config
php artisan scribe:generate
访问:`/docs`
✅ 九、测试 API
使用 Laravel 内置测试或 Postman / Insomnia:
php
// tests/Feature/PostApiTest.php
public function test_can_list_posts()
{
Post::factory()-count(3)-create();
$response = $this-getJson('/api/posts');
$response-assertStatus(200)
-assertJsonCount(3);
}
运行测试:
bash
php artisan test
✅ 十、部署建议
使用 `php artisan config:cache` 加速
设置队列、缓存驱动(Redis 推荐)
使用 Nginx/Apache 正确配置 `/public` 目录
启用 HTTPS
日志记录使用 `daily` 或 `stderr`(Docker 环境)
🧩 扩展建议
| 功能 | 推荐包 |
| 分页 | Laravel 内置 `paginate()` |
| 搜索/过滤 | spatie/laravel-query-builder |
| 权限控制 | spatie/laravel-permission |
| API 限流 | Laravel 内置 `throttle` 中间件 |
| CORS 支持 | fruitcake/laravel-cors(Laravel 7+ 已内置) |
✅ 总结
Laravel 提供了开箱即用的 API 开发能力,结合:
资源控制器
Eloquent ORM
请求验证
Sanctum 认证
统一响应格式
自动化文档
可以快速构建安全、可维护、高性能的 RESTful API。
📌 如需进阶内容(如 GraphQL、WebSocket、队列异步处理、测试覆盖率等),欢迎继续提问!
📣 商家广告:





0
IP地址: 55.53.102.96
搜索次数: 372
提问时间: 2025-12-04 23:03:33
🛒 域名购买:
4448.com.cn
fw.chat
83.gs
lh.gs
te.biz
sktq.cn
v-z.net
yrnz.cn
965.net.cn
zansou.com.cn
❓️ 热门提问:
专业托管网店
主机托管费用
云计算工程师证
WMS系统源码开发
电商网站 制作
tomcat域名配置
linux服务器远程登录工具
ios自动挂机软件
电脑搭建免流服务器
新加坡vps服务器流量测试
豌豆Ai站群搜索引擎系统
🌐 域名评估:
tesla.xj.cn
zxxd.com
zhansou.cn
ev.cq.cn
xjoh.cn
miannian.com
85.com.hk
hkza.cn
bb.hk.cn
tesla.hi.cn
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
검색 엔진 개발
北京搜索优化
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。