第2章 クラウドアプリでの RHMAP 機能の使用
2.1. API Mapper を使用した JSON API 応答の変換
2.1.1. 概要
サードパーティー API からデータをアクセスするときは、多くの場合、アプリケーションの受信データの構造または形式を変更する必要があります。たとえば、値を異なる形式に変換し、データを事前処理して、新しい値を派生させたり、アプリケーションのモデルを適合させるためにフィールドの名前変更または削除を行ったりします。
RHMAP には、データ変換ロジックをカプセル化し、主要なアプリケーションロジックから抽象化することを可能にする API Mapper という名前の視覚的なツールが含まれます。API Mapper を使用すると、以下のことを行って JSON API の応答を簡単に変換できるようになります。
- フィールド名を変更する。
- 必要でないフィールドを除外する。
- 組み込みまたはカスタムの変換を使用してフィールド値を変換する。
2.1.2. セットアップ
API Mapper はクラウドサービステンプレートとして提供されます。API Mapper の 1 つのインスタンスは複数のクラウドアプリとクラウドサービスで使用でき、複数の異なる API を変換するためにも使用できます。ただし、必要な場合は、任意の数の API Mapper インスタンスをデプロイできます。
API Mapper を使用するには以下の手順に従ってください。
API Mapper サービスをデプロイします。
- Services & APIs セクションで、Provision MBaaS Service/API をクリックします。
- リストで API Mapper を見つけ、Choose をクリックします。
- API Mapper などの名前を入力し、Next をクリックします。
- API Mapper が作成後にデプロイされる環境を選択し、Next をクリックします。
- Finish をクリックし、デプロイメントが完了するまで待機します。
サービスをパブリックにします。
新しく作成された API Mapper サービスの Service Details ページにある Access Control セクションで、Make this Service Public to all Projects and Services チェックボックスをオンにします。次に Save Service をクリックします。
サービスのデータベースをアップグレードします。
API Mapper には、アップグレードされたデータベースが必要です。作業を進める前に、API Mapper サービスが完全にデプロイされ、実行中であることを確認します。データベースをアップグレードするには、以下の手順を実行します。
- API Mapper サービスの Data Browser セクションで、右上隅にある Upgrade Database ボタンをクリックし、Upgrade Now をクリックして確定します。アップグレードプロセスが完了するまで待機します。
- Deploy セクションの Deploy Cloud App をクリックして API Mapper サービスを再デプロイします。
この時点で、サービスの Preview セクションから API Mapper の管理インターフェースにアクセスできます。
データベースのアップグレードが完了したら、プレフィックス fhsync_ の付いた新たなコレクションが作成され、同期機能が有効になります。Red Hat では、同期機能を使う予定がない場合でも、これらのコレクションを保持しておくことを推奨しています。
2.1.3. 使用例
この例は、要求、マッピング、およびカスタム変換を作成する方法を示しています。デモのために、この手順では変換するソース API の例としてパブリックな Github API を使用します。
2.1.3.1. 要求の作成
feedhenry-templates/fh-api-mapper リポジトリーに関する情報を取得するために、Github API エンドポイントの要求を作成します。
- API Mapper のホームページから、New Request をクリックします。
URL フィールドに API 要求の完全な URL を貼り付けます。
https://api.github.com/repos/feedhenry-templates/fh-api-mapper
Github API を使用するために、各要求で
User-Agentヘッダーが送信されるようにします。以下の値を入力します。-
Header Key:
User-Agent -
Header Value:
FHApiMapper
-
Header Key:
次に、この要求の内部マウントパスを選択します。Mount Path タブを選択し、パスを入力します。この例では、マウントパスとして
/thisrepoを使用します。マップされた要求はこのパスで利用できます (パスはこの場合以下の URL になります)。http://<serviceURL>/thisrepo
- Create Request をクリックしてデータベースに要求を格納します。
- Send Request をクリックして要求を送信し、応答を取得します。
- Response セクションで、Response Headers セクションと Response Body セクションが期待したように表示されることを確認します。この時点で、変換の前に元の応答本文を確認できます。
2.1.3.2. マッピングの追加
要求を保存し、内部パスに対してマップした後で、応答の各フィールドに適用する変換を選択します。この手順は、フィールドの破棄および名前変更を行い、フィールド値を変換する方法を示しています。
Response Mapping セクションで、Add a Mapping をクリックします。
マッピングが作成されたら、応答で返されたフィールドのリストが左側に表示されます。
ownerフォールドを破棄します。ownerフィールドをクリックして Field Mapping パネルで編集するためにそのフィールドを選択します。Use this field のチェックをオフにしてownerフィールドとそのすべての子供を破棄します。idフィールドの名前を_idに変更します。左側にある
idフィールドを選択します。Rename Field ボックスで、_idと入力します。privateフィールドの名前をpublicに変更し、値を反転します。前の手順のように、フィールド
privateの名前をpublicに変更します。次に、Transform ドロップダウンリストのinvertという名前の変換を選択します。
Field Mapping セクションで行われたすべての変更は自動的に保存されます。
変換をセットアップした後は、Response セクションの Response Body タブで元の応答本文とマップされた応答本文を比較できます。元の応答は左側に表示され、マップされた応答は右側に表示されます。
マップされた応答には、値が true の public フィールドと _id フィールド (id ではない) が含まれ、owner フィールドは含まれません。
2.1.3.3. マップされた API の使用
Response セクションには、以下のものを含むさまざまなクラウドからマップ済み要求を呼び出すコード例を含む Sample Code タブが含まれます。
-
$fh.serviceAPI -
Node.js
requestモジュール - cURL
たとえば、コマンドラインから要求を呼び出すには、cURL Request コードをコピーし、コマンドラインに貼り付け、そのコマンドを実行します。マップされた応答はコンソールに表示されます。
2.1.4. カスタムの変換
組み込みのフィールド変換以外に、カスタムの変換関数を作成することもできます。
2.1.4.1. カスタムの変換の作成
カスタムの変換関数を登録するには、以下のコード例で示されているように、API Mapper の application.js ファイルの / ルートに対する関数に渡される設定オブジェクトでその変換関数を宣言します。
app.use('/', require('./lib/api')({
transformations : {
<transformation name> : {
type: <'array' | 'number' | 'string' | 'boolean'>,
transform: <unary function>
}
}
}));
カスタム変換は、transformations オブジェクトのプロパティーとして定義されます。プロパティーの名前は変換の名前に対応します。プロパティーの値は transformation definition オブジェクトです。
各 transformation definition オブジェクトには以下の 2 つのプロパティーがあります。
-
type: 入力値の JavaScript 型を表す文字列。可能な値は、array、number、string、booleanです。 -
transform: 変換関数。この関数は元のフィールドを唯一の引数として取得し、変換された値を返します。
2.1.4.2. サンプル
この例は、偶数を 0 に、奇数を 1 に変更する even という名前の変換を作成する方法を示しています。
-
API Mapper サービスの Editor に移動し、
application.jsファイルを開きます。 -
mixedArrayTransformという名前の既存の 1 つのカスタム変換を含むtransformationsオブジェクトの宣言を探します。 transformationsプロパティーの値を以下のオブジェクトに置き換えます。{ even: require('./transformations/even.js') }以下の内容で新しい
transformations/even.jsファイルを作成します。// First, tell the mapper it operates on numbers exports.type = 'number'; // then, implement the function. exports.transform = function(n) { return n%2; };
even という名前の新しい変換が、数値型用の API Mapper UI で利用可能になります。
2.2. プッシュ通知を使用したアプリケーションの開発
概要
このチュートリアルでは、プラットフォームの組み込みのプッシュ通知サーバーから送信されたプッシュ通知を受け取るサンプルアプリケーションを構築するプロセスについて説明します。この例で作成するアプリケーションは Cordova に基づき、Android と関連する Firebase Cloud Messaging (旧名は Google Cloud Messaging) プラットフォームを対象にしています。ただし、他のすべてのサポート対象プラットフォームに対する手順は類似しています。
Red Hat Mobile Application Platform ホスト型でのプッシュ通知サポートの詳細については、Push Notifications を参照してください。
2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
組み込みの UnifiedPush Server (UPS) から Google のプッシュ通知ネットワークにアクセスできるようにするには、最初にサーバーキーを取得し、Firebase コンソールでプロジェクトを確立する必要があります。クレデンシャルを取得する詳細な手順については、Obtaining Firebase Cloud Messaging Credentials を参照してください。これらの手順はネイティブ Android アプリ向けであり、すべてのプロセスを完了する必要はありません。セットアップを正常に完了するには、以下の 3 つのアイテムを取得する必要があります。
- サーバーキー (旧名は API キー)
- 送信者 ID (旧名はプロジェクト番号)
-
Firebase コンソールから生成された
google-services.jsonファイル
他のプッシュネットワークについては、Obtaining Credentials for Push Networks を参照してください。
2.2.2. Push Notification Hello World テンプレートからのプロジェクトの作成
- RHMAP Studio で Projects に移動し、New Project をクリックします。
- Push Notification Hello World テンプレートを探し、右側にある Choose をクリックします。
- プロジェクトの名前を Name your Project フィールドに入力します。
- App Templates セクションで Simple Cordova Push App を探します。このアプリが選択されていることを確認し、プロジェクトテンプレート内で選択解除できる他のすべてのアプリを選択解除します。チェックボックスは各アプリテンプレートの右上隅にあります。
- プロジェクトテンプレートの右上にある Create をクリックします。プロジェクトの作成が完了するまで待機します。次に、画面の下部にある Finish をクリックします。
2.2.3. クライアントアプリのパッケージ名の定義
- プロジェクトの Apps, Cloud Apps & Services セクションで Simple Cordova Push App をクリックします。
- 画面の左側にある Config をクリックします。
- Config メニューの Android オプションを選択します。
Android Package Name 下にあるクライアントアプリのパッケージ名を定義します。
この名前は、Firebase コンソールでのアプリの登録時に必要です。パッケージの名前を定義するときは、Java パッケージの命名規則に従います。
2.2.4. プッシュサポートのセットアップ
プッシュサポートは、各クライアントアプリに対して明示的に有効にする必要があります。また、最初の手順 (Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード) で取得したプッシュネットワーククレデンシャルを提供する必要もあります。
- プロジェクトの Apps, Cloud Apps & Services セクションで Simple Cordova Push App をクリックします。
- 画面の左側にある Push をクリックします。
- Enable Push をクリックします。
- Android オプションを選択し、最初の手順で取得した Server key と Sender ID を入力します。Enable Push をクリックします。
2.2.5. クライアントアプリへの google-services.json ファイルの統合
- 画面の左側にある Editor をクリックします。
-
Editor で
wwwフォルダーを選択し、ツールバーの+記号をクリックして新しいファイルを作成してgoogle-services.jsonという名前を付けます。 -
Firebase コンソールから以前にダウンロードした
google-services.jsonファイルを開き、Editor でその内容をgoogle-services.jsonにコピーします。 - File をクリックし、次に Editor ツールバーの Save をクリックして、変更内容を保存します。
2.2.6. config.xml ファイルの設定
Firebase コンソールで定義されたパッケージ名に合わせて config.xml ファイルの widget id 設定を変更します。
2.2.7. クライアントアプリバイナリーのビルド
特別なセットアップなしで簡単にビルドできる Debug タイプの Android バイナリーをビルドします。
- 画面の左側にある Build をクリックします。
- Client Binary 画面で、Android を選択します。
- 画面の下部にある Build をクリックし、アプリがビルドされるまで待機します。Artifact History 画面の下部にある進捗状況を監視できます。
- ビルドが完了したら、ダウンロードリンクと QR コードがあるダイアログが表示されます。または、Artifact History テーブルの最初の行にある Download をクリックします。
- モバイルデバイスで、表示された QR コードをスキャンし、アプリをインストールします。
2.2.8. アプリのテスト
- モバイルデバイスで、新しくインストールされた Simple Cordova Push App を開きます。
- RHMAP で、プロジェクトを開き、Apps, Clouds & Services で Simple Cordova Push App を開きます。
- 画面の左側にある Push をクリックします。
- 画面の上部にある Send Notification to this app をクリックします。
- Message に必要な情報を入力し、他のすべてのフィールドは変更せずに、Send Push Notification をクリックします。
- すぐにモバイルデバイスが、提供されたメッセージとともにプッシュ通知を受け取ります。
2.3. MBaaS サービスからフォームフィールドに動的にデータを入力する
2.3.1. 概要
フォームビルダーで、フォームフィールドのデータソースとして MBaaS サービスのエンドポイントを使用できます。本書では、MBaaS サービスの作成、データソースの定義、およびデータソースを使用したフォームフィールドへのデータの入力を実行する方法について説明します。
フォームのデータソースの詳細については、Using Data Sources を参照してください。
2.3.2. データソースのサービスの作成
データソースを定義するには、データソースの有効な JSON 応答を提供する MBaaS サービスエンドポイントを提供する必要があります。この例では、JSON ファイルから静的なデータを提供する新しい MBaaS サービスを作成します。
- Studio で、Services & APIs に移動します。Provision MBaaS Service/API をクリックします。
- 左側にある Data Sources カテゴリーを選択します。
- テンプレート (たとえば、Static Data Source) を選択します。
- サービスの名前を選択し、そのサービスを環境にデプロイします。
2.3.3. データソースの定義
データを提供する MBaaS サービスを作成したら、データソースで使用できます。
- Studio で Drag & Drop Apps > Data Sources に移動します。New Data Source をクリックします。
- 名前と説明を設定します。両方とも必須です。
以前に作成された MBaaS サービスと、データソースとして使用するエンドポイントを選択します。
この例で使用する Static Data Source テンプレートはエンドポイント
/static_ds/monthsでデータを提供します。Validate ボタンを使用して、サービスがデータソースとして使用できるデータを返すかどうかを確認できます。確認の前に、右上隅にある環境セレクターを使用して適切な環境が選択されるようにします。
データが有効な場合は、"Success Data Source Is Valid" というメッセージが表示されます。データが有効でない場合、またはサービスに到達できない場合は、問題を示すエラーメッセージが表示されます。
有効な場合は、View ボタンを使用して返されたデータを表示できます。
- 更新頻度 (新しいデータを取得するために、設定された MBaaS サービスエンドポイントを呼び出す頻度) を選択します。更新頻度は 1 分から 7 日間までの範囲の値です。
- 監査ログに保持する MBaaS サービスエンドポイントの呼び出しからの応答の数を選択します。
- Create Data Source をクリックします。Data Source Created Successfully というメッセージが表示されます。
この時点で、フォームフィールドにデータを入力するためにフォームビルダーでデータソースを使用できます。
2.3.4. フォームフィールドでのデータソースの使用
データソースの定義後に、フォームビルダーでそのデータソースを使用できるようになります。
- Studio で、Drag & Drop Apps > Forms Builder に移動します。
- 既存のフォームを開くか、新しいフォームを作成します。Edit Form に移動します。
- サポートされるいずれかのタイプ (たとえば、Dropdown フィールド) をフォームにドラッグします。作成されたフィールドを選択します。
- Options セクションで Use a Data Source to populate field options? をチェックします。
前の手順で作成されたデータソースを選択します。
選択されたデータソースから以前に一度でもデータがロードされた場合 (作成中に検証する場合など) は、プレビューとして、データの利用可能な最新バージョンがフィールドオプションに表示されます。
右上隅にある環境セレクターを使用して同じ環境が選択されるようにします (データソースの MBaaS サービスがデプロイされます)。
- フォームを保存し、デプロイします。
Dashboard に移動すると、プレビューの右側にあるデータソースからデータが入力されたフィールドを確認できます。
2.4. アプリへの統計の追加
2.4.1. 概要
プラットフォームには、ユーザーがアクセスできるカウンターとタイマーが保持されます。一部はプラットフォームにより提供され、一部はアプリケーションの開発者が指定できます。
カウンターは、特定の機能の使用を追跡するために使用でき、増分または減分できます。プラットフォームでは、現在アクティブなサーバーサイドアクションを示すカウンター (つまり、現在実行中のモバイルアプリケーションにより呼び出されたサーバーサイド機能の数) が提供されます。
タイマーは、指定されたアクションを実行するのにかかった時間を追跡するために使用できます。プラットフォームでは、サーバーサイドアクションの実行時間を追跡するタイマーが提供されます。定期的 (プラットフォームで設定された間隔) に、現在のカウンターとタイマーが履歴にプッシュされ、ゼロに設定されます。
プラットフォームから統計を要求するときは、データを返す最近の間隔の数と破棄の間隔の長さ (ミリ秒単位) がデータとともに返されます。
タイマーデータは、間隔で発生したタイミングイベントの数 (上限値とか下限値を含む) として返されます。また、90 パーセンタイルの上限値と平均値もあります。
2.4.2. カウンターとタイマーの作成
アプリ開発者は以下のコードを使用して独自のカウンターとタイマーを作成できます。
$fh.stats.inc('COUNTERNAME'); // Increments a counter
$fh.stats.dec('COUNTERNAME'); // Decrements a counter
$fh.stats.timing('TIMERNAME', timeInMillis); // Store a timer valueクラウドアプリの統計 API の詳細については、以下のドキュメントを参照してください。
"app” の統計タイプを指定することにより、開発者のカウンターとタイマーはプラットフォームから要求できます。
カウンターのキー名はフォーム DOMAIN_APPID_app_COUNTERNAME に基づきます。ここで、DOMAIN_APPID はドメインの名前であり、APPID はアプリの ID であり、COUNTERNAME はカウンターに開発者が付けた名前です。
タイマーのキー名はフォーム DOMAIN_APPID_app_TIMERNAME に基づきます。ここで、DOMAIN_APPID はドメインの名前であり、APPID はアプリの ID であり、TIMERNAME はタイマーに開発者が付けた名前です。
2.4.3. 統計の表示
ユーザーは、Studio から統計データにアクセスしたり、コマンドラインクライアントである FHC から生データ自体にアクセスしたりできます。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.