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

    管理アプリケーションに対するオペレーション実行やオペレーションの実行結果参照、管理アプリケーションが送信したイベントデータ参照を行うインタフェースです。

Backend APIの動作について、以下の図を用いて説明します。 Backend API自身の機能は①~④の範囲です。
overview
①エッジの運用管理、データ取得など、RESTクライアントからの要求を受け付けます。
②エッジから送信されたデータやオペレーション情報の取得・削除など、DBへのクエリを実行します。
③エッジへのファイル配信のために、ファイルサーバにファイルをアップロードします。
④エッジの運用管理のために、MQTT Brokerにメッセージを送信します。
⑤Backend APIが送信したメッセージをICE CoreがMQTT Brokerから受け取ります。
⑥デバイスやエッジアプリケーションから発生するデータをICE CoreがMQTT Brokerに送信します。
⑦エッジから送られてくるデータをバックエンド側のMessage Router受け取ります。
⑧適切なコレクションを判断し、データをDBに格納します。

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. パラメータ

Backend APIで指定可能なパラメータについて説明します。通常のリクエストパラメータ同様、URLの末尾に”?”を付け、
続けて{パラメータ名}={値}の形式で指定します。パラメータが複数ある場合は”&”で区切ります。
値はURLエンコードする必要があります。

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 オペレーション実行するときにオペレーションタイプを設定するためのパラメータです。
情報取得時に指定するfilter、sort、offset、limitは以下の順序で適用されます。
①filter条件にあうデータを検索
②sort条件に従ってソート
③先頭からoffset分のデータをスキップ
④limit件数を取得

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.9.5. ファイル削除

DELETEメソッドでファイル削除した場合、ボディなしのレスポンスが返却されます。 正常終了時のHTTPステータスコードは204です。 異常発生時の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}"    //バリデーションに失敗したパラメータ名
}