web-dev-qa-db-ja.com

残りのアプリケーションヘッダーベースとパスベースのサービスルーティング

より複雑なSOAPベースのサービスのフロントエンドであるREST APIがあります。 soapベースのサービスは、ルーティングを実行するために拡張(カスタム)WSAアドレス指定ヘッダーを使用します。 WSA-Addressingの拡張により、たとえば、国と都市の2つのヘッダーパラメータが追加されます。ルーティング要素は必須なので、何らかの形でREST APIに渡し、SOAPクライアントでそれらを使用してルーティングを正しく行う必要があります。 REST APIに関して2つのオプションがあります。

  1. それらをHTTPヘッダーとして渡す
  2. それらをパスパラメータとして渡します。たとえば、2つのルーティングパラメータが土地と都市であり、私のRESTリソースIDが123456であるとします。

それらは私のGETは次のようになります:

getResource/country/city/123456

ヘッダーを使用すると、次のようになります。

getResourfce/123456

IDのみがリソースを一意に識別するため、国と都市はルーティング専用であることに注意してください。

SOAPを使用している場合、HEADERを使用することは間違いありません。ルーティングに関してRESTを使用する場合の状況はどうですか。

このパラメータを表現する適切な方法は何ですか?ヘッダーまたはパス要素?

2

IDのみがリソースを一意に識別するため、国と都市はルーティング専用であることに注意してください。

基になるSOAPサービスがリソースを見つけるためにそれらを必要とし、IDだけがリソースを識別できない場合、それらはリソースを識別するために必要な事実。

リソース間で共有されないIDを持つことは、ID自体がリソースを一意に識別できることと同じではありません。

たとえ /Canada/Toronto/12345および/Ireland/Dublin/12345はIDが共有されていないため発生しません。正しいリソースを取得するには、この国と都市の情報が必要です。

だから私はそれらをURLに入れます。

ヘッダーに入れないでください。この情報は、HTTPトランスポートレベルとは関係ありません。

1
Cormac Mulhall

結局のところ、どちらを選択するかはあなた次第です。

最初はヘッダーアプローチが好きではありませんでしたが、RESTfulサービスでのヘッダーの使用例を2つ見つけて、それを賢く見せました。

  • Authorization:ヘッダーは、フィールドの異なる可視性など、リソースへのアクセス権を制御するために使用されます。
  • Accept:ヘッダーを使用して、リソースの表示を選択できます。つまり、同じリソースをJSON、XML、またはHTMLデータとして表示できます。

ただし、特定の1つの国/都市の組み合わせでのみ各リソースにアクセスでき、クライアントがそのことを知る必要がある場合usa/new_yorkは11112222に必要ですが、spain/madrid 111​​12233の場合、これらはパスに入る必要があります。ヘッダー値はURIの一部ではなく、特定のリソースのリクエストで渡される必要がある国と都市を覚えたり見つけたりすることは、クライアントの責任ではありません。

1