CONNECTING TO DATA

Connecting to REST data

Noodlはデータでデザインすることにほかなりません。本物のデータで稼働するプロトタイプを作り、それを本物のシナリオとユーザーでテストすることができます。これは通常であれば、仲間のコーダー(もしくはずっと受けようと思っていたJavascriptのオンラインコースをようやく受講し始めたあなた)の助けを必要とするものです。しかしながら、私たちがその助けになるような仕様を加えましたのでそちらを紹介します。

Open Weather Map API

例として、Open Weather MAP APIを使用します。あるロケーションの天気を調べることができるクラウドサービスです。これは、共通のパターンを多く使う他のRESTクラウドサービスの良い例となります。Open Weather Map APIはhereから。

API Key

ほとんどのケースでは、RESTクラウドサービスにアクセスする場合は、API キーを必要とします。この場合、API keysに登録し、APIキーを探さなくてはなりません。

後に必要になるため、APIキーはメモしておきましょう。

The endpoint

一般的にRESTのサービスには、リクエストを行うエンドポイントがあります。これはサービスからデータを取るために使用する、全てのURLのベースにすぎません。 エンドポイントは通常、REST APIのドキュメントにあります。今回の場合、エンドポイントはこちら:

http://api.openweathermap.org/data/2.5

The resource

リソースは、一般にURLのエンドポイントの後に続くもので、RESTパターンでは、取得または変更しようとしているもの(POSTリクエストの場合)を特定する必要があります。

このガイドでは、特定の都市の天気予報のデータを取得しますので、/forecastリソースを使用します。 使用可能なさまざまなリソースについての詳細は、APIドキュメントを参照してください。

The REST node

RESTサービスにリクエストするときは、RESTノードを使用することがお勧めです。まず、RESTノードを作成し、以前に収集した情報を入力しましょう。

次のRESTノードの仕事は、ノードの入力を受け取り、それらをREST要求にリフォーマットすることです。 これはすべて、RESTノードに接続された小さなJavascriptスクリプトで実行されます。 RESTノードの詳細については、documentationを参照してください。

以下がRESTノードに使用するスクリプトです。デフォルトのテンプレートスクリプトを置き換えるノードのスクリプトにこれをコピーしてください。:

Code

define({
  // The input ports of the REST node, name of input and type
  inputs:{
      apiKey:'string',
      city: 'string'
  },
  
  // The output ports of the REST node, name of output and type
  outputs:{
      city:'string',
      country:'string',
      weather:'string',
      lat:'number',
      long:'number',
      windangle:'number',
      windspeed:'number',
      temperature:'number',
      humidity: 'number'
  },
  
  //Add custom code to setup the request object before the request
  //is made.
  //
  //*request.resource     contains the resource path of the request.
  //*request.method       contains the method, GET, POST, PUT or DELETE.
  //*request.headers      is a map where you can add additional headers.
  //*request.parameters   is a map the parameters that will be appended
  //                      to the url.
  //*request.content      contains the content of the request as a javascript
  //                      object.
  //
  // The inputs and outputs maps can also be accessed via *this.inputs and
  // *this.outputs.
  request:function(inputs,request) {        
    request.parameters.APPID = inputs.apiKey;
    request.parameters.q = inputs.city; 
    request.parameters.v = inputs.country;
  },
  
  // Add custom code to convert the response content to outputs
  //
  //*response.status    The status code of the response
  //*response.content   The content of the response as a javascript
  //                    object.
  //*response.request   The request object that resulted in the response.
  //
  // The inputs and outputs maps can also be accessed via *this.inputs and
  // *this.outputs.
  response:function(outputs,response) {
      outputs.city = response.content.city.name;
      outputs.country = response.content.city.country;
      outputs.lat = response.content.city.coord.lat;
      outputs.long = response.content.city.coord.lon;
      outputs.weather = response.content.list[2].weather[0].description;
      
      outputs.windangle = response.content.list[2].wind.deg;
      outputs.windspeed = response.content.list[2].wind.speed;
      
      outputs.temperature = response.content.list[2].main.temp;
      outputs.humidity = response.content.list[2].main.humidity;
      
  }
})

これで、RESTノードは、リクエストに必要なデータに相関し、レスポンスで利用可能な入力と出力の両方を持ちます。 これで、APIキーと都市を提供し、RESTノードの Fetch入力に信号を送信すると、クラウドサービスへのリクエストが実行されます。

最初に、上記のrequest関数が呼び出されます。この関数は、ノードの入力を使用してリクエストをフォーマットします。

レスポンスが受信されると、上記のresponse関数で指定されたとおりに解析され、ノードの出力が設定されます。

RESTノードが機能したら、ノードを含んだコンポーネントを作成するのに最適な状況が整います。この作業を繰り返す必要はなく、RESTノードをコピー&ペーストする必要もありません。したがって、リクエストで何かを変更する必要がある場合は、1か所で行うだけで済みます。

これはRESTノードの基本に過ぎません。ライブデータでプロトタイプや実験を簡単に設計できるよう、クラウドサービスとデータをデザイナーや開発者に公開することができます。