2009-08-07 1 views
3

私は、「ファクト」と呼ばれるリソースのコレクションのURIと、そのコレクションの各「ファクト」リソースのURIを持っています。HTMLフォームをすばやく送信するには

新しい「ファクト」を作成するフォームは、GETを使用してリクエストする必要がありますが、私は信じていますが、どのURIを作るべきかを決めるのは難しいです。

コレクションURIへのGETは、 'ファクト'リソースURIのリストを返すべきです。各 'fact' URIは、GETへの応答としてその内容を返すべきです。実際の「事実」作成はもちろん、状況に応じてPOST(またはPUT)になります。

私はいくつかのオプションが表示されますが、どれも満足のいくように見えるん:

  1. は「事実」URIが参照する「ファクトフォームのURIを追加します。このURIへのGETは、HTMLフォームを提供します。リソースの説明のためだけに別のリソースを持つのは間違っているようです。
  2. ヘッダーにフォームデータを含めずに 'facts' URIにPOSTを実行すると、フォームが返されます。ユーザーがフォームを入力すると、フォームデータでPOSTし、新しい 'ファクト'リソースを作成します。これはさらに悪いアプローチのようです。
  3. フォームをワイヤで送信するのではなく、APIの一部としてフォームを送信します。これは、REST APIがメディアタイプを記述する必要があり、フォームが 'fact'タイプの記述から作成できるため、RESTfulと思われます。これは実装するのが奇妙です。おそらく、RESTサービスは通常のWebサイトとは別物なので、実際のHTMLフォームリクエストはREST API以外のURIにあります。
  4. 「ファクト」URI応答の一部としてHTMLフォームを組み込みます。

明確にするために、私はRESTとしてポーズを取ったRPCを使わず、Roy Fieldingが指定した真のRESTアーキテクチャに従おうとしています。

編集:私は#3が何かにあると思っています。

edit2:解決策は、通常の非REST HTMLナビゲーションをCRUD方式で行い、フロントエンドがAJAX REST呼び出しを適切に行うことです(またはバックエンドがREST APIを内部呼び出しする)。

このサービスのREST部分を正しく実行する必要がある理由は、他のHTML以外のクライアントが後でこのサービスとやり取りできるようにするためです。

答えて

-1

あなたは少し複雑すぎると思います。 Webブラウザは完璧なRESTクライアントではないため、完全にRESTfulなソリューションは得られません。完璧な世界では、Webブラウザはメディアの種類を知り、フォーム自体を構築するため、フォームは一切必要ありません。

一方、ほとんどのRESTフレームワークがリソース上で追加の「ビュー」を呼び出してフォームを返すようにすることをお勧めします。
/your/collectionresource?view=form、または私の心の中で

+0

後者は、フォームの完全なURIです。 URI自体がどのように見えるかは気にしませんが、これはRESTには関係ありません。前者はクエリを誤って使用していますが、メリットがあるかもしれません。 – aehlke

+0

「クエリの誤用」とはどういう意味ですか?このアプローチにはいくつかの欠点がありますか?私はこれが私がこの状況でおそらく使用していたものなので、知りたいのですが。 – trendels

+1

クエリは、特定のリソースを指定するのではなく、実際のクエリのようなリソースセットのサブセットを要求するためのものです。 – aehlke

2

/your/collectionresource;form、だけきれいにRESTfulな答えは、私はそれを見るように、リソースの説明は、独自の資源である1と3

です。問題は、アプリケーションのAPIを通じてこのリソースにアクセスできるようにするか、それをAPI自体の一部にしたいかどうかです。(明らかにidは単語または何か他のものであるかもしれない>という1を返します - >すべての事実 GET /事実/ 1 -

GET /事実:1の場合

、RESTfulな、このようなURI何かを作るようです) GET/facts/create - >ファクトを作成するのに適したフォームを返します。 POST /ファクト - >ファクトを追加します。

+0

しかし、説明はAPIに属するリソースです。だから、ワイヤでそれらを送るのはRESTfulではないようです。 – aehlke

+1

私は、HTMLインターフェイスからRESTインターフェイスを分離する必要があると思います。 HTMLインタフェースは、フロントエンドからAJAXを経由して、またはサーバーの内部でのみ、REST URIを呼び出します。また、RESTインターフェースはHTMLインターフェースについて何も知らない。 – aehlke

+0

私はあなたが「記述はAPIに属している」と断言できるとは思わない。このようなことは設計上の選択です。場合によっては、APIの記述時にリソースの説明が完全にはわからないことがあります.CouchDBを見てみましょう。あなたの場合、私はAPIが記述のための最良の場所であることに同意し、あなたのHTMLフロントエンドはそのAPIを利用することができます。 – Chuck

関連する問題