我有一个Pricing
我想要检索的资源.一个Offer
可以具有定价和Promo
可以有Pricing
资源,有另一个实体Customer
与Pricing
可映射.我想Pricing
基于OfferId
/ PromoId
/ 之一检索CustomerId
.
要为此设计URL,我遇到两个选项:
选项1:将其作为查询字符串传递
/pricing?OfferId=234&PromoId=345&CustomerId=543234
Run Code Online (Sandbox Code Playgroud)
选项2:有三个API
/pricing/offer?id=234
/pricing/promo?id=345
/pricing/customer?id=543234
Run Code Online (Sandbox Code Playgroud)
IMO,OfferId
/ PromoId
/ CustomerId
应被视为资源的属性.因此将属性作为查询字符串传递.我更倾向于选项1.
选项2避免if else条件检索资源,看起来更干净,但它似乎支持REST设计的URL标准?
什么是设计URL的REST标准.你会推荐哪个选项?
我更喜欢选项1.
选项2有以下缺陷:
/pricing/offer/234
似乎代表Offer
资源,而不是Pricing
资源.Offer
资源包含一个Pricing
,但
/pricing/offer/234
代表正确的方式.看起来Pricing
资源包含Offer
资源.实际上,选项1也存在一些问题.例如,
/pricing?OfferId=234&PromoId=345&CustomerId=543234
Run Code Online (Sandbox Code Playgroud)
会得到三个Pricings,对吗?它似乎
/pricings?OfferId=234&PromoId=345&CustomerId=543234
Run Code Online (Sandbox Code Playgroud)
更合理.
您可以考虑的另一个选项是选项3:
/offer/234/pricing
/promo/345/pricing
/cusomer/543234/pricing
Run Code Online (Sandbox Code Playgroud)
希望它有所帮助.
最干净且遵循标准路径的方式是:
/pricing/offer/234
/pricing/promo/345
/pricing/customer/543234
Run Code Online (Sandbox Code Playgroud)
布局为:/pricing/${offer|promo|customer|/${PathParamForId}
然后,您可以将其作为三种单独的方法,每种方法用于报价/促销/客户。
然后,您只需确保您的 API 有详细记录,以便用户了解路径的预期行为。(报价与促销查找之间的差异等)
归档时间: |
|
查看次数: |
181 次 |
最近记录: |