7.4.6. RESTful API
RESTful APIの使用を開始するにはトークンを生成する必要があります。
このトークンはGETまたはPOSTメソッドに含める必要があります。表7-4はRESTful APIの詳細です。
HTTPヘッダーのContent-Typeはapplication/x-www-form-urlencodedである必要があります。
表7-4 RESTful API
REST API | HTTPメソッド | 説明 | ||
---|---|---|---|---|
/api/user/get/api_token | GET | RESTful APIトークンを取得する。 指定可能なパラメーター: p LoRaWAN®サーバーのパスワード 例: /api/user/get/api_token?p=xxxx
応答: このAPIはREST APIのトークンを取得するために使用されます。 APIトークンを取得するには、HTTP GETメソッドのクエリパラメータとしてパスワード「p」を渡す必要があります。 応答はJSONオブジェクトで、status、token、expired_timeの3つの項目があります。 satusは「OK」か「FAILED」です。 tokenはREST APIにアクセスするためのトークンです。 expired_timeは1970/01/01 00:00:00からのミリ秒単位の有効期限です。 | ||
/api/user/generate/api_token | GET | RESTFul APIトークンを再生成する。
指定可能なパラメーター: p LoRaWAN®サーバーのパスワード 例: /api/user/get/api_token?p=xxxx 応答: このAPIはREST APIのトークンを再生成するために使用されます。 APIトークンを取得するにはHTTP PostメソッドのPOST BODY内にパスワード「p」が必要です。 応答はJSONオブジェクトで、status、token、expired_timeの3つの項目があります。
tokenはREST APIにアクセスするためのトークンです。 expired_timeは1970/01/01 00:00:00からのミリ秒単位の有効期限です。 | ||
/api/device/uplink | GET | 指定した時間範囲でデバイスのアップリンクデータを取得します。 指定可能なパラメーター: start データレコードをスキップする番号。 length 返されるデータレコードの最大数。 deveui アップリンクデータを取得するデバイスを指定します。 ftime アップリンクデータレコードをフィルタリングする時間範囲の開始時間。 ttime アップリンクデータレコードをフィルタリングする時間範囲の終了時間。 応答: JSONオブジェクトにはcountとdataの2つが含まれます。 countは返されるレコードの数です。 dataはアップリンクデータの配列です。 各アップリンクデータは「7.4.1. ダウンリンクおよびアップリンクデータのJSON形式」に記載された別のJSONオブジェクトです。 配列内のデータの順序は時間の降順です。最新のデータは配列の先頭にあります。 | ||
/api/device/downlink | POST | ダウンリンクデータを送信してデバイスを指定します。 deveui ダウンリンクを送信するデバイスのDevice EUI。 port ダウンリンクを送信するデバイスのポート番号。 data 16進数のダウンリンクデータ。このフィールドはbase64を受け入れません。 txpower ダウンリンクの送信電力(txpower)。値の範囲は1〜20です。 | ||
/api/device/list | GET | デバイスリストを取得します。 指定可能なパラメーター: start デバイスをスキップする数。 length 返されるデバイスの最大数。 deveui デバイスを検索するための正規表現文字列。 応答: JSONオブジェクトにはcountとdeviceの2つが含まれます。 countは返されるレコードの数です。 deviceはデバイスの配列です。 各デバイスは「7.3.2. LoRaWAN®デバイス管理」に記載された別のJSONオブジェクトです。 | ||
/api/device/create | POST | デバイスを作成します。 指定可能なパラメーター: deveui Device EUIの8バイトの16進数。 devaddr Device Addressの4バイトの16進数。 activate アクティベーション方法: abpまたはotaa。 lorawan_class LoRaWAN®クラス: AかC appeui Application EUIの8バイトの16進数。 appkey Application Keyの16バイトの秘密キー。 appskey Application Session Keyの16バイトの秘密キー。 nwkskey Network Session Keyの16バイトの秘密キー。 devname オプションのフィールド。作成されたデバイスの名前。 appid オプションのフィールド。作成されたデバイスのアプリケーションタイプ。 lorawan、sensor、tracker、las_sensor、airq_sensor、smoke_sensor、watermeter、gba_sensor light_sensor、parking_sensor、ble_sensor、netvox_r311a、netvox_rb11eです。 rx_window オプションのフィールド。デバイスの有効なRXウィンドウです。 「rx1」「rx2」「both」のいずれかです。 値が「rx1」「x2」「both」と等しくない場合、「rx1」を指定したことになります。 rx2_freq オプションのフィールド。デバイスのMhz単位のRX2ウィンドウ周波数です。 rx_windowが「rx2」「both」に等しい場合のみ有効になります。 この値が割り当てられていない場合、システムは選択されたchannel_planに従って適切なrx2_freqを選択します。 rx2_dr オプションのフィールド。デバイスのRX2ウィンドウDataRate。 サポートされるデータレートには、「DR0」「DR1」「DR2」「DR3」「DR4」「DR5」が含まれます。 この値が割り当てられていない場合、システムは選択されたchannel_planに従って適切なrx2_drを選択します。 relax オプションのフィールド。 「true」はリラックスカウンターチェックを有効にし、「false」は無効にします。 値が「true」でも「false」でもない場合、「true」を選択したことになります。 relax_counter_length オプションのフィールド。 リラックスカウンターの長さ。 32または16で、relaxフィールドが有効(relax = true)になっている場合のみアクティブになります。 値が32または16に等しくない場合、自動的に32に調整されます。 channel_plan オプションのフィールド。 デバイスのチャネルプラン。 現在サポートされているチャネルプランは次のとおりです。 EU863-870 チャネルプランが上記のオプションと等しくない場合、「AS923」が選択されたことになります。 adr オプションのフィールド。「true」はデバイスADRを有効にし、「false」は無効にします。 値が「true」でも「false」でもない場合、「true」が選択されたことになります。 cflist オプションのフィールド。デバイスのJoinAccepet CFList ID。 CFListはデバイスの作成後に作成できます。 | ||
/api/device/delete | POST | デバイスを削除します。 deveui Device EUIの8バイトの16進数。 | ||
/api/cflist/list | GET | CFlistを取得します。 このAPIはCFList情報を取得するために使用されます。 LoRaWAN®サーバーからデバイスメタデータをプルバックするために、APIトークンをHTTP GETメソッドのクエリパラメーターとして渡す必要があります。 応答はJSONオブジェクトです。 TYPE、COUNT、LISTの3つの項目があり、TYPEは「cflist」である必要があります。 COUNTはCFList内のアイテムの数です。LISTはcflist内のアイテムのIDによる昇順です。 指定可能なパラメーター: start 応答の開始点。 length CFListの返される最大数。 | ||
/api/cflist/create | POST | CFListを作成する。 id CFList ID name CFList Name freq1 Mhz単位のCFListの「Frequency 1」 freq2 Mhz単位のCFListの「Frequency 2」 freq3 Mhz単位のCFListの「Frequency 3」 freq4 Mhz単位のCFListの「Frequency 4」 freq5 Mhz単位のCFListの「Frequency 5」 | ||
/api/cflist/delete | POST | CFListを削除する。 id CFList ID | ||
/api/post/list | GET | HTTP POST URLリストを取得します。 | ||
/api/post/update | POST | HTTP POST URLリストを更新します。 posts POST URLを記述するJSONオブジェクトを含むJSON配列。 clearall すべてのPOST URLをクリアする場合は、clearallを1に設定します。 |
リスト7-2とリスト7-3 は、RESTful APIを使用してアップリンクデータを取得してデバイスを作成する、Go言語で記述された2つの例を示しています。
リスト7-2 アップリンクデータを取得するGoの例
package main import ( "fmt" "net/http" "io/ioutil" ) func main() { resp,_ := http.Get("http://192.168.0.111:8080/api/device/uplink?token=c0b2843c2e744bdc2a19d1b8fc9b176b") defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) fmt.Println(string(body)) }
リスト7-3 デバイスを作成するGoの例
package main import ( "strings" "fmt" "net/http" "io/ioutil" ) func main() { resp, _:= http.Post("http://192.168.0.111:8080/api/device/create","application/x-www-form-urlencoded",strings.NewReader("token=c0b2843c2e744bdc2a19d1b8fc9b176b&deveui=000b78fffeabcdee&devaddr=feabcdee&lorawan_class=A&activate=abp&appskey=2b7e151628aed2a6abf7158809cf4f3c&nwkskey=2b7e151628aed2a6 abf7158809cf4f3c")) defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) fmt.Println(string(body)) }