0

通常、リソースを取得するには、次を使用します。

GET http://ws.mydomain.com/resource/123212

しかし、アイテム ID が HTTP URI の場合はどうなるでしょうか?

GET http://ws.mydomain.com/resource/http://id.someotherdomain.com/SGX.3211

ブラウザーは 2 つのスラッシュを 1 つに置き換え、リクエストは次のようになります。

GET http://ws.mydomain.com/resource/http:/id.someotherdomain.com/SGX.3211

これは機能しません。

「 http://id.someotherdomain.com/SGX.3211 」部分をエンコードする URI は、HTTP 400 - Bad request になります。

これを処理するためのベストプラクティスはありますか?


編集:

もちろん、フォームでリクエストする必要がある場合(現時点ではありません):

リソース/ ID /コレクション/ ID

すべての ID は HTTP URI であり、手に負えなくなります...おそらく、次のようなことをして、中括弧内の内容を解析できます。

resources/{http://id...}/collections/{http://id...}

4

1 に答える 1

0

他のシステムの URI をエンコードし、値をクエリ パラメータとして渡します。

GET http://ws.mydomain.com/resource?ref=http%3A%2F%2Fid.someotherdomain.com%2FSGX.3211

見苦しいですが、REST アーキテクチャで使用される URI が美しくなければならないとは誰も言いませんでした。:)

ところで、GET が送信されると、実際には次のようになります。

GET /resource?ref=http%3A%2F%2Fid.someotherdomain.com%2FSGX.3211 HTTP/1.1
Host: ws.mydomain.com

更新:どうやら「/」と「?」をエンコードする必要がなくなったようです。クエリ コンポーネント内。RFC 3986から:

文字スラッシュ ("/") と疑問符 ("?") は、クエリ コンポーネント内のデータを表す場合があります。一部の古い誤った実装では、相対参照 (セクション 5.1) のベース URI として使用される場合、そのようなデータが正しく処理されない可能性があることに注意してください
。ただし、クエリ コンポーネントは、「キー = 値」のペアの形式で識別情報を運ぶためによく使用され、頻繁に使用される値の 1 つは別の URI への参照であるため、これらの文字のパーセント エンコーディングを避ける方が使いやすい場合があります。

したがって、合法的にこれを行うことができます:

GET /resource?ref=id.someotherdomain.com/SGX.3211 HTTP/1.1
Host: ws.mydomain.com
于 2013-11-14T20:52:28.447 に答える