在開始之前,您需要準備以下內容:
首先,使用 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](http://m.dlbhg.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 之前,確保 app/Http/Requests/StoreProductRequest.php 文件中的 authorize 方法返回 true。
創建新產品:
POSThttp://127.0.0.1:8000/api/products請求體(JSON 格式):
{
"title": "蘋果",
"description": "世界上最好的蘋果"
}
獲取所有產品:
GEThttp://127.0.0.1:8000/api/products為了保護 API 安全,可以使用 Laravel 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);
});
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/