SmartREST 1.0

重要

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

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

このセクションでは、既存の SmartREST 1.0 テンプレートを MQTT で使用する方法について説明します。

SmartREST 1.0 は HTTP リクエスト / レスポンス用に設計されており、MQTT による ID レス通信をサポートしていないことに注意してください。MQTT 接続のみを使用して、HTTP で送信するのと全く同じリクエストを送信します。そのため、MQTT はリクエスト / レスポンスではないため、いくつかの制限があります。

SmartREST 1.0 のサポートは、既存の SmartREST 1.0 テンプレートを使い実装している場合に、移行を容易にするために追加されました。

SmartREST 1.0 に関する一般的な情報については、RESTインターフェースの使用 を参照してください。

概要

MQTT ClientId

SmartREST 1.0 では各メッセージの本文で ID を送信する必要がありますが、正しい MQTT ClientId で接続することは依然として重要です。

MQTT ClientIdは、デバイスの c8y_Serial の externalId と一致する必要があります。正しいオペレーションとレスポンスを割り当てるために使用されます。

SmartREST 1.0 の送受信

一般に、MQTT を介した SmartREST リクエストとレスポンスには、次のことが当てはまります。

  • すべてのリクエスト行は、単一の MQTT メッセージとして送信されます。1 つの要求メッセージは、複数の応答メッセージに分割されるのではなく、常に 1 つの応答メッセージを生成します。
  • すべての SmartREST 応答テンプレートは、1 つのリクエストの JSON レスポンスに適用されます。
  • 一致するすべての応答テンプレートは、レスポンスに 1 行を生成します。
  • レスポンス行は \n で区切られます。

SmartREST 1.0 の送信

サーバーにデータを送信するには、SmartREST エンドポイント /s に POST するのと同じ内容をパブリッシュできます。

X-ID ヘッダーは、クライアントがパブリッシュする必要があるトピックの一部です。

s/ul/<X-ID>

X-ID はプロトコル識別子として機能し、テンプレート コレクションを識別します。
X-ID は不変である必要があり、常にまったく同じテンプレート コレクションを識別します。
テンプレート コレクションが変更された場合は、X-ID も変更する必要があります。
また、X-ID はグローバルに一意である必要があります。他のユーザーが使用していない X-ID を選択してください。確認のために、次のような逆引きドメイン名を使用することをお勧めします。

例:
com.acme.gw801-v1
com.acme.gw801-v2

また、プロトコルバージョンを X-ID の接尾辞として追加することをお勧めします。

処理モード

Things Cloud SmartREST プロトコルは、送信されたデータがデータベースに保存しないようにするための TRANSIENT 処理モードをサポートしているため、トピック s/ ではなくMQTTトピック t/ にパブリッシュすると、データはリアルタイム処理にのみ渡されます。

t/ul/<X-ID>

Things Cloud SmartREST プロトコルは、QUIESCENT 処理モードもサポートしており、トピック s/ ではなく MQTT トピック q/ にパブリッシュすることで、リアルタイム通知を回避できます。現在、QUIESCENT 処理モードはメジャーメントとイベントにのみ適用可能です。

q/ul/<X-ID>

Things Cloud SmartREST プロトコルは、CEP 処理モードもサポートしています。このモードでは、データがリアルタイム通知とともにリアルタイムイベント処理エンジンにのみ送信されるようにします。MQTT の c/ トピックではなく s/ トピックにパブリッシュすることで、CEP 処理モードを無効化できます。現在、CEP 処理モードはメジャーメントとイベントにのみ適用可能です。

c/ul/<X-ID>

SmartREST 1.0 の受信

テンプレートが応答テンプレートを起動する場合、サーバーは次のトピックで返されるメッセージをパブリッシュします。

s/dl/<X-ID>

このトピックは、クライアントがサブスクライブできます。

オペレーションの受信

HTTP 経由の SmartREST 1.0 はエンドポイント /notification/operations を提供し、リアルタイムのオペレーションを監視します。次の MQTT トピックでも、同じ内容を受け取ることができます。

s/ol/<X-ID>
備考
通知を実行するためには、プラットフォームデバイスに MQTT ClientId と一致する externalId が設定されている必要があり、そうでない場合は通知を受け取ることができません。

制限事項

MQTT は現在、リクエスト / レスポンスをサポートしていません。したがって、パブリッシュ トピックでリクエストを送信し、サブスクライブ トピックでレスポンスを受信した場合、クライアントはそれらがリクエストに対するレスポンスであることを安全に照合できません。

この制限に対処するには、どのリクエストがレスポンスをトリガーしたかを知る必要がないようにテンプレートを設計することにより、クライアントが messageId によって自動的に認識するようにします。

