SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

EDN CodeZine出張所(AD)

アルバムアプリをモバイル対応するためにDelphiサーバーアプリを作成してみる

コンポーネントを使ってスマホから閲覧できる写真アプリのサーバー機能をすばやく実装

  • このエントリーをはてなブックマークに追加

EMSで単純な写真閲覧アプリを作ってみる

 今回は、スマートフォンからサーバーに写真を登録できるようにするというのが主な目的なので、モバイルに対応したEMSを使ってみることにします。

 はじめに、EMS向けアプリの作り方を理解するために、写真の一覧を表示する機能を実装してみようと思います。

 これまでローカルに保存していた写真情報は、サーバーのデータベースに以下のような構造で保存してみました。

図3 データベースの構造

 EMSでは、データベースにクエリーを発行し、その結果セットをJSONデータでクライアントに送信したり、更新差分をクライアントから受け取り、データベースに反映させるコードを記述できます。主要な機能は、コンポーネントによって提供されているので、クライアントアプリケーションの構築と同様に、マウスによるドラッグ&ドロップとプロパティの設定で済んでしまいます。

EMSパッケージを作る

EMSパッケージウィザード

 RAD Studioで、「EMSパッケージ」を新規作成します。表示された「EMSパッケージウィザード」で「リソースを含むパッケージを作成する」を選びます。リソースは、EMSサーバーに追加するREST APIです。適切な名称を付けて、リソースを作成します。

図4 EMSパッケージウィザード

 リソースには、Get、GetItem、Post、PutItem、DeleteItemのエンドポイントを用意することができます。

EMSパッケージの設計画面

 作成したEMSパッケージは以下のような設計画面です。

図5 空のEMSパッケージ

 UIのないサーバーアプリでウィンドウのような画面が出てくるのは少し不思議ですが、ここには、ボタンやリストボックスなどのUI要素は置くことはできず、データアクセスやJSON処理などのロジックをカプセル化した非ビジュアルコンポーネントのみを配置できます。

 非ビジュアルとはいえ、マウス操作で配置し、オブジェクトインスペクタでプロパティとイベントを設定するというやり方は共通です。コンポーネントが用意する機能をこのようなかたちで簡単に利用できるので、実装が楽になるわけです。

コンポーネントの配置

 ここでは次のようにコンポーネントを配置します。

図6 配置したコンポーネント

 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;

次のページ
EMSパッケージの実行

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
EDN CodeZine出張所連載記事一覧

もっと読む

この記事の著者

EDN編集部(イーディーエヌ編集部)

エンバカデロ・デベロッパーネットワーク(EDN)は、ソフトウェア開発者とデータベース技術者のための技術情報サイトです。Delphi、C++Builderをはじめとする開発ツールやER/Studioなどのデータベースツールに関連する技術記事、ビデオなどを提供しています。EDN編集部は、EDN記事と連携...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9168 2015/12/24 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング