IT テクノロジーの急速な発展に伴い、現代の企業はますます複雑化するビジネス システムに直面しており、従来の単一アプリケーション アーキテクチャではニーズを満たせなくなり、時代の要求に応じてマイクロサービス アーキテクチャが登場しました。マイクロサービス アーキテクチャは、より優れたスケーラビリティ、再利用性、柔軟性を実現するために、アプリケーションを独立してデプロイ、実行、拡張、保守できる複数の小さなサービスで構成されるアーキテクチャ スタイルです。
それでは、PHP を使用してマイクロサービス アーキテクチャを実装するにはどうすればよいでしょうか?答えは、軽量の PHP フレームワークである Lumen を使用することです。 Lumen は、Laravel に基づいて、マイクロサービスと API を構築するために設計された PHP フレームワークです。この記事では、マイクロサービス アーキテクチャを Lumen フレームワークに統合する方法を紹介します。
まず、Lumen フレームワークをローカルにインストールする必要があります。インストール手順はLaravelと同じです。以下に示すように、composer を通じてインストールできます:
composer create-project --prefer-dist laravel/lumen lumen_api
完了後、ローカルで Lumen フレームワーク実行環境を開始できます:
php -S localhost:8000 -t public
When "Lumen 開発サーバーが開始されました:
次に、Lumen フレームワークを使用して最初のマイクロサービスを作成します。すべてのユーザーのリストを取得する単純な API を作成します。この API を実装する手順は次のとおりです。
ルーティング ファイル Routes/web.php に、リクエストを処理するルートを記述する必要があります。 APIに。この例では、以下に示すように、/get_users リクエストを処理するためにルート ファイルに GET ルートを書き込みます。
$router->get('/get_users', function () use ($router) { return 'List of all users'; });
この時点で、http://localhost:8000/get_users をリクエストすると、文字列「全ユーザーのリスト」が返されます。
次に、API のコントローラー クラスを作成する必要があります。 get_users リクエストを処理し、ユーザーのリストを返す役割を担う UserController クラスを作成しましょう。 app/Http/Controllers ディレクトリに UserController.php ファイルを作成し、次のコードをコピーします。
<?php namespace AppHttpControllers; use IlluminateHttpRequest; class UserController extends Controller { public function getAllUsers() { $users = ['User 1', 'User 2', 'User 3']; return response()->json($users); } }
上記のコードでは、リストを返すパブリック関数 getAllUsers() を定義します。すべてのユーザーの情報を JSON 形式の応答として返します。
次に、API ルーティングをルーティング ファイル内の UserController コントローラーに登録し、ルート /api/get_users をUserController@getAllUsers メソッドを実行し、ルート ファイルを次のように変更します。
$router->get('api/get_users', 'UserController@getAllUsers');
この時点で、http://localhost:8000/api/get_users をリクエストすると、次のように JSON 形式のユーザー リストが返されます。以下に示す :
{ "0": "User 1", "1": "User 2", "2": "User 3" }
最後に、以下に示すように、先頭に UserController クラスをインポートする必要もあります:
<?php use AppHttpControllersUserController;
このようにして、最も基本的な API を正常に実装しました。 Lumen フレームワークの実行下で使用できます。
この前に、Lumen フレームワークで最初の API を作成しましたが、これは実際のマイクロサービス アプリケーションではありません。 Lumen をマイクロサービス アーキテクチャ アプリケーションに変えるには、DDD ドメイン モデルの設計アイデアを使用してアプリケーションを再構築する必要があります。次に、マイクロサービスの考え方を使用して、各サービスをマイクロサービスに分解します。
まず、アプリケーションの核となるドメイン モデルを定義する必要があります。この例では、主な機能がユーザー データの管理である単純なユーザー管理マイクロサービスを作成します。
ユーザー管理マイクロサービスには次の機能が必要です:
次に、これらの関数をマイクロサービスのインターフェイスにマップする必要があります。
ドメイン モデルのさまざまな機能に従って、さまざまなマイクロサービス インターフェイスを設計します。ここでは、次のマイクロサービス インターフェイスを定義します。
次に、マイクロサービス インターフェイスをサービス モジュール内のさまざまなマイクロサービスに分割する必要があります。 。この例では、次の 3 つのマイクロサービス モジュールを使用します。
これらのマイクロサービス モジュールはデータベースと直接対話します。
ドメイン モデル、マイクロサービス インターフェイス、マイクロサービス モジュール コンポーネントが完成したので、これらを簡単に組み合わせてマイクロサービス アーキテクチャを構築できるようになりました。アーキテクチャ全体は次のようになります。
API Gateway (Lumen) <--> User Authentication and Authorization Microservice <--> User Information Management Microservice <--> User Registration Microservice
Lumen API ゲートウェイを有効にします。これはシステムの最初のポイントであり、すべてのリクエストを受信し、適切なマイクロサービス モジュールにルーティングします。ドメイン モデルはビジネス ロジックであり、マイクロサービス インターフェイスはデータのやり取りを制御します。
现在,我们已经设计了微服务模块、微服务接口和整体微服务架构,我们可以开始实现我们的微服务。我们将针对上述三个微服务模块分别进行介绍。
我们的用户认证与授权微服务负责处理所有与用户认证相关的任务。它将接收用户凭据并验证它们的凭证是否正确。如果验证成功,它将生成一个JWT标记并将其返回给用户。
我们将针对以下任务编写用户认证与授权微服务:
我们可以通过安装tymon / jwt-auth组件来编写我们的用户认证与授权微服务。使用以下命令进行安装:
composer require tymon/jwt-auth
然后,我们需要在配置文件中配置JWT密钥。现在,我们可以使用以下代码为用户认证与授权微服务创建一个新控制器:
<?php namespace AppHttpControllers; use IlluminateSupportFacadesAuth; use AppModelsUser; use IlluminateHttpRequest; class AuthController extends Controller { /** * Create a new AuthController instance. * * @return void */ public function __construct() { $this->middleware('auth:api', ['except' => ['login']]); } /** * Get a JWT token. * * @return void */ public function login(Request $request) { $credentials = $request->only('email', 'password'); if ($token = $this->guard()->attempt($credentials)) { return $this->respondWithToken($token); } return response()->json(['error' => 'Unauthorized'], 401); } /** * Get the authenticated User. * * @return void */ public function me() { return response()->json(auth()->user()); } /** * Log the user out (Invalidate the token). * * @return void */ public function logout() { auth()->logout(); return response()->json(['message' => 'Successfully logged out']); } /** * Refresh a token. * * @return void */ public function refresh() { return $this->respondWithToken(auth()->refresh()); } /** * Get the token array structure. * * @param string $token * * @return mixed */ protected function respondWithToken($token) { return response()->json([ 'access_token' => $token, 'token_type' => 'bearer', 'expires_in' => auth()->factory()->getTTL() * 60 ]); } /** * Get the guard to be used during authentication. * * @return IlluminateContractsAuthGuard */ public function guard() { return Auth::guard(); } }
用户信息管理微服务将负责向用户提供用户相关信息。在本例中,我们将创建以下操作的API:
首先,我们将创建一个新控制器来管理用户信息:
<?php namespace AppHttpControllers; use IlluminateSupportFacadesHash; use AppModelsUser; use IlluminateHttpRequest; class UserController extends Controller { public function getUser(Request $request) { $user = User::where('id', $request->id)->first(); if (!$user) { return response()->json(['message' => 'User not found.'], 404); } return response()->json(['user' => $user]); } public function updateUserPassword(Request $request) { $user = User::where('id', $request->id)->first(); if (!$user) { return response()->json(['message' => 'User not found.'], 404); } $user->password = Hash::make($request->password); $user->save(); return response()->json(['message' => 'User password updated successfully.']); } }
注册微服务将处理用户注册过程。在本例中,我们将创建以下功能:
首先,我们将创建一个新控制器来处理用户注册。它应该读取POST有效载荷并保存新用户到数据库中。然后,它应该生成用户验证令牌并将其发送到用户的电子邮件地址。
<?php namespace AppHttpControllers; use IlluminateSupportFacadesHash; use AppModelsUser; use IlluminateHttpRequest; class RegisterController extends Controller { public function create(Request $request) { $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), ]); $user->sendEmailVerificationNotification(); // send verification email return response()->json(['message' => 'User created successfully.']); } }
现在,我们可以在Lumen框架中实现我们的微服务。我们的系统现在有三个微服务模块:“用户认证和授权微服务”、“用户信息管理微服务”和“用户注册微服务”,这些微服务与数据库交互,并由Lumen API Gateway处理。
本文介绍了如何在Lumen框架中集成微服务架构,包括领域模型设计、微服务接口和微服务模块的开发。以上代码展示了Lumen框架如何开发微服务的过程。通过使用Lumen框架,开发者可以快速构建微服务,提高代码质量,加快项目进程。
以上がPHPとLumenを統合してマイクロサービスアーキテクチャ開発を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。