6.1. ICE Backend API¶
6.1.1. はじめに¶
6.1.1.1. 表記について¶
環境によって値の異なるものについて、本文中で以下のように表記します。
{バージョン}
Backend APIのメジャーバージョンの値です。(例:バージョン1.0の場合は「1」)
6.1.1.2. 用語定義¶
本章で使用する用語について以下のように定義します。
オブジェクト
エッジ上の管理対象物(コンテキスト、プロセッサ、トポロジ、エッジアプリケーション、デバイスアダプタ、デバイス)のこと
オペレーション
エッジアプリケーションやデバイスに対して指示・通知メッセージを送信すること
メタデータ
エッジやオブジェクト、オペレーション、ファイルなどを管理するための情報を記述したデータ
イベントデータ
デバイスやエッジアプリケーションから発生する様々なデータ
6.1.2. 機能概要¶
エッジの運用管理やファイルアップロード、エッジから送信されたデータにアクセスするためのREST APIを提供します。
Backend APIの主な機能を以下に列挙します。
ファイルアップロード
エッジ向けに配信するファイルをバックエンドにアップロードします。
オペレーション実行
エッジアプリケーションやデバイスなどのオブジェクトに対して指示・通知メッセージを送信します。オブジェクト側でオペレーションメッセージ受信時の挙動を実装する必要があります。
メタデータ管理
エッジやオブジェクト、アップロードしたファイル、実行したオペレーションのメタデータを管理します。
イベントデータ管理
デバイスやエッジアプリケーションが送信したイベントデータを管理します。
Backend APIは以下のインタフェースを備えます。
Entity Abstraction I/F
エッジやオブジェクトのメタデータ参照やオペレーション実行を行うインタフェースです。エッジやオブジェクトは、それぞれedge_id、object_idというユニークなIDによって識別します。API実行時には、これらのIDを指定することで特定のエッジ・オブジェクトのメタデータ参照やオペレーション実行が可能です。
Data Access I/F
エッジから送信されたイベントデータを参照するためのインタフェースです。イベントデータはdata_typeによってデータ種別を識別します。
Operation Management I/F
エッジに対して実行したオペレーションのメタデータや実行結果を参照するためのインタフェースです。オペレーション情報や実行結果はop_idというオペレーションに紐づいたユニークなIDによって識別します。
File Management I/F
ファイルのアップロードや、アップロード済みのファイル管理を行うためのインタフェースです。ファイルはfile_idというユニークなIDによって識別します。
Management Application I/F
管理アプリケーションに対するオペレーション実行やオペレーションの実行結果参照、管理アプリケーションが送信したイベントデータ参照を行うインタフェースです。
![overview](../../../../../_images/restapi_overview.png)
6.1.3. エッジの管理¶
エッジやオブジェクトの管理は、Entity Abstraction I/Fにより行います。 エッジの起動時に各管理対象のメタデータがバックエンドに送信され、Entity Abstraction I/Fの GETメソッドにより参照可能となります。 オブジェクトへのオペレーションを実行する場合、PUTメソッドを使用します。オペレーションタイプはop_typeパラメータで指定します。groupパラメータを使用することで、あるグループに含まれる複数のエッジに対して一斉にオペレーションを実行することができます。エッジがどのグループに含まれるかは、ICE Coreのプロファイルにて設定可能です。リクエストボディに、送信するメッセージの内容を記載します。リクエストボディのサイズ上限は100KBです。 実行されたオペレーションのメタデータや、オペレーションの実行結果は、Operation Management I/Fから参照できます。オペレーションを受け取るオブジェクト側の実装でオペレーション実行結果を返却している場合のみ、オペレーション実行結果を参照可能となります。
Entity Abstraction I/Fの管理対象一覧を以下に示します。(管理アプリケーションはManagement Application I/Fで扱います。)
管理対象 | サポートするオペレーションタイプ | 説明 |
---|---|---|
エッジ | ― | ICE Core本体です。 |
コンテキスト | ― | ICE Coreのコンテキストです。 |
プロセッサ | ― | ICE Coreのプロセッサです。 |
トポロジ | ― | ICE Coreのトポロジです。 |
エッジアプリケーション | message, download | エッジ上で動作するエッジアプリケーションです。 |
デバイスアダプタ | message | エッジ上で動作するデバイスアダプタです。 |
デバイス | message | デバイスアダプタに紐づけられたデバイスです。 |
LwM2Mデバイス | listObservers, cleanObservers, discover, create, delete, read, write, execute, writeAttributes, observe, cancelObserver | エッジ上で動作するLwM2Mデバイスです。 |
エッジのメタデータは下記のようなフォーマットでDBに格納されます。 edge_idがユニークキーになります。
{
"_id": "{ID}", //データベースが自動で付与するID
"edge_id": "{Edge ID}", //エッジID
"flow_id": "{Flow ID}", //フローID
"type": "edge_register", //メッセージのタイプ(内部処理に使用)
"marked": false, //既読フラグ
"updated_at": "2016-12-02T12:27:34.126Z", //データを挿入・更新した日時
"payload": { JSONオブジェクト } //ICE Coreのプロファイル
}
オブジェクトのメタデータは下記のようなフォーマットでDBに格納されます。 app_typeはエッジアプリケーションのみのフィールドです。管理アプリケーションの場合を除き、値は”ua”となります。 {edge_id, object_id, object_type}がユニークキーになります。
{
"_id": "{ID}", //データベースが自動で付与するID
"edge_id": "{Edge ID}", //エッジID
"flow_id": "{Flow ID}", //フローID
"type": "object_register", //メッセージのタイプ(内部処理に使用)
"object_id": "{Object ID}", //オブジェクトID
"object_type": "{Object Type}", //オブジェクト種別(device、edge_applicationなど)
"app_type": "ua", //アプリケーション種別
"marked": false, //既読フラグ
"updated_at": "2016-12-02T12:27:34.126Z", //データを挿入・更新した日時
"payload": { JSONオブジェクト } //オブジェクトのプロファイル
}
6.1.3.1. オペレーション種別¶
オペレーション実行時に指定するオペレーション種別(op_type)について説明します。
message
任意のJSONメッセージをオブジェクトに送信します。リクエストボディの内容がそのままオブジェクトに渡されます。
download
ファイル配信を行う場合に使用します。エッジアプリケーションへのオペレーションとして実行します。
downloadは旧互換のための機能であり、messageを使用してダウンロード処理を実装することを推奨します。
以下のフォーマットでJSONメッセージをリクエストボディに指定します。
{ "url": "{Url}", //ファイルのダウンロードURL "condition": { //エッジアプリケーションに渡すプロパティ(エッジアプリケーションの実装内で任意に使用) } }
listObservers
LwM2MのlistObserversオペレーションを実行します。リクエストボディは使用しません。
cleanObservers
LwM2MのcleanObserversオペレーションを実行します。リクエストボディは使用しません。
discover
LwM2Mのdiscoverオペレーションを実行します。
以下のフォーマットでJSONメッセージをリクエストボディに指定します。Objectの発見を行う場合はlwm2m.object_idのみを指定し、Resourceの発見を行う場合はlwm2m.object_idとlwm2m.object_instance_idの両方を指定します。
{ "lwm2m": { "object_id": "{Object ID}", //LwM2MのObject IDを指定 "object_instance_id": "{Object Instance ID}" //LwM2MのObject Instance IDを指定 } }
create
LwM2Mのcreateオペレーションを実行します。
以下のフォーマットでJSONメッセージをリクエストボディに指定します。
{ "lwm2m": { "object_id": "{Object ID}", //LwM2MのObject IDを指定 "object_instance_id": "{Object Instance ID}" //LwM2MのObject Instance IDを指定 } }
delete
LwM2Mのdeleteオペレーションを実行します。
以下のフォーマットでJSONメッセージをリクエストボディに指定します。
{ "lwm2m": { "object_id": "{Object ID}", //LwM2MのObject IDを指定 "object_instance_id": "{Object Instance ID}" //LwM2MのObject Instance IDを指定 } }
read
LwM2Mのreadオペレーションを実行します。
以下のフォーマットでJSONメッセージをリクエストボディに指定します。
{ "lwm2m": { "object_id": "{Object ID}", //LwM2MのObject IDを指定 "object_instance_id": "{Object Instance ID}", //LwM2MのObject Instance IDを指定 "resource_id": "{Resource ID}" //LwM2MのResource IDを指定 } }
write
LwM2Mのwriteオペレーションを実行します。
以下のフォーマットでJSONメッセージをリクエストボディに指定します。
{ "lwm2m": { "object_id": "{Object ID}", //LwM2MのObject IDを指定 "object_instance_id": "{Object Instance ID}", //LwM2MのObject Instance IDを指定 "resource_id": "{Resource ID}", //LwM2MのResource IDを指定 "new_value": "{new value}" //Resourceに書き込む値 } }
execute
LwM2Mのexecuteオペレーションを実行します。
以下のフォーマットでJSONメッセージをリクエストボディに指定します。
{ "lwm2m": { "object_id": "{Object ID}", //LwM2MのObject IDを指定 "object_instance_id": "{Object Instance ID}", //LwM2MのObject Instance IDを指定 "resource_id": "{Resource ID}", //LwM2MのResource IDを指定 "arguments": "{arguments}" //Resource実行時の引数 } }
writeAttributes
LwM2MのwriteAttributesオペレーションを実行します。
以下のフォーマットでJSONメッセージをリクエストボディに指定します。
{ "lwm2m": { "object_id": "{Object ID}", //LwM2MのObject IDを指定 "object_instance_id": "{Object Instance ID}", //LwM2MのObject Instance IDを指定 "resource_id": "{Resource ID}", //LwM2MのResource IDを指定 "attributes": "{attributes}" //Resourceに書き込むの属性の値 } }
observe
LwM2Mのobserveオペレーションを実行します。
以下のフォーマットでJSONメッセージをリクエストボディに指定します。
{ "lwm2m": { "object_id": "{Object ID}", //LwM2MのObject IDを指定 "object_instance_id": "{Object Instance ID}", //LwM2MのObject Instance IDを指定 "resource_id": "{Resource ID}", //LwM2MのResource IDを指定 } }
cancelObserver
LwM2MのcancelObserverオペレーションを実行します。
以下のフォーマットでJSONメッセージをリクエストボディに指定します。
{ "lwm2m": { "object_id": "{Object ID}", //LwM2MのObject IDを指定 "object_instance_id": "{Object Instance ID}", //LwM2MのObject Instance IDを指定 "resource_id": "{Resource ID}", //LwM2MのResource IDを指定 } }
6.1.4. イベントデータの取得¶
エッジからバックエンドに送信されたイベントデータはData Access I/Fで取得・削除することができます。 管理アプリケーションから送信されたイベントデータのみ、Management Application I/Fで扱います。 GETメソッドでイベントデータを取得し、DELETEメソッドで削除します。GET・DELETEともにfilterパラメータを使用して 対象のイベントデータを絞り込むことが可能です。
イベントデータは下記のようなフォーマットでDBに格納されます。 object_idはデバイスアダプタが生成したイベントデータのみに含まれます。
{
"_id": "{ID}", //データベースが自動で付与するID
"edge_id": "{Edge ID}", //エッジID
"object_id": "{Object ID}", //オブジェクトID
"type": "event_data", //メッセージのタイプ(内部処理に使用)
"data_type": "{Data Type}", //データ種別(デバイスアダプタのプロファイルで指定)
"marked": false, //既読フラグ
"updated_at": "2016-12-02T12:27:34.126Z", //データを挿入・更新した日時
"payload": { JSONオブジェクト } //イベントデータ本文
}
6.1.4.1. コレクション分割¶
通常、エッジから送信されてくるイベントデータは、 設定ファイル の mongodb.collections でeventDataやmaEventDataに設定したコレクションに格納されており、Backend APIからそれらのコレクションに対してアクセスを行います。 しかし、コレクション分割の機能を利用し、ICE Message Routerのルールファイルを併せて定義することで、指定した単位ごとにイベントデータを個別のコレクションに格納し、参照することが可能となります。コレクション分割機能の設定方法については、 設定ファイル の mongodb.collectionPartitioning の箇所を参照してください。
Backend APIのコレクション分割設定は、Backend APIからイベントデータを参照するコレクションを指定するためのものです。イベントデータを指定したコレクションに格納するためには、ICE Message Routerのルールファイルで振り分けルールをパーティションの設定に合わせて定義する必要があります。
コレクション分割機能の設定が影響する範囲は以下のAPIに限られます。
mongodb.collectionPartitioning.eventData
リソースパス メソッド /backend/event_data GET /backend/event_data DELETE /backend/event_data/{data_type} GET /backend/event_data/{data_type} DELETE mongodb.collectionPartitioning.maEventData
リソースパス メソッド /backend/ma/event_data GET /backend/ma/event_data DELETE /backend/ma/event_data/{data_type} GET /backend/ma/event_data/{data_type} DELETE
コレクション分割機能を有効化した状態で、Backend APIのpartitionパラメータに{パーティション名}を指定すると、パーティションに対応するコレクションにアクセスするようになります。partitionパラメータを省略した場合はデフォルトのコレクションにアクセスします。デフォルトのコレクションは mongodb.collections.eventData、mongodb.collections.maEventDataに設定したコレクションです。
例えば、以下のようにcollectionsとcollectionPartitioningの設定を行った場合、GET /backend/event_data のAPIにpartition=ap_1のパラメータを 付けて実行すると、ap1_event_dataという名称のコレクションからイベントデータ取得します。
"collections": {
"edgeInfo": "edge_info",
"objectInfo": "object_info",
"eventData": "event_data",
"opInfo": "op_info",
"opResult": "op_result",
"fileInfo": "file_info",
"maEventData": "ma_event_data",
"maOpInfo": "ma_op_info",
"maOpResult": "ma_op_result"
},
"collectionPartitioning": {
"eventData":{
"enabled": true,
"partitions": {
"ap_1": "ap1_event_data"
}
},
"maEventData":{
"enabled": false,
"partitions": {
}
}
}
コレクション分割機能では、以下のルールに従い使用するコレクションを判断、もしくはエラーを返却します。
enabledの値 | partitionパラメータの有無 | partitionsとの照合 | 結果 |
---|---|---|---|
true | 有り | 一致 | partitionに対応するコレクションを使用 |
不一致 | エラーを返却 | ||
無し | ― | デフォルトコレクションを使用 | |
false | 有り | ― | エラーを返却 |
無し | ― | デフォルトコレクションを使用 |
コレクション分割機能を有効化(enabled:true)しているときに誤ったpartitionを指定するケースや、コレクション分割機能を無効化(enabled:false)しているときにpartitionを指定しているケースでは、意図せずに誤ったコレクションのデータを参照・削除してしまう可能性があるため、デフォルトコレクションを使用するのではなく400エラーを返却します。
6.1.5. オペレーション情報の取得¶
Entity Abstraction I/Fからオペレーションを実行した際に生成されたオペレーション情報や、オペレーションの実行結果を参照する場合は、Operation Management I/Fを使用します。オペレーションを受け取るオブジェクト側の実装でオペレーション実行結果を返却している場合のみ、オペレーション実行結果を参照可能となります。 管理アプリケーションに対して実行したオペレーションの情報・実行結果のみ、Management Application I/Fで扱います。 GETメソッドでオペレーション情報・オペレーション実行結果を取得し、DELETEメソッドで削除します。GET・DELETEともにfilterパラメータを指定して対象の情報を絞り込むことが可能です。
オペレーション情報は下記のようなフォーマットでDBに格納されます。 op_data.target.object_id、op_data.target.groupはリクエスト実行時に指定した場合のみ追加されるフィールドです。op_data.target.app_typeはop_data.target.object_typeが”edge_application”の場合のみ存在します。 op_idがユニークキーになります。
{
"_id": "{ID}", //データベースが自動で付与するID
"op_id": "{Operation ID}", //オペレーションID
"updated_at": "2016-12-02T12:27:34.126Z", //データを挿入・更新した日時
"op_data": { //オペレーションの情報
"url": "{Resource Path}", //API実行時のリソースパス
"method": "{Method}", //API実行時のメソッド
"op_type": "{Operation Type}", //オペレーションタイプ
"body": { JSONオブジェクト }, //API実行時のリクエストボディ
"target": { //オペレーションの対象
"edge_id": ["{Edge ID}"], //オペレーション対象のエッジID(groupを指定した場合はグループに属するすべてのエッジのID)
"object_type": "{Object Type}", //オペレーション対象のオブジェクト種別(device、edge_applicationなど)
"object_id": "{Object ID}", //オペレーション対象のオブジェクトID
"app_type": "ua", //アプリケーション種別
"group": "{Group}" //オペレーション対象のグループ名
}
}
}
オペレーション実行結果は下記のようなフォーマットでDBに格納されます。 object_idはデバイスアダプタが生成したオペレーション実行結果のみに含まれます。
{
"_id": "{ID}", //データベースが自動で付与するID
"op_id": "{Operation ID}", //オペレーションID
"edge_id": "{Edge ID}", //エッジID
"object_id": "{Object ID}", //オブジェクトID
"flow_id": "{Flow ID}", //フローID
"type": "operation_response", //メッセージのタイプ(内部処理に使用)
"marked": false, //既読フラグ
"updated_at": "2016-12-02T12:27:34.126Z", //データを挿入・更新した日時
"payload": { //データ本文
"success": true //オペレーション実行結果(成功:true、失敗:false)
}
}
6.1.6. ファイルのアップロード¶
ファイルのアップロード、アップロード済みファイルの情報参照はFile Management I/Fで行います。 POSTメソッドでファイルアップロード、GETメソッドでファイル情報の取得、DELETEメソッドでファイル削除します。 POSTメソッド実行時のレスポンスとして、ファイルのダウンロードURLを取得できます。 ファイルサーバにSSL/TLS設定を行う場合は SSL/TLS通信ガイド を参照してください。 また、Nginxのリクエストボディサイズの制限により、アップロード可能なファイルのサイズには制限があります。詳細は client_max_body_size を参照してください。
ファイル情報は下記のようなフォーマットでDBに格納されます。 file_idがユニークキーになります。
{
"_id": "{ID]", //データベースが自動で付与するID
"file_id": "{File ID}", //ファイルID
"file_name": "{File Name}", //ファイル名
"url": "{Url}", //アップロード先URL
"updated_at": "2016-12-02T12:27:34.126Z" //データを挿入・更新した日時
}
6.1.7. 管理アプリケーション関連の操作¶
管理アプリケーションに関する操作は、Management Application I/Fにより行います。 エッジの起動時に管理アプリケーションのメタデータがバックエンドに送信され、GETメソッドにより参照可能となります。 管理アプリケーションへのオペレーションを実行する場合、PUTメソッドを使用します。オペレーションタイプはop_typeパラメータで指定します(messageとdownloadをサポート)。op_typeについては、 オペレーション種別 を参照してください。groupパラメータを使用することで、あるグループに含まれる複数のエッジに対して一斉にオペレーションを実行することができます。エッジがどのグループに含まれるかは、ICE Coreのプロファイルにて設定可能です。 リクエストボディに、送信するメッセージの内容を記載します。リクエストボディのサイズ上限は100KBです。
管理アプリケーションに対して実行したオペレーションのメタデータや、オペレーションの実行結果、管理アプリケーションが送信したイベントデータもManagement Application I/Fで取得できます。
管理アプリケーションのメタデータは下記のようなフォーマットでDBに格納されます。一般のエッジアプリケーションと同じく、管理アプリケーションのobject_typeはedge_applicationです。app_typeの値は”ma”となります。 {edge_id, object_id, object_type}がユニークキーになります。
{
"_id": "{ID}", //データベースが自動で付与するID
"edge_id": "{Edge ID}", //エッジID
"flow_id": "{Flow ID}", //フローID
"type": "object_register", //メッセージのタイプ(内部処理に使用)
"object_id": "{Object ID}", //オブジェクトID
"object_type": "edge_application", //オブジェクト種別
"app_type": "ma", //アプリケーション種別
"marked": false, //既読フラグ
"updated_at": "2016-12-02T12:27:34.126Z", //データを挿入・更新した日時
"payload": { JSONオブジェクト } //管理アプリケーションのプロファイル
}
イベントデータは下記のようなフォーマットでDBに格納されます。
{
"_id": "{ID}", //データベースが自動で付与するID
"edge_id": "{Edge ID}", //エッジID
"type": "event_data", //メッセージのタイプ(内部処理に使用)
"data_type": "{Data Type}", //データ種別(イスアダプタのプロファイルで指定)
"marked": false, //既読フラグ
"updated_at": "2016-12-02T12:27:34.126Z", //データを挿入・更新した日時
"payload": { JSONオブジェクト } //イベントデータ本文
}
オペレーション情報は下記のようなフォーマットでDBに格納されます。 op_data.target.object_id、op_data.target.groupはリクエスト実行時に指定した場合のみ追加されるフィールドです。 op_idがユニークキーになります。
{
"_id": "{ID}", //データベースが自動で付与するID
"op_id": "{Operation ID}", //オペレーションID
"updated_at": "2016-12-02T12:27:34.126Z", //データを挿入・更新した日時
"op_data": { //オペレーションの情報
"url": "{Resource Path}", //API実行時のリソースパス
"method": "{Method}", //API実行時のメソッド
"op_type": "{Operation Type}", //オペレーションタイプ
"body": { JSONオブジェクト }, //API実行時のリクエストボディ
"target": { //オペレーションの対象
"edge_id": ["{Edge ID}"], //オペレーション対象のエッジID(groupを指定した場合はグループに属するすべてのエッジのID)
"object_type": "edge_application", //オペレーション対象のオブジェクト種別
"object_id": "{Object ID}", //オペレーション対象のオブジェクトID
"app_type": "ma", //アプリケーション種別
"group": "{Group}" //オペレーション対象のグループ名
}
}
}
オペレーション実行結果は下記のようなフォーマットでDBに格納されます。
{
"_id": "{ID}", //データベースが自動で付与するID
"op_id": "{Operation ID}", //オペレーションID
"edge_id": "{Edge ID}", //エッジID
"flow_id": "{Flow ID}", //フローID
"type": "operation_response", //メッセージのタイプ(内部処理に使用)
"marked": false, //既読フラグ
"updated_at": "2016-12-02T12:27:34.126Z", //データを挿入・更新した日時
"payload": { //データ本文
"success": true //オペレーション実行結果(成功:true、失敗:false)
}
}
6.1.8. API一覧¶
6.1.8.1. Swagger Specification¶
Swagger Specification(REST APIの仕様をJSON形式で定義したもの)に関するAPI一覧を記載します。
リソースパス | メソッド | 説明 |
---|---|---|
/api-docs | GET | Backend APIのSwagger Specificationを取得します。 |
6.1.8.2. Entity Abstraction I/F¶
Entity Abstraction I/FのAPI一覧を記載します。 各APIの詳細は APIリファレンス を参照してください。
リソースパス | メソッド | 説明 |
---|---|---|
/edge | GET | 複数エッジの情報を取得します。filterパラメータにより対象を絞り込みます。 |
/edge/{edge_id} | GET | エッジの情報を取得します。edge_idにより対象を絞り込みます。 |
/edge/{edge_id}/context | GET | コンテキストの情報を取得します。edge_idとfilterパラメータにより対象を絞り込みます。object_typeが検索キーに自動で追加されます。 |
/edge/{edge_id}/processor | GET | 複数プロセッサの情報を取得します。edge_idとfilterパラメータにより対象を絞り込みます。object_typeが検索キーに自動で追加されます。 |
/edge/{edge_id}/processor/{object_id} | GET | プロセッサの情報を取得します。edge_id、object_idとfilterパラメータにより対象を絞り込みます。object_typeが検索キーに自動で追加されます。 |
/edge/{edge_id}/topology | GET | 複数トポロジの情報を取得します。edge_idとfilterパラメータにより対象を絞り込みます。object_typeが検索キーに自動で追加されます。 |
/edge/{edge_id}/topology/{object_id} | GET | トポロジの情報を取得します。edge_id、object_idとfilterパラメータにより対象を絞り込みます。object_typeが検索キーに自動で追加されます。 |
/edge/{edge_id}/edge_application | GET | 複数エッジアプリケーションの情報を取得します。edge_idとfilterパラメータにより対象を絞り込みます。object_typeとapp_typeが検索キーに自動で追加されます。 |
/edge/{edge_id}/edge_application/{object_id} | GET | エッジアプリケーションの情報を取得します。edge_id、object_idとfilterパラメータにより対象を絞り込みます。object_typeとapp_typeが検索キーに自動で追加されます。 |
/edge/{edge_id}/edge_application/{object_id} | PUT | エッジアプリケーションへのオペレーションを実行します。edge_id、object_idとgroupパラメータにより対象を絞り込みます。 |
/edge/{edge_id}/device_adapter | GET | 複数デバイスアダプタの情報を取得します。edge_idとfilterパラメータにより対象を絞り込みます。object_typeが検索キーに自動で追加されます。 |
/edge/{edge_id}/device_adapter/{object_id} | GET | デバイスアダプタの情報を取得します。edge_id、object_idとfilterパラメータにより対象を絞り込みます。object_typeが検索キーに自動で追加されます。 |
/edge/{edge_id}/device_adapter/{object_id} | PUT | デバイスアダプタへのオペレーションを実行します。edge_id、object_idとgroupパラメータにより対象を絞り込みます。 |
/edge/{edge_id}/device | GET | 複数デバイスの情報を取得します。edge_idとfilterパラメータにより対象を絞り込みます。object_typeが検索キーに自動で追加されます。 |
/edge/{edge_id}/device/{objedct_id} | GET | デバイスの情報を取得します。edge_id、object_idとfilterパラメータにより対象を絞り込みます。object_typeが検索キーに自動で追加されます。 |
/edge/{edge_id}/device/{objedct_id} | PUT | デバイスへのオペレーションを実行します。edge_id、object_idとgroupパラメータにより対象を絞り込みます。 |
/edge/{edge_id}/lwm2m | GET | 複数LwM2Mデバイスの情報を取得します。edge_idとfilterパラメータにより対象を絞り込みます。object_typeが検索キーに自動で追加されます。 |
/edge/{edge_id}/lwm2m | PUT | LwM2Mデバイスへのオペレーションを実行します。edge_idとgroupパラメータにより対象を絞り込みます。 |
/edge/{edge_id}/lwm2m/{objedct_id} | GET | LwM2Mデバイスの情報を取得します。edge_id、object_idとfilterパラメータにより対象を絞り込みます。object_typeが検索キーに自動で追加されます。 |
/edge/{edge_id}/lwm2m/{objedct_id} | PUT | LwM2Mデバイスへのオペレーションを実行します。edge_id、object_idとgroupパラメータにより対象を絞り込みます。 |
6.1.8.3. Data Access I/F¶
Data Access I/FのAPI一覧を記載します。 各APIの詳細は APIリファレンス を参照してください。
リソースパス | メソッド | 説明 |
---|---|---|
/backend/event_data | GET | イベントデータを取得します。filterパラメータにより対象を絞り込みます。 |
/backend/event_data | DELETE | イベントデータを削除します。filterパラメータにより対象を絞り込みます。 |
/backend/event_data/{data_type} | GET | 指定データタイプのイベントデータを取得します。data_typeとfilterパラメータにより対象を絞り込みます。 |
/backend/event_data/{data_type} | DELETE | 指定データタイプのイベントデータを削除します。data_typeとfilterパラメータにより対象を絞り込みます。 |
6.1.8.4. Operation Management I/F¶
Operation Management I/FのAPI一覧を記載します。 各APIの詳細は APIリファレンス を参照してください。
リソースパス | メソッド | 説明 |
---|---|---|
/backend/op_info | GET | オペレーション情報の一覧を取得します。filterパラメータにより対象を絞り込みます。 |
/backend/op_info | DELETE | オペレーション情報を一括削除します。filterパラメータにより対象を絞りこみます。 |
/backend/op_info/{op_id} | GET | 指定オペレーションIDのオペレーション情報を取得します。op_idにより対象を絞りこみます。 |
/backend/op_info/{op_id} | DELETE | 指定オペレーションIDのオペレーション情報を削除します。op_idにより対象を絞り込みます。 |
/backend/op_result | GET | オペレーション実行結果を取得します。filterパラメータにより対象を絞り込みます。 |
/backend/op_result | DELETE | オペレーション実行結果を削除します。filterパラメータにより対象を絞り込みます。 |
/backend/op_result/{op_id} | GET | 指定オペレーションIDのオペレーション実行結果を取得します。op_idとfilterパラメータにより対象を絞り込みます。 |
/backend/op_result/{op_id} | DELETE | 指定オペレーションIDのオペレーション実行結果を削除します。op_idとfilterパラメータにより対象を絞り込みます。 |
6.1.8.5. File Management I/F¶
File Management I/FのAPI一覧を記載します。 各APIの詳細は APIリファレンス を参照してください。
リソースパス | メソッド | 説明 |
---|---|---|
/backend/file/delivery | GET | アップロードしたファイルの一覧を取得します。filterパラメータにより対象を絞り込みます。 |
/backend/file/delivery | POST | ファイルアップロードします。エッジへのファイル配信に使用します。 |
/backend/file/delivery | DELETE | ファイルを全削除します。 |
/backend/file/delivery/{file_id} | GET | 指定ファイルIDのファイル情報を取得します。file_idにより対象を絞り込みます。 |
/backend/file/delivery/{file_id} | DELETE | 指定ファイルIDのファイルを削除します。file_idにより対象を絞り込みます。 |
/backend/file/collection | POST | ファイルアップロードします。エッジからのファイル集信に使用します。 |
6.1.8.6. Management Application I/F¶
Management Application I/FのAPI一覧を記載します。 各APIの詳細は APIリファレンス を参照してください。
リソースパス | メソッド | 説明 |
---|---|---|
/edge/{edge_id}/ma | GET | 複数管理アプリケーションの情報を取得します。edge_idとfilterパラメータにより対象を絞り込みます。object_typeとapp_typeが検索キーに自動で追加されます。 |
/edge/{edge_id}/ma | PUT | 運用管理エージェントへのオペレーションを実行します。edge_idとgroupパラメータにより対象を絞り込みます。 |
/edge/{edge_id}/ma/{object_id} | GET | 指定オブジェクトIDの管理アプリケーションの情報を取得します。edge_id、object_idとfilterパラメータにより対象を絞り込みます。object_typeとapp_typeが検索キーに自動で追加されます。 |
/edge/{edge_id}/ma/{object_id} | PUT | 指定オブジェクトIDの管理アプリケーションへのオペレーションを実行します。edge_id、object_idとgroupパラメータにより対象を絞り込みます。 |
/backend/ma/op_info | GET | 管理アプリケーションが対象のオペレーション情報の一覧を取得します。filterパラメータにより対象を絞り込みます。 |
/backend/ma/op_info | DELETE | 管理アプリケーションが対象のオペレーション情報を一括削除します。filterパラメータにより対象を絞り込みます。 |
/backend/ma/op_info/{op_id} | GET | 管理アプリケーションが対象の指定オペレーションIDのオペレーション情報を取得します。op_idにより対象を絞り込みます。 |
/backend/ma/op_info/{op_id} | DELETE | 管理アプリケーションが対象の指定オペレーションIDのオペレーション情報を削除します。op_idにより対象を絞り込みます。 |
/backend/ma/op_result | GET | 管理アプリケーションが対象のオペレーション実行結果を取得します。filterパラメータにより対象を絞り込みます。 |
/backend/ma/op_result | DELETE | 管理アプリケーションが対象のオペレーション実行結果を削除します。filterパラメータにより対象を絞り込みます。 |
/backend/ma/op_result/{op_id} | GET | 管理アプリケーションが対象の指定オペレーションIDのオペレーション実行結果を取得します。op_idとfilterパラメータにより対象を絞り込みます。 |
/backend/ma/op_result/{op_id} | DELETE | 管理アプリケーションが対象の指定オペレーションIDのオペレーション実行結果を削除します。op_idとfilterパラメータにより対象を絞り込みます。 |
/backend/ma/event_data | GET | 管理アプリケーションが送信したイベントデータを取得します。filterパラメータにより対象を絞り込みます。 |
/backend/ma/event_data | DELETE | 管理アプリケーションが送信したイベントデータを削除します。filterパラメータにより対象を絞り込みます。 |
/backend/ma/event_data/{data_type} | GET | 管理アプリケーションが送信した指定データタイプのイベントデータを取得します。data_typeとfilterパラメータにより対象を絞り込みます。 |
/backend/ma/event_data/{data_type} | DELETE | 管理アプリケーションが送信した指定データタイプのイベントデータを削除します。data_typeとfilterパラメータにより対象を絞り込みます。 |
6.1.8.7. パラメータ¶
filter、fields、sortの記述方法については、MondoDBのマニュアルを参照してください。filter、fieldsはそれぞれMongoDBのquery、projectionパラメータに対応します。
パラメータ名 | 型 | 説明 |
---|---|---|
filter | string | 情報取得・削除時に、対象を絞り込むためのパラメータです。JSON形式で条件を記述してください。パスパラメータに含まれるキー(edge_idやobject_id、data_typeなど)やサーバ側で自動追加されるキー(object_typeやapp_type)をfilterパラメータに含んでいる場合、その条件は無視されます。updated_atと_id(MongoDBが生成するID)はfilterに使用できません。フィールド名や値の文字列はダブルクォーテーションで囲みます。$regex(正規表現)や$exists(フィールドの存在チェック)といったオペレータも使用可能です。MongoDBへの問い合わせ時にqueryとして設定されます。 |
fields | string | 情報取得時に、取得フィールドを限定するためのパラメータです。JSON形式で条件を記述してください。フィールド名の文字列はダブルクォーテーションで囲みます。フィールドの値は1、0、true、falseのみをサポートします。MongoDBへの問い合わせ時にprojectionとして設定されます。 |
sort | string | 情報取得時に、データをソートするためのパラメータです。JSON形式で条件を記述してください。フィールド名の文字列はダブルクォーテーションで囲みます。フィールドの値は1、-1のみをサポートします。MongoDBへの問い合わせ時にsortとして設定されます。 |
offset | integer | 情報取得時に、指定件数だけデータを読み飛ばすためのパラメータです。0~2147483647の範囲をサポートします。0を指定した場合はデータを読み飛ばさずに1件目からデータを取得します。MongoDBへの問い合わせ時にskipとして設定されます。 |
limit | integer | 情報取得時に、データの取得件数を制限するためのパラメータです。1~2147483647の範囲をサポートします。MongoDBへの問い合わせ時にlimitとして設定されます。 |
marked | boolean | 情報取得時に、データの既読フラグをtrueに切り替えるためのパラメータです。パラメータにtrueを指定することで、取得したデータのmarkedフィールドの値をtrueに更新できます。false指定時、パラメータ省略時はデータ更新しません。 (未読データの取得には、filterにmarked=falseを指定し、markedパラメータをtrueに指定します。ただし、このリクエストを並列に行うと、結果が重複する場合があります。) |
partition | string | コレクション分割機能を有効化しているときに、アクセス先のコレクションを指定するパラメータです。コレクション分割機能を有効化していない場合はパラメータ設定できません。省略した場合、デフォルトのコレクションにアクセスします。 |
group | string | エッジIDを指定せずグループ宛てにメッセージ送信するときに使用するパラメータです。edge_idが”0”のときのみ有効です。 |
op_type | string | オペレーション実行するときにオペレーションタイプを設定するためのパラメータです。 |
6.1.9. APIのレスポンスフォーマット¶
6.1.9.1. データ取得¶
GETメソッドでデータ取得した場合、以下のようなレスポンスメッセージが返却されます。 resultsに取得データを格納した配列、countに取得件数がセットされます。 HTTPヘッダのx-total-countにlimitパラメータ適用前の総データ件数がセットされます。
{
"results": [
{データ1件目},
{データ2件目},
{データ3件目},
…
],
"count": n
}
正常終了時のHTTPステータスコードは200です。 異常発生時のHTTPステータスコードは エラーメッセージ を参照してください。
6.1.9.2. データ削除¶
DELETEメソッドでデータ削除した場合、以下のようなレスポンスメッセージが返却されます。 countに削除件数がセットされます。
{
"count": n
}
正常終了時のHTTPステータスコードは200です。 異常発生時のHTTPステータスコードは エラーメッセージ を参照してください。
6.1.9.3. オペレーション実行¶
PUTメソッドでオペレーション実行した場合、以下のようなレスポンスメッセージが返却されます。 DBに格納されるオペレーションのメタデータがそのままレスポンスとなります。op_data.target.object_id、op_data.target.groupはリクエスト実行時に指定した場合のみ追加されるフィールドです。op_data.target.app_typeはop_data.target.object_typeが”edge_application”の場合のみ存在します。
{
"_id": "{ID}", //データベースが自動で付与するID
"op_id": "{Operation ID}", //オペレーションID
"updated_at": "2016-12-02T12:27:34.126Z", //データを挿入・更新した日時
"op_data": { //オペレーションの情報
"url": "{Resource Path}", //API実行時のリソースパス
"method": "{Method}", //API実行時のメソッド
"op_type": "{Operation Type}", //オペレーションタイプ
"body": { JSONオブジェクト }, //API実行時のリクエストボディ
"target": { //オペレーションの対象
"edge_id": ["{Edge ID}"], //オペレーション対象のエッジID(groupを指定した場合はグループに属するすべてのエッジのID)
"object_type": "{Object Type}", //オペレーション対象のオブジェクト種別(device、edge_applicationなど)
"object_id": "{Object ID}", //オペレーション対象のオブジェクトID
"app_type": "ua", //アプリケーション種別
"group": "{Group}" //オペレーション対象のグループ名
}
}
}
正常終了時のHTTPステータスコードは202です。 異常発生時のHTTPステータスコードは エラーメッセージ を参照してください。
6.1.9.4. ファイルアップロード¶
POSTメソッドでファイルアップロードした場合、以下のようなレスポンスメッセージが返却されます。 DBに格納されるファイルのメタデータがそのままレスポンスとして返却されます。
{
"_id": "{ID}", //データベースが自動で付与するID
"file_id": "{File ID}", //ファイルID
"file_name": "{File Name}", //ファイル名
"url": "{Url}", //アップロード先URL
"updated_at": "2016-12-02T12:27:34.126Z" //データを挿入・更新した日時
}
正常終了時のHTTPステータスコードは201です。 異常発生時のHTTPステータスコードは エラーメッセージ を参照してください。
6.1.10. サービス¶
- サービス開始(CentOSの場合)
$ service ice-backendapi{バージョン} start
- サービス停止(CentOSの場合)
$ service ice-backendapi{バージョン} stop
6.1.11. ログファイル¶
Backend APIのログはデフォルトで以下のディレクトリに出力されます。
/opt/nec/pf/ice/backendapi/v{バージョン}/logs
access.log
Backend APIのアクセスログ
operation.log
Backend APIの動作ログ
ice-backendapi{バージョン}_out.log
Backend APIの標準出力
ice-backendapi{バージョン}_err.log
Backend APIの標準エラー出力
6.1.12. エラーメッセージ¶
エラーメッセージが返却されるケースと、その時のステータスコードについて説明します。
ケース | ステータスコード | 説明 |
---|---|---|
パラメータ不正 | 400 | APIコール時に設定したパラメータに誤りがあります。 |
パーズ処理失敗 | 500 | JSON文字列のパーズ処理で失敗しました。 |
パブリッシュ失敗 | 500 | MQTT Brokerへのメッセージのパブリッシュに失敗しました。 |
DB処理失敗 | 500 | DBへの問い合わせ処理に失敗しました。 |
存在しないリソースパス | 404 | 存在しないリソースパスにアクセスしています。 |
サポートしないメソッド | 405 | サポートしていないメソッドにアクセスしています。 |
ファイル操作に失敗 | 500 | アップロードされたファイルの移動・削除などの処理に失敗しました。 |
エラーメッセージのフォーマットは下記の通りです。
{
"error": {
"name": "{Error name}", //発生したエラーの名称
"message": "{Error message}", //エラーメッセージ
"reason": "{Error reason}" //エラー理由
}
}
リクエストパラメータの値がSwagger Specificationの定義に合わない場合など、Swaggerフレームワークの異常が発生した場合には、上記フォーマット以外のエラーが返却されることがあります。 例えば、リクエストパラメータのバリデーションに失敗した場合は以下のようなエラーメッセージとなります。
{
"message": "{Error message}", //エラーメッセージ
"code": "{Error code}", //エラーコード
"failedValidation": true, //バリデーション結果
"path": [ ], //リソースパスやメソッドの情報
"paramName": "{Parameter Name}" //バリデーションに失敗したパラメータ名
}