2016-10-29 7 views
2

私はSpring Boot(JHipsterで生成)を使用しています。リレーションシップのベストURL構造

私は、以下のサービスがあります、

/api/market/ 
/api/market/:id 

/api/product/ 
/api/product/:id 

GET、PUTを持つすべてのものPOSTおよびDELETE。しかし、もう少し具体的なサービスを実装する必要があります。

このサービスは、市場にあるすべての製品を返す必要がありますX。しかし、私はこの呼び出しをURLパスで渡すことを考えていました:/api/product?marketID=1ですが、私はマーケットテーブルでselectをしてから商品を手に入れなければなりません(market_idフィールドで検索が簡単になります)。

このURLが最適な構造であるかどうか、この種の検索がわかりません。私はあなたがフィルタを行うテーブルの特定のフィールドを検索することができますが、私はテストし、私は関係フィールドを取得することができませんでした知っています。

答えて

3

私がしたいですAPIをどのように構築するのかを推薦するために、あなたの質問に答えることができます。

一般的に、RESTful APIは、すべての市場(複数の部分)で、idが5231422(単数部分)の市場を見つけると、複数の特異な原則に従います。あなたのURLに/api/{plural-noun}/{singular-identifier}を反映させてください。そして、あなたの質問に答えるために

/api/products (all products in the system) 
/api/products/:productId (a single product in the system) 
/api/markets (all markets in the system) 
/api/markets/:marketId (a single market in the system) 

:だからあなたのAPIは、より多くの本のように見える終わるだろうを私はあなたが「ロシアの積み重ね人形」URL設計を使用することを推奨します。あなたの設計では、単一の市場に複数の製品が含まれている可能性があるようです。したがって、あなたはこの種のURLを少し明確にすることができます:/api/markets/:marketId/products、その市場内のすべての製品を取得します。

+0

お返事ありがとうございます!あなたと@Greggは正しいです。しかし、私には1つの質問だけがあります。または商品の列market_idにフィルタリングする方法がありますか? –

+0

商品にmarket_idの列がありますか?その場合は、market_idがURLのmarketIdと等しいすべての商品を照会するだけです。製品にmarket_id列がない場合は、製品を市場に関連付ける方法を作成することができます。 – kevin628

+0

私は春を使っているので2つの "選択"をしなければならなかったので、私は 'market market = marketService.findOne(id);'と 'productService.findByMarket(market);'をしなければならなかったこれは他の方法がないと思う –

2

一般に、あなたのURLは意味論的でナビゲート可能であることが必要です。また

/api/market/:marketId/product

を、通常、私は次の操作を行いますので、複数形で行くことをお勧めします::だからあなたは既に持っているものに基づいて

/api/markets/:marketId/products

関連する問題