概要

重要

SmartREST 1.0 は SmartREST 2.0 に置き換えられました。

SmartREST 1.0 は Things Cloud によって保守されますが、今後は積極的に開発されることはありません。新しいデバイス統合には SmartREST 2.0 を使用することを強くお勧めします。

このセクションでは、SmartREST プロトコル、使用されるデータ形式、および SmartREST テンプレートの構造と登録について説明します。 組み込みメッセージとエラーについても説明します。

Things Cloud REST APIは、ほとんどの環境から簡単に使用できる汎用IoTプロトコルを提供します。これはどのようなIoTユースケースにもアドホックに適応させることができ、また標準的なインターネット通信およびセキュリティ メカニズムを利用します。適切な標準技術を利用しているため、独自IoTプロトコルと比べ先進的である一方、ローエンドのマイクロコントローラまたは低帯域幅通信チャネルなど、非常に制約の多い環境には課題をもたらすことがあります。

こうした環境向けに、Things Cloud はいわゆる「SmartREST」プロトコルを提供します。SmartRESTは以下のように、標準技術の利点と特別仕様のプロトコルの利点を同時に提供するものです。

次のセクションでは、SmartRESTの背景にある概念と、使用する基本プロトコルについて説明します。SmartRESTは後述の通り、テンプレートを使ってメタデータをペイロードデータから分離する処理を基本としています。最後に、SmartRESTを使用してデータを送受信する方法を説明します。

SmartRESTの動作方法

下記の画像は、SmartRESTの動作を図示したものです。デバイスおよび他のクライアントは Things Cloud 上の専用SmartRESTエンドポイントに接続し、それぞれのデータをコンマ区切り値からなる行として送信します。これらの行は Things Cloud のSmartRESTプロキシにより、標準の Things Cloud REST APIリクエストへと展開されます。同様に、Things Cloud からの応答は通常のJSON形式からプロキシによってコンマ区切り値に圧縮された後、デバイスに返却されます。

SmartREST architecture

Things Cloud はコンマ区切り値をどのようにして意味のあるRESTリクエストとして解釈するのか?

まず、これを行うためにデバイスはテンプレートを Things Cloud に登録します。テンプレートは、展開されたRESTリクエスト形式をプレースホルダーと一緒に保持しており、その中へ Things Cloud の SmartREST プロキシが連続的にコンマ区切り値を挿入します。応答の場合、テンプレートはコンマ区切り値を構築するために、構造化されたREST応答からどの値を抽出するかを記述します。

テンプレートは、デバイスのソフトウェアまたはファームウェアのバージョンに関連付けられます。通常、デバイスまたはアプリケーションに固有な実装は、用途に応じたリクエストタイプに対応しており、決まった範囲の要求を発行します。同じ実装のデバイスはすべて、同じ一連のリクエストタイプを共有するのです。したがって、テンプレートは実装段階で定義できます。テンプレートを Things Cloud で使用できるようにするため、特定の実装を伴う最初のデバイスがそのテンプレートを送信し、すべての同様のデバイスで利用できるようにします。

以下の図は、このプロセスを表したものです。「Device_1.0」のバージョンを実装したデバイスがSmartREST経由での通信を開始すると仮定します。デバイスは認証情報を取得した後、SmartRESTプロキシに対し、テンプレートが登録済みであるかを問い合わせます。テンプレートがサーバー上で見つからない場合、デバイスはテンプレートを単一の静的テキストリクエストとして Things Cloud へ送信します。この手順が完了したら、このテンプレートを使用する同類のデバイスはすべて、テンプレートをサーバーに再送しなくても、SmartRESTを使用する通信を開始することができます。

SmartREST templates

この例は、変換プロセス概要も例示しています。「Template 1」において、%%はプレースホルダーであり、これをSmartRESTプロキシが埋めます。timeはサーバー側タイムスタンプに置き換えられます(下記参照)。残りのプレースホルダーはリクエストデータに置き換えられます。リクエスト例における行1,200,20.5は以下のように解釈されます。

基本的なSmartRESTプロトコル

すべてのSmartRESTリクエストの基本構造は次の通りです。

上記の例で言えば、SmartRESTリクエストは次のようになります。

POST /s HTTP/1.1
Authorization: <AUTHORIZATION>
X-Id: Device_1.0

