RESTful服务的java url设计
我有一个名为Pricing
的资源要检索。一个Offer
可以有定价,Promo
可以有Pricing
资源,还有另一个实体Customer
可以映射Pricing
。我想基于OfferId
/PromoId
/CustomerId
之一检索Pricing
要为此设计URL,我将运行两个选项:
选项1:将其作为查询字符串传递
/pricing?OfferId=234&PromoId=345&CustomerId=543234
选项2:有三个API
/pricing/offer?id=234
/pricing/promo?id=345
/pricing/customer?id=543234
IMO,OfferId
/PromoId
/CustomerId
应被视为资源的属性。因此,将属性作为查询字符串传递。我更倾向于选择1
选项2避免了if-else条件来检索资源,看起来更干净,但它似乎支持URL设计的REST标准吗
设计URL的REST标准是什么。你会推荐哪种选择
# 1 楼答案
最干净且遵循标准路径的方式是:
布局为:
/pricing/${offer|promo|customer|/${PathParamForId}
然后,您可以将其作为三种不同的方法来执行,每种方法都适用于offer/promo/customer
然后,您只需确保您的API有良好的文档记录,以便用户了解路径的预期行为。(优惠与促销查找等之间的差异)
# 2 楼答案
这已经由@Freedom提出,但我认为它应该得到自己的答案和推理
您希望检索定价-但这并不意味着您必须以它
pricing
开始URLPromo
、Offer
和Customer
看起来像资源。他们可能有自己的URL,比如offer/123
。即使它们没有URL,它们似乎仍然是Pricing
的逻辑容器/组合元素。因此Pricing
应该是这些资源的一个子资源如果定价也有自己的id,您仍然可以添加其他方式列出所有定价或通过该id获取定价:
# 3 楼答案
我更喜欢选项1
选项2有以下缺陷:
/pricing/offer/234
似乎 表示Offer
资源,而不是Pricing
资源李>Offer
资源包含Pricing
,但是/pricing/offer/234
以相反的方式表示正确。看来 就像Pricing
资源包含Offer
资源一样李>实际上,选项1也有一些问题。比如说,
会得到三个奖品,对吗?看来
更合理
您可以考虑的另一个选项是选项3:
希望对你有帮助