既存の製品データベースの上に(読み取り専用の)RESTサービスを配置する必要があります。簡単な部分は、トップレベルの製品のリソースを持っているようなものです:REST APIデザイン:サブリソースでもあるリソースを処理する方法
今/api/products/
、実際にこのサービスの発信者ではなく、店舗の特定のプロセス(のような "のIDに基づいてその関連製品を取得する必要があります小売")。これらの2つの値を組み合わせることで、構成の一部を構成することができます。これは発信者にとって透過的でなければならず、これらの「製品ポートフォリオ」について知る必要はありません。
だから私は、1234 StoreIDで、小売はプロセスであり、このようにURIの設計について考えた:
/api/stores/1234/retail/products
私がいっぱいここに製品やURIを返す必要がある場合は、ここまで来る最初の質問です.../api/products /にある個々のリソースは、呼び出し元が/ api/productsから個々の製品を取り出す必要はないということは明らかです。これは、/ api /店舗/ 1234 /小売/製品URI。
物事を複雑にするにはもちろん、それらの商品にも価格があります。また、ここでは、製品には1つの価格がありませんが、StoreIDとプロセスにも依存する複数の価格があります。実際には、価格はそう、製品の直接の子である:
/api/stores/1234/retail/products/ABCD/prices
:StoreIDとプロセスのに関連しているよう
/api/products/ABCD/prices
は、再び明白な選択であるが、考えのように、URIを価格プレフィルター
が適切でしょう。
同時に、製品の詳細のように、このURIの下にあることに意味のない製品の他のサブリソースがあります。これらは店舗やプロセスに依存しないため、/ api/products/ABCD/detailsの下でのみ意味があります。
しかし、これはどうにか私に乱雑に見えます。しかし同時に、唯一の製品のリソースに直接それを解決するためにqueryparamフィルタを有することによって、これを解決するには、非常に良くないと、StoreIdとプロセスの両方を提供するために、発信者を強制しません:
/api/products?store=1234&process=retail
/api/products/ABCD/prices?store=1234&process=retail
さらに、プロセスやstoreidは製品とは何の関係もないので、製品に直接問い合わせるのは奇妙に思えます。価格については、それは意味をなさないでしょう。
私の質問は:これは私が見ていないこれを解決する良い方法はありますか?そして:あなたがサブリソースであるときに完全な製品を返すことをお勧めします - それを行うときに(HTTP)キャッシュを扱うことについてどう思いますか?私は/ API /製品/ に彼らの個々のリソースにフル こちらの製品またはURIを返す必要がある場合はここまで来る最初の質問は
'store'と' process'が 'products'リソースのパラメータである場合、サブリソースを取得してもそれを維持するのがよりクリーンだと思います。救助 - '/ api/products; store = 1234; process = retail/ABCD/prices'のためのマトリックスパラメータ。一般的に言えば、良いURIデザインでは、サービスをよりRESTfulにするのではなく、より複雑なURIを持つものを作成するわけではありません。クライアントは本当にRESTfulな環境で、サーバーの応答から必要なものをすべて学びます。ほとんどのRESTサービスは自分自身をRESTfulと呼ぶべきではなく、むしろ 'HTTPやASOTOHの上にあるAPIサービス ' –
これは/ api/products URIの上に直接公開することの1つの問題は、ストアとプロセスの組み合わせが実際に特別な意味を持ち、私が選択しているデータのセットを減らします。たとえば、ストアIDだけを渡すと、すべての製品から選択されますが、両方を渡すと、構成されたサブセットからのみ選択されます。そのため、特別なシナリオをクエリするときに特別なURIを使用すると、店舗とプロセスが商品に直接関連付けられていないため、さらに意味があると考えられました。 – CodingByLuck