1,200,20.5

これに呼応する応答例として以下が挙げられます。

HTTP/1.1 200 OK
Transfer-Encoding: chunked

20,0

リクエストと応答を照合するため、応答行には、エラーコードの次に、応答に対応するリクエストを示す行が含まれます。この例で言えば、20は「OK」を意味し、0はリクエストの1行目を指します。

テンプレートの登録方法は?

前述の通り、クライアントは SmartREST を使用する場合、まず、SmartRESTテンプレートがすでにサーバーにとって既知であるかどうかを尋ねます。これは以下のような空のSmartRESTリクエストを使用して行われます。

POST /s HTTP/1.1
Authorization: <AUTHORIZATION>
X-Id: Device_1.0

デバイス実装が既知であれば、応答はIDを返し、このIDはその後のリクエストにおける「X-Id」ヘッダーの「簡略表現」として使用することができます。

HTTP/1.1 200 OK

20,<id>

デバイス実装が未知の場合、応答は以下のようになります。

HTTP/1.1 200 OK

40,"No template for this X-ID"

この場合、あなたのデバイス実装で使用するすべてのテンプレートを作成します。

POST /s HTTP/1.1
Authorization: <AUTHORIZATION>
X-Id: Device_1.0

10,1,POST,/measurement/measurements,application/vnd.com.nsn.cumulocity.measurement+json,,%%,NOW UNSIGNED NUMBER,{ "time": "%%", "type": ... }

この例では、10 はリクエストテンプレートを指します(一方、11 は応答テンプレートを指します)。このテンプレートは「1」番なので、このテンプレートを使用するSmartRESTリクエストは最初の列に「1」が付くことになります。このテンプレートはエンドポイント /measurement/measurements 宛の「POST」リクエストを参照し、コンテンツ種別は application/vnd.com.nsn.cumulocity.measurement+json となります。このテンプレートで使用されるプレースホルダはー %% です。プレースホルダーはタイムスタンプ(NOW)と、符号なし数値および一般数値です。最後に、最後の列には、入力され送信されることになるPOSTリクエストの本体を格納します。

応答はどのように扱われますか?

上記の例ではリクエストとリクエストテンプレートの取り扱いを例示しました。応答の場合、JSONPath 表現がThings Cloud REST応答をCSVに変換します。例えば、デバイスにディスプレイ画面があり、メッセージをその画面に表示できるとしましょう。メッセージを更新するためのオペレーションは次のようになります。

{
	"c8y_Message": {
		"text": "Hello, world!"
	},
	"creationTime": "2019-02-25T08:32:45.435+01:00",
	"deviceId": "8789602",
	"status": "PENDING"
}

クライアント側では、デバイスは主に表示されることになるテキストを知る必要があります。JSONPathでは、以下の構文を使用して text プロパティを抽出します。

$.c8y_Message.text

この構文において、$ はデータ構造のルートを指し、. はデータ構造からの要素を選択します。オプションについて詳しくは、JSONPath リファレンスをご覧ください。

デバイスは通常、自らに関連するオペレーションと、PENDING状態のオペレーションをすべて問い合わせます。そうしたクエリに対する Things Cloud の標準応答は、次のようになります。

{
	"operations": [{
		"c8y_Message": {
				"text": "Hello, world!"
		},
		"creationTime": "2014-02-25T08:32:45.435+01:00",
		"deviceId": "8789602",
		"status": "PENDING"
	}, {
		"c8y_Relay": {
			"status": "OPEN"
		}
	}]
}

つまり、応答にはオペレーションのリストが含まれ、これらのオペレーションはさまざまな種類を有する場合があります。そうした構造に対処するには、以下の応答テンプレートを使用します。

11,2,$.operations,$.c8y_Message,$.c8y_Message.text

これは値ごとに説明すると、以下のような意味になります。

結果、SmartRESTクライアントは以下の応答を返されることになります。

HTTP/1.1 200 OK

2,0,"Hello, world!"

この応答は、表示メッセージを変換するためのテンプレートであるテンプレート2を使用して作成されました。応答は最初に送られたリクエストを参照します。実際に設定されるメッセージは「Hello, world!」です。

プロトコル

