REST+JSONはコンポーネントを使ってかんたんに取得・テーブル化[JAPAN]

Posted by on in Blogs

REST+JSONをコンポーネントを使ってかんたんに取得・テーブル化

クライアント側のアプリを作る際に、サーバーサイドからREST+JSONでデータを取得すること、あるかとおもいます。 Delphi / C++Builder でiOSアプリやAndroidアプリをクロスプラットフォーム開発をするなら、アプリ側でUIを受け持ち、主要なロジックやデータベースアクセスはサーバーサイドに任せる、といった構成で作ることも多いでしょう。

このJSONデータのリクエスト、レスポンスの取得、ROOT要素によるパースとテーブル化までコンポーネントを使って、かんたんに行うことができます。

またDelphi / C++Builderの一機能の「REST デバッガ」を使うと上記の一連の設定をセミオートで行うこともできます。

この記事では、RESTデバッガを使った超簡単JSON取得の方法をご紹介します。

使用環境

項目 エディション / バージョン
OS Windows 10 Pro, 1607
RAD Studio 10.2 Tokyo, Professional Edition 以上

この記事の手順はRAD Studioのトライアル版で確認することができます。
体験版のインストールについてこちらの記事をどうぞ

RESTデバッガを使った超簡単JSON取得

利用するサーバーについて : OpenWeatherMap

JSONデータを送ってくれるサーバー例として今回利用するのはこちら:

世界各国の現在の天気、および天気予報をJSONデータで提供してくれます。 APIも用意されていてRESTで要求、JSONデータを取得することができます。

返してくれるJSONのサンプルがこちら。今回はこのサンプルを使います。

本来は id=に 天気情報として知りたいCityのコード、 APPID=に ユーザーユニークなキーを入れることになっています。APPIDを入手するにはサインアップが必要ですが、現在の天気や5日分・3時間毎の天気用法をを取得するだけなら無料のようです。きっちり試したい方はサインアップしてみるのもいいでしょう。

RESTデバッガを使用してJSON取得までの手順

ではRESTデバッガをしようしてRESTコンポーネントの準備を行い、アプリ上にJSONのデータのテーブルを表示するところまで行います。Delphi / C++Builder 共に手順は同じです。

  1. Delphi / C++Builderを起動しします。
  2. 最初に表示されている「ウェルカムページ」で[マルチデバイスアプリケーションの新規作成]をダブルクリック
  3. 「マルチデバイスアプリケーション」の種類選択ウインドウが開くので「空のアプリケーション」をクリックして選択状態にしたのち[OK]ボタンをクリックします。
  4. 空のフォームが表示された状態となります。 image.png

  5. 上部の[ツール] - [RESTデバッガ]を選択します
  6. 「RESTDebugger」ウインドウが表示されます
  7. 「要求」タブ内の「URL:」のところに先ほどのサンプルJSONが取得できるRESTのHTTPリクエストをコピペします
    • サンプルリクエストはこれ:http://samples.openweathermap.org/data/2.5/forecast?id=524901&appid=b1b15e88fa797225412429c1c50c122a1 image.png本来、"?"マークの後ろに続くid=appid= とその後ろに続くナンバー、キー情報はRESTデバッガウインドウの「認証」タブにある項目に記載すべきものです。ここでは簡単にRESTデバッガの使い方を説明するために、idもappidもリクエストURLの中に入れ込んでいます。 実際には「認証タブ」内のメソッドを「SIMPLE」に設定し、ユーザー名キーに[id], ユーザー名にCity ID、パスワードキーに[appid], パスワード欄にユーザーユニークキーを入力することになります。
      ※追記:appidはパスワード欄に入れるのではなく、「パラメーター」タブの中のパラメータとして登録するのがより好ましい手順です。 
      image.png 

  8. ウインドウ右側の[要求の送信]ボタンをクリックします。レスポンスが返ってきて、ヘッダー情報が下部の「応答」欄に表示されますimage.png 

  9. 「応答欄」の 「本体」タブをクリックすると受信したJSONデータを見ることができます。
  10. 「応答欄」の「表データ」タブをクリックすると受け取ったJSONデータがテーブルに表示されています。しかし、ROOT要素によるパースが割れていないので、一行で表示されています。 image.png

  11. ROOT要素となる[list]カラムをクリックすると「JSONルート要素」の項目に [list]が入力されます。
  12. [適用ボタン]をくりっくすると、ROOT要素によって解析され、あらたにテーブルとして表示されます。 image.png

  13. 「RESTデバッガ」ウインドウの右側中央にある[コンポーネントのコピー]ボタンをクリックします
    image.png
    こんなダイアログが表示されます。[OKボタンをクリックしてください]

  14. 「RESTDebugger」ウインドウの右上の[X]をクリックして閉じます。
  15. IDEの[編集] - [貼り付け Ctrl+V]を選択します
  16. フォーム上に下記の4つのREST関連コンポーネントと1つのMemTableが張り付けられます。
    これでRESTリクエスト、JSONデータを受け取る準備がすでにできています。先ほどのRESTデバッガで行ったURLやROOT要素のパースの設定など、すべて上記のコンポーネントに組み込まれています。
    • RESTClient1
    • RESTRequest1
    • RESTResponse1
    • RESTResposeDataSetAdapter1
    • FDMemTable1
      image.png 

  17. FDMemtableにはROOT要素によってテーブル化されたJSONデータが格納されます。このデータを評して確認できるようにします。FDMemTable1を右クリックして表示されるコンテキストメニューから[ビジュアルにバインド]を選択します。
  18. RAD Studio下部に「LiveBindingデザイナ」が表示されます。この中の「FDMemTable1]を右クリックしして[新規コントロールにリンク…]を選択します。
  19. 「新規コントロールにバンド」ダイアログが開くので[TGrid]をクリックして選択し、[OK]ボタンをクリックします。 image.png
  20. フォーム上に「GridBindSourceDB1」という名称のTGridコンポーネントが追加されます。
  21. 「GridBindSourceDB1」のプロパティの「Align」を[Client]に設定し、Form全体に表示されるようにしておきます。

  22. REST要求を実行するコードを書きます。左上のペインで[Form1]をクリックして、左下の「オブジェクトインスペクタの「イベント」タブをクリックし、[OnCreate]イベントの右側空白部分をダブルクリックしてFormCreateイベントのコード記述部分を開きます。

  23. FormCreateイベントでRESTRequestコンポーネントのメソッドを使って要求を実行します。下記のコードを記載してください。

//delphiのコード
procedure TForm1.FormCreate(Sender: TObject);
begin
  //REST要求を実行してJSONデータ取得
  RESTRequest1.Execute;
end;
//cppBuilderのコード
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  //REST要求を実行してJSONデータ取得
  RESTRequest1->Execute();
}
//---------------------------------------------------------------------------

以上でREST周りの設定、表示が整いました、F9キーもしくは「実行」ボタンを押してビルドしてください!

image.png

ごく簡単な手順でREST要求、JSONデータの取得、ROOT要素の解析によるテーブル化、ができました。
またTMemTableのメモリテーブル内ではJSONのメンバがフィールド名として扱われ、カラム名として表示されているているので、大変便利であります。

今回使用したRESTコンポーネントについて

 



About
Gold User, No rank,
Sales consultant - Embarcadero Technologies , at Japan Twitter : @kazaiso

Comments

Check out more tips and tricks in this development video: