2012-01-18 7 views
3

私は、マシンをコントロールし、そこにRESTインターフェイスを追加する既存のアプリケーションを持っています。高レベルのコマンドのうちの2つは、機械の動作を開始および停止することである。私はもともと持っていた程度のような動詞、POSTおよびDELETEにこれらの操作をマッピングかかわら:マシンコントロールのためのRESTインターフェイスデザイン

POST /control   // start machine operation 
DELETE /control   // stop machine operation 

を私たちは本当に、このような、ちょうど停止操作として何かを削除していません。削除は適切ではないようです。もう一つのアイデアは、このような

POST /control/start_operation // start machine operation 
POST /control/stop_operation  // stop machine operation 

として、さらにURLに操業を綴ることでしたが、これはURL内の動詞を入れていないのRESTの概念と矛盾するようです。この種の操作をどのようにマップするのが最適かについてのスタックオーバーフローリーダーからのアドバイスはありますか?

+1

* start *と* stop *の両方のコマンドが冪等であるため、安全に 'PUT'を使うことができます。 –

答えて

2

RESTはRepresentational State Transferの略で、状態のリソースの転送に重点を置いています。

「適切な」RESTインターフェイスを設計するには、まず、どのリソースの状態が転送されているかを定義する必要があります。

あなたが言ったことから、転送される唯一の状態はマシンの現在の状態です。そのためには、実際にREST呼び出しでその状態を更新するだけで、この状態に基づいて発生する追加のアクティビティが発生します。

「状態を更新してその他のことが起こる」モデルに最も適したHTTP動詞がPOSTです。 POSTは/myMachineController/statusに、ペイロードはonまたはoffのいずれかになります。

一般的に、RESTはデータ中心のサービスのパラダイムであり、通常、処理するデータがあまりない場所ではあまり適していません。

+0

ありがとう、それは良いフィードバックです、私は同意します。 –

1

POST http://localhost/3d-printer/state HTTP/1.1 
Content-Type: application/x-www-form-urlencoded 

state=on 
+0

フィードバックいただきありがとうございます。 RESTサービスにデータを送信する場合、データは通常x-www-form-urlencodedタイプとして送信されるか、またはJSONとしてもペイロードを送信できますか? –

+0

JSONは完全に有効です。 – roberkules

関連する問題