プロトコル

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(カンマ区切り値)形式を使用します。スムーズに通信するには、次のルールに従わなければなりません。

  • すべての改行が \n 文字列でエンコードされなければなりません。
  • 値は常にカンマ(,)で区切られます。
  • 値に二重引用符(")、カンマ(,)、先頭または末尾の空白、改行(\n)、キャリッジリターン(\r)またはタブ位置を含む場合、それらを引用符(")で囲む必要があります。二重引用符(")は、さらに別の二重引用符("")を前に付けてエスケープする必要があります。

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

次の例は、上述したルールを示しています。

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'!

処理モード

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

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

リアルタイム処理にデータを転送するだけの場合、HTTP リクエストのヘッダーに TRANSIENT 処理モードを追加して指定する必要があります。

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 コール(その後プラットフォームへ送られる)へ変換し、プラットフォームに送信するために必要なすべての情報が含まれています。

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

  • メッセージ識別子としての固有の符号なし整数
  • 要求メソッド(例:GET または POST
  • リソース URI(例:/inventory/managedObjects
  • 送信データおよび受信データの Content-Type および Accept ヘッダー値
  • プレースホルダー(例:%%
  • 予想されるリクエストパラメータ(例:STRING (文字列)、NUMBER(数)、UNSIGNED(符号なし)整数、DATE (日付))
  • 各リクエスト パラメータのプレースホルダーを伴うテンプレート文字列

応答テンプレート

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

応答テンプレートには、次の情報が含まれます。

  • メッセージ識別子としての固有の符号なし整数
  • $ または $.managedObjectsなど、データの抽出元となるベースオブジェクトまたはオブジェクトリストを参照する JSON パス。JSON パスがオブジェクトのリストを指す場合、リスト内の各オブジェクトについて抽出されたデータから生成される 1 つの行が取得されます。
  • 値を抽出するためにベースオブジェクトまたはオブジェクトリスト内に存在しなければならない JSON パス(例: $.id)。この値は、レスポンスに含まれません。
  • 抽出する各値を表わす JSON パスの変数(例:$.id$.name$.type)。値は、テンプレートにおいて定義された順序でレスポンスに追加されます。

登録プロセス

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

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

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

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

テンプレートがすでに存在する場合、次のレスポンスが取得されます。メッセージ識別子 20 はテンプレートがインベントリに存在することを意味し、パラメータ 123456 はテンプレートのマネージドオブジェクトの 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>

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

  • <ID> :要求テンプレートのメッセージ識別子
  • <METHOD> : リクエストに使用する HTTP メソッド。GETPOSTPUTDELETE がサポートされます
  • <URI>:リソース識別子
  • <CONTENT>Content-Type のヘッダーフィールド値
  • <ACCEPT>Accept ヘッダーフィールドの値です。多くの場合 <CONTENT> と同じになります
  • <PLACEHOLDER>: リクエストのURIおよびテンプレート文字列内でパラメータに置き換えられる文字列
  • <PARAMS>: :テンプレートに要求されるパラメータの種類をスペースで区切ったリスト。リクエスト URIおよびテンプレート文字列内でプレースホルダー文字列が発生する数は、指定されたパラメータ数と同一でなければなりません
    • STRING パラメータ:値が指定されていない場合に限りエラーが発生します
    • UNSIGNED パラメータ:供給されたパラメータが符号なし整数でない場合にエラーが発生します
    • INTEGER パラメータ: 供給されたパラメータが符号付き整数でない場合にエラーが発生します
    • NUMBER パラメータ: 供給されたパラメータが浮動小数点数でない場合にエラーが発生します
    • DATE パラメータ: パラメータを日付として構文解析できない場合にエラーが発生します
    • NOW パラメータ: エラーを生じることがありません。要求パラメータは不要です
  • <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"":""このアラームは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 にインポートする方法については、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"":{}}"

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

  • 10: 要求テンプレートを示します
  • 100 : 要求テンプレートのメッセージ識別子
  • POST: 使用する HTTP メソッド
  • /inventory/managedObjects : リソース識別子
  • application/vnd.com.nsn.cumulocity.managedObject+json : Content-Type 値
  • application/vnd.com.nsn.cumulocity.managedObject+json : 許容する Content-Type 値
  • %% : プレースホルダー文字列
  • STRING : 文字列でなければならない 1 つのパラメータをリクエストが許容することを指定します

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>]

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

  • <ID> : 応答テンプレートのメッセージ識別子
  • <BASE>: 値の抽出元となるオブジェクト、またはオブジェクトリストを指すベース JSON パス
  • <COND> : 存在確認を受ける条件付き JSON パス。パスが存在する場合に限り、値が抽出されます
  • <VALUE> : ベースオブジェクト内またはベースオブジェクトリストに含まれるオブジェクト内の抽出対象値を指す JSON パス。個数制限なく <VALUE> を指定することができます
11,201,,"$.c8y_IsDevice","$.id"

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

  • 11: 応答テンプレートを示します
  • 201: 応答テンプレートのメッセージ識別子
  • $: ベースオブジェクトの JSON パスを空としているため、$ が想定されます
  • $.c8y_IsDevicec8y_IsDevice というフラグメントをオブジェクトが有する場合に限り、値が抽出されることを指定します
  • $.id: 抽出される値(デバイス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 つのいずれかになります。

  • none: 接続からのレスポンス後に再接続しません
  • retry: 接続からのレスポンス後に再接続します
  • handshake: 新たなハンドシェイクから開始します(例:clientId が無効である場合、サーバーがセッションを閉じた場合)

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

例:

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}
値が {値のタイプ}:{値} でありません