RESTful な方法でリソースの「編集」フォームを実装するにはどうすればよいでしょうか?

StackOverflow https://stackoverflow.com/questions/46004

  •  09-06-2019
  •  | 
  •  

質問

現在あるアプリケーションに REST API を実装しようとしています。REST API を使用して、さまざまなリソースの読み取り/書き込み機能を公開したいと考えています。この「フォーム」部分をどのように実装すればよいでしょうか?基本的にメソッド呼び出しとして機能し、データを返す RESTful URL を作成することで、データの「読み取り」を公開する方法がわかりました。

GET /restapi/myobject?param=object-id-maybe

...そして、何らかのデータ構造を表す XML ドキュメントが返されます。大丈夫。

ただし、通常、Web アプリケーションでは、「編集」には 2 つのリクエストが含まれます。1 つは現在のバージョンのリソースをロードしてそのデータをフォームに入力するもので、もう 1 つは変更されたデータをポストバックするものです。

しかし、REST がマッピングされている HTTP メソッドで同じことをどのように行うのかわかりません。PUTですよね?誰かこれを説明してもらえますか?

(追加の考慮事項:UI は主に AJAX で行われます)

- アップデート:それは間違いなく役立ちます。しかし、サーバー側についてはまだ少し混乱しています。明らかに、ここでは単にファイルを扱っているわけではありません。サーバー上では、リクエストに応答するコードがリクエスト メソッドをフィルタリングして、その処理を決定する必要があります。それは読み取りと書き込みの間の「スイッチ」ですか?

役に立ちましたか?

解決

プレーン HTML 経由でデータを送信する場合は、POST ベースのフォームの実行に制限されます。POSTリクエストの送信先となるURI いけない は、変更されるリソースの URI です。毎回新しく作成されたリソースを追加するコレクション リソースに POST する必要があります (新しいリソースの URI を 位置 ヘッダーと 202 ステータス コード)、またはリクエストのコンテンツ (またはカスタム ヘッダー) で指定された URI を持つリソースを更新するアップデーター リソースに POST します。

XmlHttpRequest オブジェクトを使用している場合は、メソッドを PUT に設定し、データをリソースの URI に送信できます。サーバーがまだ存在しないリソースに有効な URI を提供している場合、これは空のフォームでも機能します。最初の PUT はリソースを作成します (戻り値 202)。後続の PUT は、データが同じである場合は何も行わないか、既存のリソースを変更します (どちらの場合も 200 エラーが発生しない限り返されます)。

他のヒント

さまざまな代替手段を使用できます。優れたソリューションは次の場所で提供されています。 マイクロフォーマットウィキ RESTful JSON スタッフによっても参照されています。本当に、できる限り標準に近づけるのです。

 Operate on a Record

GET /people/1
    return the first record 
DELETE /people/1
    destroy the first record 
POST /people/1?_method=DELETE
    alias for DELETE, to compensate for browser limitations 

GET /people/1/edit
    return a form to edit the first record 
PUT /people/1
    submit fields for updating the first record 
POST /people/1?_method=PUT
    alias for PUT, to compensate for browser limitations 

データサービスをWeb UIから分離する必要があると思います。データ サービスを提供する場合、ブラウザーがサポートできない動詞 (PUT や DELETE など) の使用を含め、RESTful システムが完全に適切です。

UI を説明するとき、ほとんどの人が「RESTful」と「優れた予測可能な URL」を混同していると思います。Web UI を記述する場合、純粋に RESTful な URL 構文についてはそれほど心配する必要はありません。

ロードは通常の GET リクエストであり、新しいデータの保存は現在データがある URL への POST である必要があります。

たとえば、現在のデータを次からロードします。 http://www.example.com/record/matt-s-example 次に、データを変更し、新しいデータを使用して同じ URL に POST を戻します。

PUT リクエストは、新しいレコードを作成するときに使用できます (つまり、データを現在存在しない URL に PUT します) が、実際には POST するだけで始める方が良いでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top