検索
ホームページバックエンド開発PHPチュートリアルPHPとLumenを統合してマイクロサービスアーキテクチャ開発を実現

IT テクノロジーの急速な発展に伴い、現代の企業はますます複雑化するビジネス システムに直面しており、従来の単一アプリケーション アーキテクチャではニーズを満たせなくなり、時代の要求に応じてマイクロサービス アーキテクチャが登場しました。マイクロサービス アーキテクチャは、より優れたスケーラビリティ、再利用性、柔軟性を実現するために、アプリケーションを独立してデプロイ、実行、拡張、保守できる複数の小さなサービスで構成されるアーキテクチャ スタイルです。

それでは、PHP を使用してマイクロサービス アーキテクチャを実装するにはどうすればよいでしょうか?答えは、軽量の PHP フレームワークである Lumen を使用することです。 Lumen は、Laravel に基づいて、マイクロサービスと API を構築するために設計された PHP フレームワークです。この記事では、マイクロサービス アーキテクチャを Lumen フレームワークに統合する方法を紹介します。

ステップ 1: Lumen をインストールする

まず、Lumen フレームワークをローカルにインストールする必要があります。インストール手順はLaravelと同じです。以下に示すように、composer を通じてインストールできます:

composer create-project --prefer-dist laravel/lumen lumen_api

完了後、ローカルで Lumen フレームワーク実行環境を開始できます:

php -S localhost:8000 -t public

When "Lumen 開発サーバーが開始されました: と表示されます。これは、Lumen フレームワークがローカル実行環境を正常にデプロイし、http://localhost:8000 を通じてそのデフォルト ページにアクセスできることを意味します。

ステップ 2: マイクロサービスを作成する

次に、Lumen フレームワークを使用して最初のマイクロサービスを作成します。すべてのユーザーのリストを取得する単純な API を作成します。この API を実装する手順は次のとおりです。

  1. 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 をリクエストすると、文字列「全ユーザーのリスト」が返されます。

  1. API リクエストの処理

次に、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 形式の応答として返します。

  1. API ルーティングをコントローラーに登録する

次に、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 フレームワークの実行下で使用できます。

ステップ 3: マイクロサービス フレームワークの統合

この前に、Lumen フレームワークで最初の API を作成しましたが、これは実際のマイクロサービス アプリケーションではありません。 Lumen をマイクロサービス アーキテクチャ アプリケーションに変えるには、DDD ドメイン モデルの設計アイデアを使用してアプリケーションを再構築する必要があります。次に、マイクロサービスの考え方を使用して、各サービスをマイクロサービスに分解します。

  1. ドメイン設計

まず、アプリケーションの核となるドメイン モデルを定義する必要があります。この例では、主な機能がユーザー データの管理である単純なユーザー管理マイクロサービスを作成します。

ユーザー管理マイクロサービスには次の機能が必要です:

  • ユーザー登録
  • ユーザー認証
  • ユーザー認可
  • ユーザー情報管理

次に、これらの関数をマイクロサービスのインターフェイスにマップする必要があります。

  1. マイクロサービス インターフェイス

ドメイン モデルのさまざまな機能に従って、さまざまなマイクロサービス インターフェイスを設計します。ここでは、次のマイクロサービス インターフェイスを定義します。

  • ユーザー登録インターフェイス (registerUser)
  • ユーザー認証インターフェイス (authenticateUser)
  • ユーザー認可インターフェイス (authorizeUser)
  • ユーザー情報管理インターフェイス (manageUserInfo)
  1. マイクロサービス モジュール

次に、マイクロサービス インターフェイスをサービス モジュール内のさまざまなマイクロサービスに分割する必要があります。 。この例では、次の 3 つのマイクロサービス モジュールを使用します。

  • ユーザー認証および認可マイクロサービス
  • ユーザー情報管理マイクロサービス
  • ユーザー登録マイクロサービス サービス

これらのマイクロサービス モジュールはデータベースと直接対話します。

  1. マイクロサービス アーキテクチャ

ドメイン モデル、マイクロサービス インターフェイス、マイクロサービス モジュール コンポーネントが完成したので、これらを簡単に組み合わせてマイクロサービス アーキテクチャを構築できるようになりました。アーキテクチャ全体は次のようになります。

API Gateway (Lumen) <--> User Authentication and Authorization Microservice <--> User Information Management Microservice <--> User Registration Microservice

Lumen API ゲートウェイを有効にします。これはシステムの最初のポイントであり、すべてのリクエストを受信し、適切なマイクロサービス モジュールにルーティングします。ドメイン モデルはビジネス ロジックであり、マイクロサービス インターフェイスはデータのやり取りを制御します。

第四步:实现微服务

现在,我们已经设计了微服务模块、微服务接口和整体微服务架构,我们可以开始实现我们的微服务。我们将针对上述三个微服务模块分别进行介绍。

1. 用户认证与授权微服务

我们的用户认证与授权微服务负责处理所有与用户认证相关的任务。它将接收用户凭据并验证它们的凭证是否正确。如果验证成功,它将生成一个JWT标记并将其返回给用户。

我们将针对以下任务编写用户认证与授权微服务:

  • 为用户生成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();
    }
}

2. 用户信息管理微服务

用户信息管理微服务将负责向用户提供用户相关信息。在本例中,我们将创建以下操作的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.']);
    }
  
}

3. 用户注册微服务

注册微服务将处理用户注册过程。在本例中,我们将创建以下功能:

  • 创建一个新用户,保存到数据库中
  • 发送电子邮件以验证用户的电子邮件地址

首先,我们将创建一个新控制器来处理用户注册。它应该读取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 サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPの現在のステータス:Web開発動向を見てくださいPHPの現在のステータス:Web開発動向を見てくださいApr 13, 2025 am 12:20 AM

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHP対その他の言語:比較PHP対その他の言語:比較Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHP対Python:コア機能と機能PHP対Python:コア機能と機能Apr 13, 2025 am 12:16 AM

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHP:Web開発の重要な言語PHP:Web開発の重要な言語Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHP:多くのウェブサイトの基礎PHP:多くのウェブサイトの基礎Apr 13, 2025 am 12:07 AM

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

誇大広告を超えて:今日のPHPの役割の評価誇大広告を超えて:今日のPHPの役割の評価Apr 12, 2025 am 12:17 AM

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPの弱い参照は何ですか、そしていつ有用ですか?PHPの弱い参照は何ですか、そしていつ有用ですか?Apr 12, 2025 am 12:13 AM

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

PHPで__invoke Magicメソッドを説明してください。PHPで__invoke Magicメソッドを説明してください。Apr 12, 2025 am 12:07 AM

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール