6

これが「ディスカッション」の質問に近い場合はご容赦ください。ただし、適切な説明とともに、はい/いいえの回答をいただければ幸いです。

次世代の火星探査車などのロボット用の制御 API を設計して実装する必要があるとします。RESTful の原則に従ってこの API を設計しますか、それとも XMLRPC などの従来の RPC を使用しますか?

「ロボット」は仮想マシンの集まりですが、似たようなことをしなければならないので、これを尋ねます。REST の支持者としてよく知られているかなり説得力のあるエンジニアから、API を RESTful にするよう強く勧められています。私は REST の原則を使用したことがなく、低レベルのプロセス間 API の設計にどのように適合するかを理解するのに苦労しています。REST には、変更可能なデータ リポジトリと対話するというテーマが盛り込まれているように見えますが、通常は何ホップも離れています。私がやろうとしていることは、ロボットを厳密に制御するようなものです。抽象的に言えば、ロボットが単なるデータ リポジトリであると主張できることはわかります。「PUT 左折」、「PUT 移動 100 メートル」、「外気温を取得」。しかし、これはかなり不自然なモデルのようです。確かに、キャッシュやプロキシから何のメリットも得られません (「こんにちは、JPL? これはキャンベラにある Akamai co-lo です。今、ローバーを引き継いでいますよね?」)

では、RESTful アーキテクチャはここで役に立ちますか? インタラクションが非常に狭い範囲に集中している場合でも、RPC よりも優れているのでしょうか?

4

2 に答える 2

7

REST は従来の RPC よりも理にかなっていると思います。Micorosft Robotics Studio ランタイム アプリケーション モデルでさえREST を使用します。

ロボットは、URI によって識別されるさまざまなリソースで構成できます。これには、センサーとアクチュエーターごとに 1 つ、またはそれらの複合抽象化が含まれます。

REST は、特定のメソッドの副作用が何であるかを保証することに重点を置いており、キャッシングも容易にします。どちらも、離れたロボットの制御や監視などに役立ちます。REST を使用できるからといって、HTTP プロトコルである必要はありません。

ただし、GET のような SAFE および IDEMPOTENT メソッドは、ロボットの状態を追跡し、センサー データをポーリングするのに適しています。Last-Modified ヘッダーのようなものを使用して、あまり変更されないキャッシュされたセンサー データ (湿度や光のレベルなど) を取得できます。

長距離の場合、キャッシングにリレー プロキシを使用できます。

ロボットを動かすコマンドの場合、そのようなメッセージごとにロボットが変更される場合 (たとえば、 turn right )、POST のようなものが使用されます。コマンドがすぐに実行されたか、処理のためにキューに入れられたかを示すステータス コードを返すことができます。

リソースの絶対的な状態は、PUT のようなものを使用して設定できます。この場合、複数のメッセージが 1 つのメッセージ以上のものを変更することはありません (たとえば、北極を指す、フロント ライトを 10% の明るさに暗くするなど)。これにより、メッセージが途中で失われる可能性がある場合でも、信頼性の高いメッセージングが可能になります。

新しいリソースは、データ収集ルーチンや一連のパラメータなど、POST に似た操作によっても作成できます。POST 要求は、新しいリソースの URI を含む CREATED 結果を返すことができます。これは、不要になったときに DELETE に使用できます。

ロボットのグループは、同じ REST ベースのプロトコルを使用して互いに話すこともでき、同じメリットを享受できます。

確かに、1 人の人間が 1 台の孤立したローカル ロボットを制御するような単純なものの場合、REST API は過剰かもしれません。しかし、マルチユーザーおよび/または信頼性の低い通信チャネルおよび/または Web 規模のネットワークでは、REST を検討する必要があります。

于 2008-10-09T02:57:13.910 に答える
1

REST principles ensure that your application scales well, and plays well with intermediaries across the internet, (proxies, caching, etc). If your "virtual machine" network is large scale then a RESTful architecture could be advantageous. If you are building a small-scale network, then REST would not be as compelling.

于 2008-10-09T03:01:10.753 に答える