1

何が間違っていて何が正しいのか判断できない奇妙な状況に追い込まれています。

Invoice というリソースがあります。JSON または XML 表現を取得するには、以下の URI を使用します

somedomain.com/inovices/{InvoiceNumber} - Invoice number is numeric
Accept: application/xml

同じリソースの PDF が必要な場合は、以下の URI を使用します。

somedomain.com/inovices/{InvoiceNumber} - Invoice number is numeric
Accept: application/pdf

上記の両方の URL は、認証されたリクエストに対して提供されます。また、認証されていないリクエストに対して GUID を使用して同じリソースをサポートしたいので、以下の URL を使用したいと考えています。

somedomain.com/inovices/{GUID}
Accept: application/pdf

上記の URL はパーマネント URL のようなもので、誰でもこの URL に何度でもアクセスできます。私の混乱は、上記のように URL を提供することが RESTful かどうかです。ある URL では数値の請求書番号を使用しており、永続的な URL では GUID に置き換えているためです。

これが間違っていると感じた理由は、同じリソースを返しているにもかかわらず、同じリソースが 2 つの異なる URI (番号と GUID) で表されているためです。それとも、それが間違っているという私の仮定ですか?私が理解できないのは、REST cosntraint に反するものですか?

4

1 に答える 1

1

異なる URI が同じリソースを指していても問題はありません。それがユーザーに付加価値を与えるのであれば、それは問題ないだけでなく、推奨されることもあります。

次の例を考えてみてください。

GET /api/users/543
GET /api/users/bob-marley

または、SO のように:

GET /questions/16637720/restful-different-uri-of-same-resource-to-get-different-forms-of-same-resource
GET /q/16637720/1118323

似たような例はどこにでもあります。ユーザーやSEOに役立つ場合は、この「不要な」情報を追加し、短いバージョンを引き続き利用できるようにすることをお勧めします。または、既存のリソースを壊さずにリソースにアクセスする方法を追加したいシナリオを想像してみてください。私には非常によくあることのように思えますが、同じリソースに対して複数の URI を使用しても、規則に違反することはありません。

ユーザーが異なる URI を使用したために 2 つのリソースが異なると考えるのではないかと心配している場合は、1 つの URI を別の URI にリダイレクトして、それがまったく同じリソースであることを明示することができます (SO がショートしたときに行うように)リンク、またはスレッド見出しのないリンク)。

ここに関連する答えがあります。

于 2013-05-19T19:39:56.447 に答える