【パーサークラス実装】
はじめに
パーサークラスは、REST-API サーバーにおけるHTTP ボディ部の解析を担当する重要なコンポーネントです。
HTTP ヘッダの
このページでは、パーサークラスの生成方法、構造、役割、ビルトインパーサーとの関係について解説します。
HTTP ヘッダの
Content-Type に応じて適切なパース処理を実行し、イベント処理クラス(UNIT)からは $ctx->request()->body() を通じてパース済みデータを取得できます。このページでは、パーサークラスの生成方法、構造、役割、ビルトインパーサーとの関係について解説します。
スキャフォールディング(生成方法)
パーサークラスは以下のコマンドで生成できます。
生成ファイルは
生成されるクラスは
その他スキャフォールディングの詳細は ▶スキャフォールディング を参照してください。
php worker custom:parser <カスタム名>
生成ファイルは
app/BodyParser/<カスタム名>.php に配置されます。生成されるクラスは
BodyParser を継承した最小構成で、必要に応じてメソッドを追加して利用します。その他スキャフォールディングの詳細は ▶スキャフォールディング を参照してください。
生成されるクラスの構造
スキャフォールディングで生成されるパーサークラスは次のような内容です。
<?php
/**
* ボディ部パーサークラスのファイル
*/
namespace App\BodyParser;
use App\Common\RequestWrapper;
class <カスタム名> extends BodyParser
{
public function selector(RequestWrapper $p_request, string $p_endpoint): ?string
{
return 'normal';
}
public function normal($p_body)
{
return $p_body;
}
}
BodyParserを継承することで REST-API サーバーのパーサーとして認識される- メイン処理クラスの
$setting_files['parser']に設定された設定ファイルと連動する(▶パーサー設定) Content-Typeごとに設定ファイルでパーサークラスを指定することで適用される
パーサークラスの役割
パーサークラスは主に以下の用途で利用されます。
REST-API の入力処理を一元化することで、イベント処理クラス側の実装をシンプルに保つことができます。
- HTTP ボディ部のパース処理
- Content-Type に応じた解析ロジックの切り替え
- UNIT パラメータへ渡すデータの整形
- エンドポイントごとの特別な処理分岐
REST-API の入力処理を一元化することで、イベント処理クラス側の実装をシンプルに保つことができます。
selector メソッド
selector メソッドは、リクエスト情報やエンドポイント URI を参照して、どのメソッドでパース処理を行うかを決定する仕組みです。
同じ Content-Type に対して複数の処理を用意し、状況に応じて切り替える柔軟な構造になっています。
- 戻り値としてメソッド名(文字列)を返す
- 返されたメソッドが実行される
- selector が未定義の場合は
normalメソッドが自動で呼び出される
同じ Content-Type に対して複数の処理を用意し、状況に応じて切り替える柔軟な構造になっています。
normal メソッド
selector が未定義、または null を返した場合に実行されるデフォルト処理です。特別な解析が不要な場合は
normal のみで十分です。ビルトインパーサー
REST-API サーバーには、主要な
対応付けは
Content-Type に対応したビルトインパーサーが用意されています。対応付けは
setting/parser.php にて定義されています(▶パーサー設定)。● application/json → JsonParser
JSON 文字列を連想配列へ変換するパーサーです。
public function normal($p_body)
{
return json_decode($p_body, true);
}
● application/x-www-form-urlencoded → UrlencodedParser
URL エンコードされたボディを配列へ変換します。
public function normal($p_body)
{
parse_str($p_body, $parsed_body);
return $parsed_body;
}
● application/xml → XmlParser
XML を SimpleXML で読み込み、配列へ変換します。
public function normal($p_body)
{
$xml = simplexml_load_string($p_body);
return json_decode(json_encode($xml), true);
}
おわりに
パーサークラスは REST-API の入力処理を担う重要なクラスです。
Content-Type ごとの解析処理を整理し、必要に応じて
ビルトインパーサーの実装も参考にしながら、プロジェクトに適したパーサーを設計してください。
Content-Type ごとの解析処理を整理し、必要に応じて
selector を活用することで、柔軟で拡張性の高い API を構築できます。ビルトインパーサーの実装も参考にしながら、プロジェクトに適したパーサーを設計してください。