在Laravel中创建和测试API - Kinsta
Laravel Eloquent 是一种与数据库交互的简便方式。作为一个对象关系映射器(ORM),它通过提供与表交互的模型,极大地简化了数据库操作的复杂性。在本文中,我们将详细介绍如何使用 Laravel 创建和测试 API,并通过实践展示其便捷性。
先决条件
在开始之前,您需要准备以下内容:
- 安装 PHP 和 Composer。
- 配置好 Laravel 开发环境。
- 数据库服务(如 MySQL 或 SQLite)。
API 基础知识
创建 Laravel 项目
首先,使用 Composer 创建一个新的 Laravel 项目:
composer create-project laravel/laravel laravel-api-create-test
然后,启动开发服务器:
cd laravel-api-create-test
php artisan serve
此命令将在默认的 http://127.0.0.1:8000 上运行服务器。
创建模型和迁移
接下来,使用以下命令创建一个模型,并同时生成迁移文件:
php artisan make:model Product -m
编辑生成的迁移文件(database/migrations/{timestamp}_create_products_table.php),为 products 表添加以下字段:
$table->string('title');
$table->longText('description');
运行迁移以创建数据库表:
php artisan migrate
在 app/Models/Product.php 文件中,设置可填充字段:
protected $fillable = ['title', 'description'];
创建控制器
通过以下命令为 Product 模型创建控制器:
php artisan make:controller Api/ProductController --model=Product
在生成的 app/Http/Controllers/[Api](https://www.explinks.com/wiki/api/)/ProductController.php 文件中,添加以下逻辑:
- 获取所有产品:
public function index() {
$products = Product::all();
return response()->json(['status' => true, 'products' => $products]);
}
- 存储新产品:
首先,创建一个请求类:
php artisan make:request StoreProductRequest
然后,在 store 方法中添加以下代码:
public function store(StoreProductRequest $request) {
$product = Product::create($request->all());
return response()->json(['status' => true, 'message' => '产品创建成功!', 'product' => $product], 200);
}
定义路由
在 routes/api.php 文件中,添加以下代码以定义 API 路由:
use AppHttpControllersApiProductController;
Route::apiResource('products', ProductController::class);
确保数据库中存在 products 表。如果表尚未创建,可以通过以下命令运行迁移:
php artisan migrate
测试 API
在测试 API 之前,确保 app/Http/Requests/StoreProductRequest.php 文件中的 authorize 方法返回 true。
使用 Postman 测试
-
创建新产品:
- 请求类型:
POST - URL:
http://127.0.0.1:8000/api/products -
请求体(JSON 格式):
{ "title": "苹果", "description": "世界上最好的苹果" }
- 请求类型:
-
获取所有产品:
- 请求类型:
GET - URL:
http://127.0.0.1:8000/api/products
- 请求类型:
使用 Sanctum 验证 API
为了保护 API 安全,可以使用 Laravel Sanctum 提供的令牌身份验证功能。
安装 Sanctum
-
安装 Sanctum 包:
composer require laravel/sanctum -
发布 Sanctum 配置文件:
php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider" -
在
app/Http/Kernel.php文件中,将 Sanctum 中间件添加到api中间件组:
use LaravelSanctumHttpMiddlewareEnsureFrontendRequestsAreStateful;
protected $middlewareGroups = [
'api' => [
EnsureFrontendRequestsAreStateful::class,
'throttle:api',
IlluminateRoutingMiddlewareSubstituteBindings::class,
],
];
创建用户控制器
通过以下命令创建用户控制器:
php artisan make:controller UserController
在 app/Http/Controllers/UserController.php 文件中,添加以下代码以实现用户登录和令牌生成:
public function index(Request $request) {
$user = User::where('email', $request->email)->first();
if (!$user || !Hash::check($request->password, $user->password)) { return response(['message' => ['这些凭据与我们的记录不匹配。']], 404);
} $token = $user->createToken('my-app-token')->plainTextToken; return response(['user' => $user, 'token' => $token], 201);
}
创建用户种子数据
通过以下命令生成用户种子文件:
php artisan make:seeder UsersTableSeeder
在 database/seeders/UsersTableSeeder.php 文件中,添加以下代码:
DB::table('users')->insert([
'name' => 'John Doe',
'email' => 'johndoe@example.com',
'password' => Hash::make('password'),
]);
运行种子:
php artisan db:seed --class=UsersTableSeeder
保护路由
在 routes/api.php 文件中,添加以下代码以保护产品路由:
use AppHttpControllersUserController;
Route::post('login', [UserController::class, 'index']);Route::middleware('auth:sanctum')->group(function () {
Route::apiResource('products', ProductController::class);
});
处理 API 错误
Laravel 提供了多种方法来处理 API 错误,例如使用 try-catch 块或自定义响应。例如:
if (!$user || !Hash::check($request->password, $user->password)) { return response(['message' => ['这些凭据与我们的记录不匹配。']], 404);
}
总结
通过 Laravel 的 Eloquent 模型和 Sanctum 中间件,您可以轻松创建、测试和保护 API。Eloquent 提供了与数据库交互的高效方式,而 Sanctum 则为 API 提供了安全保障。
希望本文能帮助您快速上手 Laravel API 的开发与测试!
原文链接: https://kinsta.com/blog/laravel-api/
最新文章
- 5种最佳API认证方法,显著提升…
- API接口重试的8种方法
- AI 推理(Reasoning AI)优势:超越生成模型的架构、算法与实践指南
- 如何使用 DeepSeek 构建 AI Agent:终极指南
- AI 智能体 ReAct 架构设计模式剖析
- 深入解析谷歌翻译API:基于Gemini的规模化高质量翻译与创新应用
- 面向开发者的5个开源大型语言模型API
- 如何使用Python创建API – Ander Fernández Jauregui
- API 集成成本全景解析:从 2 千到 15 万美元的隐藏账单与 ROI 攻略
- 2025年小本生意新风口:如何借助 AI 实现低成本高效率创业?
- 使用 python 和 flask 构建 restful api
- rpa vs. api:差异与应用场景