2012-05-18 15 views
6

私のAPIにバリデーションのみのリクエストがあることを希望します。たとえば、私は次のようなURLがある場合:RESTful API:検証専用に使用するメソッド/ヘッダーの組み合わせ

http://api.somesite.com/users/12345 

、ユーザーがクライアント上での情報のフォームに必要事項を記入しているそのリソースへの私は最終的にPATCH/PUT/POST。ユーザーがフォームに記入すると、部分的に更新された表現をサーバーに定期的に送信して、入力のリアルタイム検証を表示することができます(「そのユーザー名はすでに取得済みです」、「そのパスワードは短すぎる")。

標準のHTTPメソッドまたはヘッダーが、同じリソースでこの動作を可能にしているようです。私が検証したいが、 を保存していないことを示す

  1. 検証
  2. は、カスタムヘッダ(X-somesite検証のみ)およびPUTを使用する新しい従属リソースを作成します。私のオプションがあるようです
+0

関連質問:HTTP ://stackoverflow.com/questions/8368931/how-should-i-design-a-restful-url-to-validate-an-object – suing

+0

大きな質問です。ちょうどこの問題に遭遇しました。私はまったく同じ2つのアプローチの間で議論しています。個人的に見出しに向かって。多くのコマンドでgitの '--dry-run'パラメータに触発されています。 –

答えて

2

いくつかのオプション

1)を使用したカスタムヘッダー
2)を使用しているアヤックス、で行われている方法です妥当性を確認する場合
3)アクションUR1を使用します。 \ IndividualClient \ 123 \ actions \ Validate \ Invoke {section 19 here http://restfulobjects.files.wordpress.com/2011/11/restful-objects-spec-052.pdf}
4)階層的なURL。 \ IndividualClient \ 123 \検証

このpostから私は

は、あなたが入力されない限り、計算などでGET RPC-好きですか 使用を感じている何かをしなければならない時はいつでもPOSTを使用していますこのアドバイスを見つけます大きい場合は この場合はPOSTを使用してください

あなたの特定の質問に関しては、#4と#5にPOSTを使用してください。これらの操作は上記の "RPCのような"ガイドラインの下にあります。 #5の場合、POSTは必ずしもContent-Type:application/x-www-form-urlencodedを使用する必要はありません。これは、JSONまたはCSVのペイロードと同じように簡単です。ここで

は私が検討しているものです:

これは、リソースの追加です:
ユーザー/検証
POST
要求:UserResource
応答:ValidationResult
応答コード200、 400. 404。500

これはリソースの更新
ユーザ/ 204 /検証
POST
要求である:UserResource、
応答:ValidationResult レスポンスコード200、400 404 500

+0

私はこれに非常によく似たものを実装しましたが、ソフトウェアルーターを書き換えないようにするために、私はちょうどクエリ文字列の一部にしました: POST/user/204?validate – Fleep

0

Thridオプションは、クライアントに検証機能を実装することです。この関数は、特定の情報が必要なときに特定の要求を送信します。

たとえば、パスワードが短すぎるかどうかを確認する要求を送信する必要はありません。しかし、ユーザー名が存在するかどうかを確認する単一の要求を送信することができます。

これは、検証はところで示すクエリ文字列に何かを入れてRESTfulなAPI(HTTP):)

+1

私は、AJAXは転送プロトコルとして必ずHTTPを使用すると主張しますが、必ずしも意味のある方法でAPI *としてRESTfulな実装を実装する必要はありません。 「すべてのHTTPがRESTfulである」と言って、その点を逃してしまいます。 – Fleep

+0

また、サーバー側で検証するつもりです。自分自身を繰り返さないように、検証コードを標準化して1か所に保管したいと思っています。パスワードの検証などのUIに影響を与えるリアルタイム検証は、クライアント側のシン・クリティカルではない検証でうまくいくでしょう。しかし、それは私が上記について尋ねているものの代わりとはならない。 – Fleep

+0

これは開発作業量(つまりクライアント側とサーバー側)の2倍です。 – Pierre

関連する問題