OData を使用して、HTTP キャッシュからいくつかの利点を得たいと考えています。「1 つのエンティティには 1 つの URI がある」というルールに落ち着きました。1 つのエンティティに対してクエリを実行する方法は多数あります。SKU=123 (PK) の製品としましょう。
/MyService.svc/Product(123)
また
/MyService.svc/Product?$filter=sku eq 123
あるいは
/MyService.svc/Product(123)?$filter=sku eq 123
この製品を照会する最もあいまいな方法は、タイトルを使用することです。
/MyService.svc/Product?$filter=title eq 'Some handy product'
(このクエリが 1 つのエンティティ (製品 123) のみを返すことを期待してください)
私の質問は、この種のクエリに応答する最も OData の方法は何ですか?
いくつかの調査の後、私の最後の意見は次のとおりです。
- Product(123) をそのまま動作させる
- $filter=sku eq 123 / id eq 123 の場合、HTTP 302 と Product(123) を指す Location ヘッダーで応答します。
- Product(123)?$filter=sku eq 123 の場合、400 (Bad Request) で応答します。あるいは、Product(123) への 302 リダイレクトを使用することもできます。
しかし、最後のケースをどうするか?