SmartREST は現在確立された HTTP プロトコルを基本としており、 HTTP クライアントが提供される環境からアクセス可能です。SmartREST は、 HTTP における双方向型通信のための POST メソッドを使用して、排他的に /s リソース経由で通信を行います。ペイロードデータ形式は CSV(カンマ区切り値)形式です。

次の例は、クライアントと SmartREST エンドポイントとの間の通信です。注意点として、リクエストには Authorization ヘッダーとカスタム X-Id ヘッダーが含まれますが、これはリクエスト向けに使用する SmartREST テンプレートを指定するものです。

POST /s HTTP/1.0
Authorization: Basic ...
X-Id: ...
Transfer-Encoding: chunked

100,1234456

個々の SmartREST リクエストは、アクションに対応する固有の符号なし整数値から始まり、後続にパラメータ値を記述する、1つの行で表されます。

SmartREST エンドポイントは、以下のレスポンスを取得します。注意点として、 HTTP 応答コードは、SmartREST エンドポイントが利用不可の場合を除き、常に 200 です。

HTTP/1.1 200 OK
Transfer-Encoding: chunked

200,1,123456,Request result

SmartREST エンドポイントにより取得される各行は、「 SmartREST リクエスト結果から抽出される一意の符号なし整数(200)」、「 SmartREST リクエスト行番号」および「リクエストデータ値の一連の値」で構成されます。

備考
Things Cloud REST APIからの応答が空になることが想定される場合(例えばマネージドオブジェクトの削除後)、 SmartREST からの応答も空となります。 登録された応答テンプレートとの関連性はありません。
備考
SmartREST を介したインベントリ アクセスは、グローバルまたはクライアントが所有者であるインベントリ オブジェクトに制限されます。ロールの割り当ては評価されません。

データ形式

SmartREST エンドポイントとの通信には CSV(カンマ区切り値) 形式を使用します。スムーズに通信するには、以下のルールに従わなければなりません。

サーバーからクライアントに送信されるメッセージにも、同じエスケープ ルールが適用されます。

次の例は、上述したルールの例となります。

100,Hello world!
101," I have leading whitespace!"
102,"I have trailing whitespace!"
103,"I contain a line
break!"
104,"I have ""quotes""!"
105,I also have 'quotes'!

処理モード

REST の実装 同様、 SmartREST でのデータ更新を伴うすべての通信(POST, PUT, DELETE)では4つの処理モード、 PERSISTENT 、 TRANSIENT 、 QUIESCENT 、 CEP が利用できます。

SmartREST エンドポイントに送信されたデータが、Things Cloud データベースへの格納とリアルタイムイベント処理の両方に転送されなければならない場合、 PERSISTENT モードを設定すべきです。このモードはデフォルトで、特別な追加設定は不要です。

通信されたデータがリアルタイムイベント処理のみで必要なケースでは、 TRANSIENT 処理モードを指定する必要があります。指定は、 HTTP リクエストヘッダーに追加します。

POST /s HTTP/1.0
Authorization: Basic ...
X-Id: ...
X-Cumulocity-Processing-Mode: TRANSIENT
Transfer-Encoding: chunked

100,1234456

ヘッダーに TRANSIENT モードがある場合、本文データは Things Cloud データベースに保持されません。

リアルタイムイベント処理の間、CEPでデータベースに保存すべきかどうかを定義することができます。

SmartREST エンドポイントに送信されるデータを Things Cloud データベースに保存すると同時にリアルタイム処理に転送する必要がある場合は、 QUIESCENT 処理モードを指定する必要があります。この場合、リアルタイム通知を使用不可にする必要があります。現在、QUIESCENT処理モードはメジャーメントおよびイベントにのみ適用できます。

SmartREST エンドポイントに送信されるデータを、リアルタイム通知無効のままリアルタイム処理エンジンへ一時的に送信する必要がある場合は、 CEP 処理モードを指定する必要があります。現在、CEP処理モードはメジャーメントおよびイベントにのみ適用されます。

備考
イベントは、すべての処理モードで常に CEP/Apama に配信されます。これは、リアルタイム通知とは関係ありません。

テンプレート

SmartREST テンプレートとは、 CSV データおよび Things Cloud REST APIコールの変換に使用する、要求用および応答用のテンプレート集です。 SmartREST テンプレートには、処理に使用する SmartREST テンプレートを、カスタム X-Id ヘッダー値で特定するためのテンプレート識別子が含まれます。

個々の要求用テンプレートおよび応答用テンプレートは、メッセージ識別子と呼ばれる固有の数値識別子を有し、これを個々の SmartREST 要求行または応答行の最初の値により参照されます。デフォルトのメッセージ識別子と重ならないよう、100で始まるメッセージ識別子を選択することをお勧めします。

要求用テンプレート

要求用テンプレートには、 SmartREST 要求に対応するREST APIコール(その後プラットフォームへ送られる)へ変換するための情報がすべて含まれます。

要求用テンプレートには以下の情報が含まれます。

応答用テンプレート

応答用テンプレートには、クライアントへ CSV データ形式で応答されることになるデータ値をプラットフォームのREST APIから抽出するために必要な情報が含まれます。

応答用テンプレートには以下の情報が含まれます。

登録プロセス

このガイドでは、主に SmartREST の/sエンドポイントを使用した SmartREST テンプレートの登録を中心に解説します。プラットフォームインベントリAPIを使用して登録することも可能です。

SmartREST テンプレート登録前に、同一IDのテンプレートが存在しないかを確認しなければなりません。テンプレートがすでに存在する場合、重複のためエラーメッセージが返却されます。

SmartREST テンプレートがすでに登録されているかは、次のように空リクエストを行うことによって確認できます。

POST /s HTTP/1.0
Authorization: Basic ...
X-Id: ...
Transfer-Encoding: chunked

テンプレートがすでに存在する場合、次の応答が取得されます。メッセージ識別子 20 はテンプレートがインベントリに存在することを意味し、パラメータ12345 はテンプレートのマネージドオブジェクトのGIdを意味します。

HTTP/1.1 200 OK
Transfer-Encoding: chunked

20,12345

テンプレートが存在しない場合、エラーメッセージを含む以下の応答が取得されます。

HTTP/1.1 200 OK
Transfer-Encoding: chunked

40,"No template for this X-ID."

テンプレートが存在しない場合、空リクエスト時に使用したX-Idを用いてテンプレート登録要求を発行できます。

テンプレートは、CSV データ形式の SmartREST テンプレートを含めた単一要求によって登録することができます。テンプレート登録要求と通常の SmartREST 要求との違いは、テンプレート登録では行ごとに要求が処理されないという点です。

POST /s HTTP/1.0
Authorization: Basic ...
X-Id: ...
Transfer-Encoding: chunked

10,100,POST,/inventory/managedObjects,application/vnd.com.nsn.cumulocity.managedObject+json,application/vnd.com.nsn.cumulocity.managedObject+json,,,"{""name"":""Test Device"",""type"":""com_example_TestDevice"",""c8y_IsDevice"":{}}"
11,201,,"$.c8y_IsDevice","$.id"

テンプレートが正常に登録されると、以下のような応答が返されます。

HTTP/1.1 200 OK
Transfer-Encoding: chunked

20,12345

構文

個々の要求用テンプレートおよび応答用テンプレートは、テンプレートデータから成る1つの行内に格納されます。要求用テンプレートはメッセージ識別子10で示され、応答用テンプレートは識別子11で示されます。これらのメッセージ識別子のうち1つが SmartREST 要求内で発生すると、リクエスト全体がテンプレートとして扱われます。したがって、1011以外のメッセージ識別子はすべて、エラーとして処理されます。

要求用テンプレート

要求用テンプレートの構文は以下の通りです。

10,<ID>,<METHOD>,<URI>,<CONTENT>,<ACCEPT>,<PLACEHOLDER>,<PARAMS>,<TEMPLATE>

それぞれのパラメータについては下記の通りです。

要求の例を次に示します。

