マイクロサービスアーキテクチャは、アプリケーションを小さなサービスに分割して開発・デプロイを容易にする手法です。今回は、Laravelを使ったマイクロサービスアーキテクチャの基本とAPIゲートウェイの設定方法について記述します。
目次
- マイクロサービスアーキテクチャの基本
- Laravelでのマイクロサービスの構築
- APIゲートウェイの設定
- サービス間通信の実装
1. マイクロサービスアーキテクチャの基本
マイクロサービスアーキテクチャでは、アプリケーションを以下のような小さなサービスに分割します。
- ユーザーサービス
- 注文サービス
- 在庫サービス
各サービスは独立して動作し、それぞれの責任範囲を持ちます。
2. Laravelでのマイクロサービスの構築
ユーザーサービスの作成
まず、ユーザーサービス用のLaravelプロジェクトを作成します。
composer create-project --prefer-dist laravel/laravel user-service
次に、ユーザーの登録と認証機能を実装します。
routes/api.php
use App\Http\Controllers\UserController;
Route::post('/register', [UserController::class, 'register']);
Route::post('/login', [UserController::class, 'login']);
app/Http/Controllers/UserController.php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;
class UserController extends Controller
{
public function register(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:8|confirmed',
]);
$user = User::create([
'name' => $validated['name'],
'email' => $validated['email'],
'password' => Hash::make($validated['password']),
]);
return response()->json(['message' => 'User registered successfully']);
}
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
$user = Auth::user();
$token = $user->createToken('user-service')->plainTextToken;
return response()->json(['token' => $token]);
}
return response()->json(['message' => 'Invalid credentials'], 401);
}
}
3. APIゲートウェイの設定
APIゲートウェイは、複数のマイクロサービスを統合し、単一のエンドポイントとして提供します。Nginxを使用してAPIゲートウェイを設定します。
Nginxのインストールと設定
Nginxのインストール:
sudo apt-get update
sudo apt-get install nginx
設定ファイルの編集:
/etc/nginx/sites-available/default
server {
listen 80;
server_name your-domain.com;
location /users/ {
proxy_pass http://127.0.0.1:8001/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /orders/ {
proxy_pass http://127.0.0.1:8002/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
設定をテストしてNginxを再起動:
sudo nginx -t
sudo systemctl restart nginx
4. サービス間通信の実装
サービス間で通信するためにHTTPクライアントを使用します。Guzzleを使用して、ユーザーサービスから注文サービスにリクエストを送信する例を示します。
composer require guzzlehttp/guzzle
app/Http/Controllers/OrderController.php
namespace App\Http\Controllers;
use GuzzleHttp\Client;
use Illuminate\Http\Request;
class OrderController extends Controller
{
public function createOrder(Request $request)
{
$client = new Client();
$response = $client->post('http://127.0.0.1:8002/orders', [
'json' => [
'user_id' => $request->user_id,
'product_id' => $request->product_id,
'quantity' => $request->quantity,
]
]);
return response()->json(json_decode($response->getBody()), $response->getStatusCode());
}
}
まとめ
この記事では、Laravelを使ったマイクロサービスアーキテクチャの基本とAPIゲートウェイの設定方法について記述しました。マイクロサービスを導入することで、アプリケーションのスケーラビリティと保守性が向上します。