この記事は、Yılmaz Yörü氏のブログの抄訳です
Stack Overflowは、インターネット上で最も利用されているヘルプデスクのひとつで、 開発者や技術者がスクリプトやサンプル、ソリューションを作成するのに役立ちます。公開されているプラットフォームは毎月1億人が利用しており、世界で最も人気のある50のWebサイトの1つとなっています。非同期のナレッジマネジメントとコラボレーションを提供するチーム向けのStack Overflowは、人々の働き方を変革しています。 Stack Overflowでは、無料で質問をすることができ、他のソフトウェア開発者やスペシャリストから質問の回答を受けることができます。
Table of Contents
Stack Overflow APIをWindowsアプリやモバイルアプリで操作する
素晴らしい無料の質問と回答のリソースの他に、Stack Exchange APIもあります。このAPIを使用すると、Stack Overflowサイトやその関連会社のデータを使用および操作することができます。Stack Exchange APIのドキュメントはこちらでご覧いただけます。
C++BuilderとRAD Studio IDEは、Windows、MacOS、iOS、Android等の各OS向けのシンプルなアプリケーションやプロフェッショナルなアプリケーションを構築するための、最も簡単で高速なCおよびC++のIDEおよびコンパイラです。また、豊富なサンプル、チュートリアル、ヘルプファイル、LSPサポートにより、初心者でもプログラムコードを簡単に作成し、ナビゲートすることができます。
C++Builderの入手方法
RAD Studio/C++Builderをお持ちでない方は、学生や初心者、スタートアップに最適なC++ Builder Community Editionを無料でご利用いただけます。こちらからダウンロードすることができます。また、プロフェッショナルやビジネス向けのトライアル版もあり、こちらからダウンロードできます。
RAD Studioでは、RESTサービスの利用がとても簡単!!
C++ Builderには、RESTクライアントおよびサーバーアプリケーションの開発をサポートする便利な機能があります。RESTコンポーネントと、非常に強力でありながら使いやすいRESTデバッガーを備えているため、Stack ExchangeAPIのようにJSONベースのAPIに簡単に接続できます。
RESTについて
REST(Representational State Transfer)は、Webサービスを利用したインタラクティブなアプリケーションを作成するために、データの取得や投稿を可能にする接続方法です。RESTは、HTTPのサブセットを使用します。このRESTデータ転送アーキテクチャを使用したWebサービスは、RESTfulと呼ばれます。このWebサービスは、Webリソースをテキスト形式で提供する必要があります。また、このサービスでは、ステートレスプロトコルと事前定義された一連の操作を使用して、コンテンツを読み取ったり変更したりできます。 RESTは、これらのサービスを提供するインターネット上のコンピューターシステム間の相互運用性を可能にする新しい最新のデータ転送アーキテクチャです。
RESTは、最新のデータ転送アーキテクチャであり、これらのサービスを提供するインターネット上のコンピュータシステム間の相互運用を可能にします。RESTはBackend as a Service (BaaS)であり、RESTサーバーまたはRESTクライアントアプリケーションで使用することができ、WebサービスにアクセスするためのSOAPの代替となります。
RAD Studioでは、RESTベースのWebサービスにアクセスするためのRESTクライアントライブラリをクロスプラットフォームで使用することができます(但し、DelphiとC++Builderは、サポートしているターゲットプラットホームに違いがあるのでご注意ください) 。RESTライブラリフレームワークは、表現形式としてJSONに焦点を当てています。 XMLは明示的にサポートされていません。
RAD StudioにはTCP/IP接続以外にも、FireDACによるInterBase、IB Express、MSSQL、MySQL、PostgreSQL、SQLite等へのSQL接続など、さまざまな接続オプションが用意されています。そしてRAD Studioで標準提供しているRESTコンポーネントを使用してREST接続を行うことができる、クライアントまたはサーバーとしてのRESTベースの接続機能もあります。
RESTによるStack Exchange APIの使用 – クイックビデオチュートリアル
例題に入る前に、EmbarcaderoのJim McKeethによるStack Exchange APIに関する短いビデオ(英語)をご紹介します。Stack Exchange APIとRAD Studio RESTデバッガツールの基本を視覚的に理解するのに最適なビデオです。
Stack Overflow APIを利用したサンプルの例
今回の例ではStack Exchange APIを使用し、questionsメソッド(https://api.stackexchange.com/docs/questions)でStack OverflowのWebサイトに寄せられた質問を読み取ることにします。なお、Stack Exchange APIではfilterオプションを編集して結果をカスタマイズすることもできます。
この例では、https://api.stackexchange.com/docs/questionsへアクセスし、Try Itの項目のクエリパネルの右上にあるfilterのeditオプションを選択します。(下図を参照)
デフォルトでfilterが設定されていますので、今回は以下の手順でカスタマイズします。
- 下部の「unselect all」をクリックする
- questionsセクションを開き、question_id、body、title、view_countにチェックする
- .wrapperセクションを開き、.wrapper の全ての項目はをチェックする
- カスタムしたフィルタを[save]ボタンを押して保存します
- これでフィルタをテストすることができます。[Run]ボタンをクリックすると、下図のような結果が表示されるはずです。
RESTデバッガでRESTコンポーネントを設定する
RAD Studioでは、RESTデバッガツール(RESTDebugger.exe)を提供しており、そのツールを使用して、コンポーネントを簡単にセットアップできます。
RESTデバッガツールは、$(BDS)¥binフォルダ内に配置されているRESTDebugger.exeという実行ファイルをダブルクリックするか、RADStudioのIDEメニューの[ツール] > [RESTデバッガ]を選択すると起動できます。(下図は起動したRESTデバッガの画面)
Embarcadero RESTデバッガ(最新バージョンは10.4.2)を使用すると、開発者はRESTful Webサービスがどのように動作するかを探索、テストできるため、最終的にその理解を深めることに役立てられます。フィルタリング可能なJSON blob、合理化されたOAuth 1.0/2.0認証、設定可能なリクエスト/リソースパラメータを使用して、RESTデータに直接アクセスできます。さらにRESTデバッガの[コンポーネントのコピー]によってRADStudioのフォームへRESTコンポーネントを直接コピーして貼り付けることができます。 これにより、数回クリックするだけで、DelphiまたはC++BuilderアプリでのRESTサービスの構成と利用が可能になります。
RESTデバッガは、他のRESTツールで使用可能な無償版も提供していており、こちらからダウンロードできます。
それでは、実際にRESTデバッガを使用してStack Exchange APIにアクセスしてみましょう。
(1)RADStudioのIDEメニューの[ツール] > [RESTデバッガ]を選択し、RESTデバッガを起動
(2)GETメソッドのURLに https://api.stackexchange.com/2.2/questions を設定します。(このリンクURLでは2.2というバージョンですが、今後変更される可能性があります) そしてContent-Typeをapplication/jsonに設定します。(下図を参照)
(3) [パラメータ]タブを開き、リソースの項目にquestionsを入力
(4) 要求パラメータの[追加]ボタンを押して、以下のように3つのカスタムパラメータを追加します。
パラメータ1
- 種類:GET/POST
- 名前:site
- 値:stackoverflow
- エンコードしないに無チェック
パラメータ2
- 種類:GET/POST
- 名前:tagged
- 値:C++Builder
- エンコードしないに無チェック
パラメータ3
- 種類:GET/POST
- 名前:filter
- 値:(あなたがカスタマイズしたフィルタコード)
- エンコードしないに無チェック
フィルタコードは、https://api.stackexchange.com/docs/questionsへアクセスし、カスタマイズしたフィルタコードを入力してください。下図はその例です。
(4)[要求の送信]ボタンを押すと、Responseセクションにヘッダが表示され、REST Requestを確認することができます。[表データ]セクションのタブをクリックし、JSONルート要素にItemsと入力して、[適用]ボタンを押すと下図の例のようにフィルタしたデータが表示されます。
RESTデバッガの優れた機能の1つは、Delphi/C++Builder向けアプリケーションのコンポーネントセットとして簡単にコピーできることです。RESTデバッガの [コンポーネントをコピー]を押すと、下図のようにいくつかのコンポーネントがクリップボードにコピーされます。
クリップボードにコピーされるコンポーネントはTRESTClient、TRESTRequest、TRESTResponse、TRESTResponseDatasetAdapter、TFDMemTableなどで、コビーされたコンポーネントは、フォームデザイナにそのまま貼り付けることができます。
では、実際にStack Exchange APIにアクセスするC++Builderアプリケーションを作成して試してみましょう。
C++BuilderでStack Exchange APIにアクセスするアプリケーションを作成する
(1) C++Builder向けの新しいマルチデバイスアプリケーション(FMX)のプロジェクトを作成し、すべてのユニットファイルとプロジェクトファイルをフォルダに保存します(例:StackExchangeAPI)
(2)前述のようにRESTデバッガの[コンポーネントのコピー]ボタンを押して、REST関連のコンポーネントををフォームに貼り付けてください。ペーストするとコンポーネントは重なっている表示されるため、下図のようにフォーム上のコンポーネントを名前が見えるように位置を調整してください。
(3)TStringGridとTButtonコンポーネントを1つずつフォーム上に配置してください。
それでは、取得するJSONデータをグリッドに表示するためにVisual LiveBindingを使用してみましょう。
(4)FMXのフォームデザイナ上でマウスを右クリックすると、ポップアップメニューが表示されます。表示されたメニューの[ビジュアルにバインド]を選択すると、LiveBinding デザイナが表示されます。
(5)LiveBinding デザイナの画面内のFDMemTable1を選択し、マウスをドラッグしたままStringGrid1上でマウスボタンを離してください。下図のようにFDMemTable1とStringGrid1がBindSourceDB1を介して矢印で結ばれます。
ここではVisual LiveBindingに関しては詳しく触れませんが、もしご興味がありましたらこちらのドキュメントを参照ください。
最後にRESTクライアントを利用してStack Exchange APIへアクセスし、JSONデータを取得してみましょう。
(6)Button1をダブルクリックして、OnClickイベントハンドラに以下のコードを追加してください。
[crayon-6768dfa90ef5a104821071/](7) プロジェクトをビルドして、アプリケーションを実行し、Button1をクリックすると、Stack Exchange APIへアクセスし、フィルタした結果のデータをJSON形式で取得します。TRESTRequestのExecuteを実行すると取得したJSONデータはTFDMemTableのレコードとして自動的に格納されます。上記の手順でVisual LiveBindingによってFDMemTable1とStringGrid1が連携しているため、取得したJSONデータがグリッドに表示されます。下図はその実行例です。
このようにRESTデバッガの機能を利用すると、予めREST接続に必要な情報が各コンポーネントに自動的に設定されていたので、ほとんどコードを書かずにStack Exchange APIへアクセスするアプリケーションが簡単に作成できます。
まとめ
今回Stack Exchange APIのアクセスのためにRESTデバッガを使用しましたが、RESTデバッガを使わずに手動で行うこともできます。RESTクライアントライブラリの詳しい使い方は、こちらのチュートリアルを参考ください。
もし興味がございましたら、Stack Exchange APIにサインアップして、C++Builderで試してみてください。Delphiでも可能です。(https://api.stackexchange.com/docs/questions)
C++BuilderとRAD Studio IDEは、Windows、MacOS、iOS、Android等の各OS向けのシンプルなアプリケーションやプロフェッショナルなアプリケーションを構築するための、最も簡単で高速なCおよびC++のIDEおよびコンパイラです。
C++Builderには、学生や初心者、スタートアップに最適なC++ Builder Community Editionを無料でご利用いただけます。こちらからダウンロードすることができます。プロの開発者向けに、製品版となるC++ BuilderのProfessional、Architect、Enterpriseの各バージョンを使用できます。 詳しくはこちらを参照ください。