10,100,POST,/alarm/alarms,application/vnd.com.nsn.cumulocity.alarm+json,application/vnd.com.nsn.cumulocity.alarm+json,&&,UNSIGNED NOW,"{""source"":{""id"":""&&""},""type"":""c8y_MyAlarmFromSmartREST"",""text"":""This alarm was created by using SmartREST"",""severity"":""MAJOR"",""status"":""ACTIVE"",""time"":""&&""}"
10,200,POST,/measurement/measurements,application/vnd.com.nsn.cumulocity.measurement+json,application/vnd.com.nsn.cumulocity.measurement+json,&&,UNSIGNED UNSIGNED NOW UNSIGNED,"{""c8y_SmartMeasurement"":{""temp1"":{""value"":&&,""unit"":""C""},""temp2"":{""value"":&&,""unit"":""F""}},""time"":""&&"",""source"":{""id"":""&&""},""type"":""c8y_SmartMeasurement""}"
10,300,PUT,/inventory/managedObjects/&&,application/vnd.com.nsn.cumulocity.managedObject+json,,&&,,"{""c8y_Hardware"":{""model"":""&&"",""revision"":""&&""}}"
10,301,PUT,/alarm/alarms/&&,application/vnd.com.nsn.cumulocity.alarm+json,,&&,,"{""status"":""CLEARED""}"
10,302,PUT,/devicecontrol/operations/&&,application/vnd.com.nsn.cumulocity.operation+json,,&&,,"{""status"":""SUCCESSFUL""}"
10,600,GET,/identity/externalIds/c8y_Serial/&&,,,&&,,
10,601,GET,/devicecontrol/operations?deviceId=##&status=PENDING,,,##,,
10,602,GET,/inventory/managedObjects/&&,,,&&,,

要求の例は、Postman コレクションにも含まれています。 Postman コレクションでは、リクエストのセットは SmartREST > Register Request Templatesにあります。

デバイスの作成:

10,100,POST,/inventory/managedObjects,application/vnd.com.nsn.cumulocity.managedObject+json,application/vnd.com.nsn.cumulocity.managedObject+json,%%,STRING,"{""name"":""%%"",""type"":""com_example_TestDevice"",""c8y_IsDevice"":{}}"

それぞれのパラメータについては下記の通りです。

EXECUTINGへオペレーションを更新:

10,101,PUT,/devicecontrol/operations/%%, application/vnd.com.nsn.cumulocity.operation+json, application/vnd.com.nsn.cumulocity.operation+json,%%,INTEGER,"{""status"":""EXECUTING""}"

応答用テンプレート

応答用テンプレートの構文は以下の通りです。

11,<ID>,<BASE>,<COND>,<VALUE>[,<VALUE>]

それぞれのパラメータについては下記の通りです。

11,201,,"$.c8y_IsDevice","$.id"

それぞれのパラメータについては下記の通りです。

複数のX-Idを伴うSmartRESTの使用

SmartRESTは、同一リクエスト内に異なる複数のX-Idが存在する場合でも、メッセージの送信を行うことができます。この場合、X-Idヘッダーは入力せず、代わりに個々のX-Idをそれぞれに対応する行に入力することになります。

メッセージの送信

X-Idを本文中で指定するには、以下の行を記述します。

15,myxid

次のX-Id行を入力するまで、後続の行は指定されたX-Idで処理されます。

15,myxid1
...
...
15,myxid2
...

メッセージの受信

複数のX-Idを用いてリクエストした場合、応答にも複数のX-Idの応答が含まれます。応答には、後続行がどのX-Idに属するものかを示す追加行が含まれます。 この行の2番目の値は、当該X-Idに続く行数を意味します。

87,2,myxid1
...
...
87,1,myxid2
...

テンプレートが登録済みか否かの確認

X-Id行を本文に含めることで、テンプレートがすでに存在するか確認することができます。

15,myxid1
15,myxid2
15,myxid3
15,myxid4

すべての行について、登録プロセス時に記載のような応答が返されます。 下記が例となります。

20,12345
20,12346
40,"No template for this X-ID."
20,12347

テンプレートの登録

テンプレート登録でも、本文中でX-Idを使用することができます。したがって、1回のリクエストで複数のテンプレートを作成することができます。

15,myxid1
10,100,POST,/inventory/managedObjects,application/vnd.com.nsn.cumulocity.managedObject+json,application/vnd.com.nsn.cumulocity.managedObject+json,,,"{""name"":""Test Device"",""type"":""com_example_TestDevice"",""c8y_IsDevice"":{}}"
11,201,,"$.c8y_IsDevice","$.id"
15,myxid2
10,100,POST,/inventory/managedObjects,application/vnd.com.nsn.cumulocity.managedObject+json,application/vnd.com.nsn.cumulocity.managedObject+json,,,"{""name"":""Test Device"",""type"":""com_example_TestDevice"",""c8y_IsDevice"":{}}"
11,201,,"$.c8y_IsDevice","$.id"

SmartRESTリアルタイム通知

Things Cloudプラットフォームで利用可能なリアルタイム通知のエンドポイントおよびチャネルをすべて、SmartREST構文でも使用することができます。 Bayeux protocol の概要の理解、リアルタイム通知向けに提供するエンドポイントおよびチャネルの説明は リアルタイム通知 API をご覧ください。

リアルタイム通知とSmartRESTの併用

リアルタイム通知においてSmartRESTを使用するようThings Cloudプラットフォームに指示するには、URLへ送られるすべてのリクエストにX-Idヘッダーを含める必要があります。

メッセージ識別子

メッセージ識別子 メッセージパラメータ 説明
80 None 固有のbayeux clientIdを返す初期ハンドシェイク
81 clientId,channel 所定のチャネルへの接続
82 clientId,channel 所定のチャネルからのチャネル接続解除
83 clientId 通知を受信するための接続の確立(long-polling)
84 clientId サーバーからのクライアントの接続解除

ハンドシェイク

リクエスト例:

80

応答例:

Un1q31d3nt1f13r

チャネル接続

リクエスト例:

81,Un1q31d3nt1f13r,/mychannel

応答例:

エラー発生時を除き、当該チャネル接続について特定の応答は存在しません。

チャネル接続解除

リクエスト例:

82,Un1q31d3nt1f13r,/mychannel

応答例:

エラー発生時を除き、当該チャネル接続解除について特定の応答は存在しません。

接続

リクエスト例:

83,Un1q31d3nt1f13r

応答例:

応答は当該X-IdについてSmartREST経由で登録された応答用テンプレートによって設定されます。リアルタイム経由で受信した通知はすべて利用可能なテンプレートと併せて構文解析され、合致するすべてのテンプレートが、接続リクエストに対する応答として返されます。

接続維持:

Things Cloudプラットフォームは10分おきに接続断を検出するために、開いているロングポーリング接続経由でスペース文字を送信します。したがって、長時間にわたり開いたままの接続に対する応答には最初の行の先頭にスペース文字を含んでいる可能性があります。

接続解除

リクエスト例:

84,Un1q31d3nt1f13r

応答例:

エラー発生時を除き、当該接続解除について特定の応答は存在しません。

アドバイス応答

bayeuxプロトコルは、接続のタイムアウト、接続リクエスト間隔、および接続の応答のフォローアップのポリシーに対する推奨設定をクライアントに伝えるための特別なフラグメントを有しています。このアドバイスはSmartREST経由でも、応答内で個別の行として伝達されます。また、上述のリクエストのどの応答にも付加することができます。

応答形式:

86,<timeout>,<interval>,<reconnect policy>

タイムアウト(timeout)および間隔(interval)は、時間をミリ秒単位で定義します。再接続ポリシー(reconnect policy)値は、次の3つのいずれかになります。

アドバイス応答は、すべての値を埋める必要はありません。

例:

86,,10000,retry

複数のテンプレートを伴うチャネル接続

デバイスが複数のテンプレートを使用する場合(例:子デバイスが親デバイスと異なるテンプレートを有する場合)、これらのテンプレートをチャネル接続リクエストに加えることができます。その場合、サーバーはすべてのテンプレート(ヘッダーおよびチャネル接続ステートメントから)を使用して応答の構文解析を行います。

リクエスト例:

POST /notification/operations HTTP/1.0
Authorization: Basic ...
X-Id: mytemplate1

81,Un1q31d3nt1f13r,/mychannel,mytemplate2,mytemplate3

複数のテンプレートを使用する場合、行の構文解析にテンプレートを示す付加的な行を含みます。

87,{解析行数},{後続行の解析に使用するX-Id}

応答例:

HTTP/1.0 200 OK

87,2,mytemplate1
100,myvalue
101,myvalue2
87,1,mytemplate3
100,myvalue3

既定のメッセージ

SmartREST には、さまざまな既定のメッセージがあります。

リクエストメッセージ

メッセージ 識別子 メッセージ パラメータ 説明
10 テンプレートメッセージ 識別子
メソッド
リソース 識別子
Content MIME タイプ
Accept  MIME タイプ
プレースホルダー
リクエスト パラメーター
テンプレート 文字列
要求用テンプレートを表します。このメッセージが本文に含まれる場合、本文全体がSmartRESTテンプレートとして扱われるため、1011 以外のメッセージはすべてエラーとなります。
11 テンプレートメッセージ 識別子
ベース JSON パス
条件付き JSON パス
値 JSON パス
応答用テンプレートを表します。このメッセージが本文に含まれる場合、本文全体がSmartRESTテンプレートとして扱われるため、1011 以外のメッセージはすべてエラーとなります。
15 X-Id 後続の行に使用する X-ID を定義します。この行を使用する場合は、X-Id ヘッダーを使用しないでください。
61 Device MO GId デバイスのブートストラップ プロセス中にデバイス認証情報をポーリングします。X-Id ヘッダーは存在せず、デバイスのブートストラップ認証を使用する必要があります。
80 なし 固有のbayeux clientIdを返す初期ハンドシェイク。SmartRESTリアルタイム通知
81 clientId,channel 所定のチャネルへの接続。SmartRESTリアルタイム通知
82 clientId,channel 所定のチャネルからの切断。SmartRESTリアルタイム通知
83 clientId 通知を受信するための接続の確立(ロングポーリング)。SmartRESTリアルタイム通知
84 clientId サーバーからのクライアントの接続解除。SmartRESTリアルタイム通知

応答メッセージ

メッセージ 識別子 メッセージ パラメータ 説明
20 SmartREST テンプレート MO GId エコー応答メッセージ。テンプレートが検出された、または作成され、すべて問題ありません。
40 なし テンプレートが見つかりませんでした。
41 行番号(任意) テンプレート作成エラー
42 行番号 リクエスト行形式が不正
43 行番号 メッセージIDが無効
45 行番号 メッセージ引数が無効
50 行番号
HTTP 応答 コード
サーバーエラー。このメッセージは、SmartREST プロキシとプラットフォームとの間でエラーが生じた場合に発せられます。
70 行番号
固有デバイス識別子
テナント ID
ユーザー名
パスワード
認証情報と併せたデバイスブートストラップポーリング応答
86 タイムアウト、間隔、再接続ポリシー SmartRESTリアルタイム通知を使用するクライアント向けの設定アドバイス
87 行数、X-Id 後続応答行の作成に使用されたX-Idを表示

エラーメッセージ

メッセージ識別子 エラーメッセージ
41 Cannot create templates for already existing template object
すでに存在するテンプレートオブジェクトであるため、テンプレートを作成できません。
41 Duplicate message identifiers are not allowed
メッセージ識別子の重複は許可されません。
41 Bad request template definition
要求用テンプレートの定義が誤っています。
41 Bad response template definition
応答用テンプレートの定義が誤っています。
41 Bad value type: …
値のタイプが誤っています。
41 Bad pattern
パターンが誤っています。
41 Not a valid message identifier for template creation
テンプレート作成に有効なメッセージ識別子ではありません。
41 Invalid JsonPath
無効なJSONパスです。
41 Using JsonPath to refer to a list of objects is not allowed for SmartRest
オブジェクトリストを参照するためのJSONパスの使用はSmartRESTの場合、許可されません。
41 Using Filters (?) in JsonPath is not allowed for SmartRest
JsonPathにおけるフィルター(?)の使用はSmartRESTの場合、許可されません。
41 No content type supported for {GET or DELETE} templates.
{GET or DELETE}テンプレートに対応するコンテンツ型がありません。
41 No template string supported for {GET or DELETE} templates.
{GET or DELETE}テンプレートに対応するテンプレート文字列がありません。
41 No content type found for {POST or PUT} templates.
{POST or PUT}テンプレートに対応するコンテンツ型が見当たりません。
41 No template string found for {POST or PUT} templates.
{POST or PUT}テンプレートに対応するテンプレート文字列が見当たりません。
41 Values are only supported for templates with placeholder.
値はプレースホルダーを有するテンプレートに限り利用できます。
42 Malformed Request
リクエストの形式が誤っています。
43 Invalid message identifier
無効なメッセージ識別子です。
45 No arguments supported
対応する引数がありません。
45 Wrong number of arguments
引数の数が誤っています。
45 Value is not a {value type}: {value}
値が{値のタイプ}: {値}でありません。