FIWARE OrionのNGSI v2レスポンスをGeoJSON形式に変換するKongプラグインです。エンティティの位置情報を抽出し、標準的なGeoJSON形式で提供します。
kong/plugins/orion2GeoJSON/
├── handler.lua # メイン処理ロジック
├── schema.lua # 設定スキーマ定義
└── tools.lua # 共通ユーティリティ関数
-
リクエスト受信(Accessフェーズ)
- クエリパラメータのチェック(format=geojson)
- 変換フラグの設定
-
レスポンスヘッダー処理(Header Filterフェーズ)
- Content-Typeの設定(application/geo+json)
- Content-Lengthヘッダーの削除
-
レスポンスボディ処理(Body Filterフェーズ)
- チャンク単位でのデータ受信
- 完全なレスポンスボディの構築
- JSONパースとバリデーション
- GeoJSON形式への変換
- 結果の出力
fields = {
-- メインの設定項目
entity_type = {
type = "string", -- エンティティタイプ
required = true, -- 必須パラメータ
default = "Room" -- デフォルト値
},
location_attr = {
type = "string", -- 位置情報属性名
required = true, -- 必須パラメータ
default = "location" -- デフォルト値
},
output_format = {
type = "string", -- 出力形式指定
required = true, -- 必須パラメータ
default = "FeatureCollection",
one_of = { -- 有効な値の制限
"FeatureCollection",
"Feature"
}
},
conditional_transform = {
type = "boolean", -- 条件付き変換フラグ
required = true, -- 必須パラメータ
default = false -- デフォルト値
}
}- 目的: 変換の必要性を判断
- 入力: プラグイン設定
- 処理:
- conditional_transform設定の確認
- クエリパラメータの解析
- format=geojsonの検証
- 出力: ブール値(変換要否)
- 目的: リクエスト処理フェーズでの初期化
- 入力: プラグイン設定
- 処理:
- 共有コンテキストの初期化
- 変換フラグの設定
- 目的: レスポンスヘッダーの処理
- 入力: プラグイン設定
- 処理:
- Content-Typeの設定
- Content-Lengthの削除
- レスポンスボディバッファの初期化
- 目的: レスポンスボディの変換
- 入力: プラグイン設定
- 処理:
- チャンクデータの収集
- JSONパース
- GeoJSON変換
- 結果の出力
- 目的: エラー時のダミーデータ生成
- 入力:
- error_type: エラータイプ
- details: エラー詳細
- 出力: エラー情報を含むFeature
- 目的: エンティティからFeatureオブジェクトの生成
- 入力:
- entity: 変換対象エンティティ
- config: プラグイン設定
- 処理:
- エンティティタイプの検証
- 位置情報の抽出
- プロパティの変換
- 出力: GeoJSON Feature
- 目的: 単一エンティティの変換
- 入力:
- entity: 変換対象エンティティ
- config: プラグイン設定
- 出力: GeoJSON Feature
- 目的: 複数エンティティの変換
- 入力:
- entities: エンティティ配列
- config: プラグイン設定
- 出力: GeoJSON FeatureCollection
- JSONパース失敗時のエラーFeature生成
- エラー詳細のログ記録
- 適切なエラーメッセージの返却
- エンティティタイプ不一致
- 位置情報属性の欠落
- 無効な位置情報形式
- 無効なデータ型
- 必須フィールドの欠落
- 配列処理エラー
- チャンク単位でのストリーミング処理
- 早期リターンによる処理の最適化
- メモリ使用量の制御
- エラー時の適切なフォールバック
- レスポンスキャッシング機能
- バッチ処理の効率化
- クエリパラメータによるフィルタリング
-
スキーマバリデーション
- 必須パラメータの検証
- パラメータ形式の検証
- デフォルト値の確認
-
変換ロジック
- 単一エンティティの変換テスト
- 複数エンティティの変換テスト
- エラーケースの検証
-
Orion連携テスト
- エンティティ作成と取得
- 位置情報の変換確認
- エラーハンドリングの確認
-
パフォーマンステスト
- 大規模データセットでの動作確認
- メモリ使用量の測定
- レスポンス時間の計測
- Docker および Docker Compose
- Kong開発環境(3.x以上)
- Pongo テストフレームワーク
- Kong Gateway: 3.x以上
- Orion: 3.10.1以上
- MongoDB: 4.4以上
- プラグインのビルド
- Kongへの登録
- 設定の適用
plugins:
- name: orion2GeoJSON
config:
entity_type: Room
location_attr: location
output_format: FeatureCollection
conditional_transform: false- キャッシング機能の実装
- パフォーマンス最適化
- エラーログの強化
- 複雑な位置情報タイプのサポート
- カスタム変換オプションの追加
- バッチ処理の最適化