EMSで単純な写真閲覧アプリを作ってみる
今回は、スマートフォンからサーバーに写真を登録できるようにするというのが主な目的なので、モバイルに対応したEMSを使ってみることにします。
はじめに、EMS向けアプリの作り方を理解するために、写真の一覧を表示する機能を実装してみようと思います。
これまでローカルに保存していた写真情報は、サーバーのデータベースに以下のような構造で保存してみました。
EMSでは、データベースにクエリーを発行し、その結果セットをJSONデータでクライアントに送信したり、更新差分をクライアントから受け取り、データベースに反映させるコードを記述できます。主要な機能は、コンポーネントによって提供されているので、クライアントアプリケーションの構築と同様に、マウスによるドラッグ&ドロップとプロパティの設定で済んでしまいます。
EMSパッケージを作る
EMSパッケージウィザード
RAD Studioで、「EMSパッケージ」を新規作成します。表示された「EMSパッケージウィザード」で「リソースを含むパッケージを作成する」を選びます。リソースは、EMSサーバーに追加するREST APIです。適切な名称を付けて、リソースを作成します。
リソースには、Get、GetItem、Post、PutItem、DeleteItemのエンドポイントを用意することができます。
EMSパッケージの設計画面
作成したEMSパッケージは以下のような設計画面です。
UIのないサーバーアプリでウィンドウのような画面が出てくるのは少し不思議ですが、ここには、ボタンやリストボックスなどのUI要素は置くことはできず、データアクセスやJSON処理などのロジックをカプセル化した非ビジュアルコンポーネントのみを配置できます。
非ビジュアルとはいえ、マウス操作で配置し、オブジェクトインスペクタでプロパティとイベントを設定するというやり方は共通です。コンポーネントが用意する機能をこのようなかたちで簡単に利用できるので、実装が楽になるわけです。
コンポーネントの配置
ここでは次のようにコンポーネントを配置します。
FDConnectionは、データベース接続を担当するコンポーネントです。EMSでも、データアクセスコンポーネントのFireDACが使え、主要なRDBMSへの接続をコンポーネントによって行えます。
FDQueryは、アルバムテーブルへのクエリーです。この結果セットをJSON形式でストリームに流し込むためのしくみを用意するのが、FDSchemaAdapterとFDStanStorageJSONLinkです。これらのコンポーネントを使うことで、コードを記述することなく、結果セットをJSON形式の文字列に変換できます。
エンドポイントの実装コード
次に、クライアントリクエストに応答するコードを記述します。今回は一覧を表示するだけなので、エンドポイントは、Getのみを実装します。コードは次のようになります。詳細な処理はすべてコンポーネントにまかせているので、わずか数行で済みます。
procedure; TMyAlbumResource1.Get(const; AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse); var; oStr: TMemoryStream; begin; oStr := TMemoryStream.Create; try; // アルバム一覧をオープン FDQuery1.Open; // FDQueryに結び付けられたアダプタを使ってストリームにJSON形式で保存 FDSchemaAdapter1.SaveToStream(oStr, TFDStorageFormat.sfJSON); // 応答内容にストリームを設定 AResponse.Body.SetStream(oStr, 'application/json', True); except; oStr.Free; raise;; end;; end;