もしあなたがリーダーシップの座を駆け上がっていく過程が私と同じようなものであれば、ある時点で、概念的には理解しているものの、実際に実践したことのない技術について話していることに気づく、という小さなひらめきを経験したことがあるかもしれません。RESTful API(Representational State Transfer Application Programming Interface)は、私にとってまさにそのような技術の一つです。
参照:ITリーダーのための技術プロジェクト:ホームラボの構築、自宅の自動化、Node-REDのインストール方法など(無料PDF)(TechRepublic)
編集者注:この6部構成のホームラボシリーズの他の記事もぜひご覧ください。ホームラボの構築方法、ホームラボ用ソフトウェア、ホームラボにNode-REDを追加する方法と理由、Node-REDのRESTful APIを使用してホームオートメーションプロジェクトを構築する方法、そしてIoTをホームオートメーションに活用する方法。ITリーダー向けのその他の技術プロジェクトにもご期待ください。
RESTful API入門
概念は実にシンプルです。アプリケーションは特別な HTTP アドレスを「呼び出し」て情報を要求または更新し、その要求に対する応答を受け取ることができます。RESTful API の強みは、呼び出し元がその応答の提供に使用されたテクノロジーについて一切知らされないよう、隠蔽または抽象化できる点にあります。2 つの数値を合計する RESTful API を呼び出す場合、そのアプリケーションがカスタム スーパーコンピューターで実行されているか、UNIX サーバーで実行されているか、あるいは 12 人の人間が画面を見て素早く応答を入力しているかを気にする必要はありません。同様に、API 自体も、それを呼び出すアプリケーションの技術的な考慮事項を一切考慮する必要はありません。API 開発者は、想定されるパラメーターと結果のセットを提供します。アプリケーションが Python、C++、あるいは Postman のようなテストツールを使用しているかは問題ではありません。ドキュメントに従って適切なパラメーターを指定すれば、API から応答を受け取ることができます。
参照:効果的な RESTful Web サービスを作成するために実行すべき 10 のこと(TechRepublic)
ご想像のとおり、インターネット経由で無料でアクセスできる数百万もの API にアクセスできるようになると、既存の API を使用して新しいツールやアプリケーションを迅速かつ簡単に作成できるようになります。
APIの使い方
この技術プロジェクトでは、優れたビジュアルインターフェースを提供するNode-REDを使用し、その日にジャケットが必要かどうかを判断するシンプルなNode-REDフローを作成します。このフローをマルチカラー電球に「接続」して、ジャケットが必要かどうかを示したり、音声アシスタントやPushoverのようなアプリを使って毎朝スマートフォンに通知を送信したりすることも可能です。Home Labプロジェクトをまだフォローしていない、またはNode-REDにアクセスできない場合でも、Google Chromeウェブブラウザから前述のPostmanツールまで、RESTful APIを操作できるツールは数多くあります。
参照: Android アプリから RESTful サービスを呼び出す(TechRepublic)
RESTful APIを使うための最初のステップは、どのAPIを使いたいかを決めることです。Google検索は良い出発点となることが多く、「無料天気API」で簡単に検索したところ、Open Weather Mapにたどり着きました。ほとんどのパブリックAPIはアクセスキーが必要です。これらのキーはAPIの使用状況を追跡し、一定回数のAPI使用(ヒット)を超えると料金が発生する場合があります。支払いの基準額は通常十分に高いので、ほとんどのパブリックAPIは個人的なプロジェクトで無料で試用できます。アカウントを作成し、メールアドレスを確認すると、受信トレイにAPIキーが届きます。
ほとんどのAPIは、エンドポイントアドレス(APIを呼び出すためのURL)と、必要なパラメータのリスト、そして返されるデータを指定します。ここでは、Open Weather MapのサイトにあるCurrent Weatherエンドポイントを使用します。
Node-REDでモノを接続する方法
Node-REDは、API駆動型アプリケーションのセットアップ作業を軽減し、ホームオートメーションのルーチンにAPIを組み込むための優れた方法、あるいは新しいAmazon Alexaスキルからモバイルアプリケーションまで、あらゆるものに組み込みたいロジックをテストするための「スケッチパッド」として機能します。今回のケースでは、まず「http request」ノードを新しいフローに追加します。このノードを使用すると、任意のRESTful APIを呼び出し、その結果を後続の処理に渡すことができます。
ノードをダブルクリックすると、パラメータが表示されます。「メソッド」を選択すると、APIとのやり取り方法を選択できます。多くのAPIはCRUD(作成、読み取り、更新、削除)機能を提供しています。残念ながら、現在の天気を作成または削除することはできないため、GETメソッドを使用します。
URLはAPIのアドレスと、提供したいパラメータです。Open Weather Mapのドキュメントによると、URLは次のようになります。
api.openweathermap.org/data/2.5/weather?q={都市名}&appid={APIキー}
都市名とAPIキーを、天気情報を取得したい都市とAPIキーを指定するパラメータに置き換える必要があります。私の場合、シャーロットの天気情報を取得するには、URLは次のようになります(ダミーキーを使用)。
api.openweathermap.org/data/2.5/weather?q=シャーロット、ノースカロライナ州、米国&appid=123456
これをノードの「URL」フィールドに貼り付けます。次の重要な要素は「Return」フィールドです。これは、Node-REDがAPIのレスポンスをどのように処理するかを指定します。一般的には、「解析済みJSONオブジェクト」を選択するのが適切です。JSON(JavaScriptオブジェクト表記法)は、APIからデータを構造化された形式で返します。この形式では、データを操作して他のノードに送信できます。ノードに名前を付け、「完了」をクリックしてパラメータを閉じます。私の場合、ノードは図Aのようになります。
図A
httpリクエストノードは寂しそうに見えるかもしれません。Node-REDを初めて使う方は、どうやって起動すればいいのかわからないかもしれません。ノードには左側(入力側)と右側(出力側)のどちらか一方にコネクタがあり、このhttpリクエストノードには両方あります。つまり、ノードを起動するには左側にトリガーが必要で、トリガーがノードの右側に結果を渡します。フローチャートがデータの流れを表すために接続を必要とするのと同様に、Node-REDでもコネクタを使ってデータをフローに導きます。
テスト用の最もシンプルなトリガーはInjectノードです。これは、左側の四角形が押されたときにタイムスタンプを送信します。最もシンプルな出力はDebugノードで、受信したデータを表示します。これら2つのノードを追加し、コネクタで接続すると、図Bに示すようなシンプルで機能的なNode-REDフローが完成します。
図B
これらの変更が完了したら、Node-REDウィンドウの右上にある赤い「デプロイ」ボタンをクリックします。これにより、変更がサーバーに保存され、フローをテストできるようになります。
フローをテストするには、右側のメニューにある小さなバグアイコンをクリックしてデバッグタブを開きます。デバッグパネルを開いた状態でタイムスタンプノードのボタンをクリックすると、APIからの出力がオブジェクトとして表示されます。オブジェクトとは、オブジェクトを設計した人によって整理された、関連するパーツの集合体です。例えば、自転車のオブジェクトにはホイールとチェーンが含まれています。これらのオブジェクトはさらに細分化できます。例えば、ホイールオブジェクトにはスポーク、タイヤ、チューブのオブジェクトが含まれます。これは現代のアプリケーションの基本要素であり、Node-REDを使用すると、これらのオブジェクトを簡単に表示およびアクセスできます。
Node-REDでは、ノードは通常メッセージオブジェクトを作成し、そのデータをペイロードに保存します。そのため、デバッグノードの説明には「msg.payload」と表示されています。この場合、msg.payloadにはOpen WeatherのAPIドキュメントに基づく天気オブジェクトが含まれており、「展開」アイコンをクリックすると、Open Weatherが提供するすべてのデータが表示されます(図C)。
図C

Open Weatherコードのスクリーンショット
オブジェクトの様々な部分を閲覧するだけで、APIの威力が実感できるはずです。数分の検索と比較的シンプルなHTTP URLで、選択した場所の現在の天気に関する豊富なデータにアクセスできました。APIは、地方自治体や中央政府が提供する人口統計データから荷物追跡まで、あらゆるデータに存在し、開発者はさまざまなAPIを接続することで、新しい機能を迅速に構築できます。次回の金曜日の投稿では、APIデータを用いて意思決定を行います。

画像: iStock/anyaberkut