【发布时间】:2018-05-03 20:43:13
【问题描述】:
问题: 设计具有可选参数和某些参数的不同业务逻辑的 Web 服务的最佳方法是什么?
具体例子:
该网络服务旨在使搜索房屋成为可能。
房屋资源的结构如下:
{
"houseId": 3123,
"street": "Drake Street",
"houseNo": "789",
"city": "London",
"zipCode: "EC2R 6AB",
"country": "uk",
"coordinates": "51.506885, -0.128107",
"inventory": ["Veranda", "Baloncy", "Stove"]
}
Web 服务应对给定地址或坐标执行邻近搜索,并返回满足给定条件的房屋。
有效示例:
/rest/v1/houses?city=London&street=Drake Street&inventory=Balcony&inventory=Veranda
现在还可以按如下方式发送请求:
/rest/v1/houses?city=London&street=Drake Street&coordinates=51.506885, -0.128107
在这种情况下,我必须决定哪些地理信息具有优先权。坐标或街道+城市+邮政编码。
为了让事情变得更复杂,还应该可以将半径和搜索结果的数量传递给 web 服务。出于性能原因,如果国家/地区缺失,则不可能获得无限数量的搜索结果。
此外,不可能在无限半径范围内获得无限数量的搜索结果。因此,必须将两个值之一设置为有限数才能触发搜索。
等等……进一步的逻辑……
结论:
通过 id 或类似的东西来识别特定的房子(资源)并不重要。按标准过滤现有房屋很重要。
但是,在过滤时,必须确保某些参数有不同的业务逻辑。
如何在后端优雅地映射这样的问题?是否有任何模式支持这种方法?
【问题讨论】:
-
您可能收到的任何答案都主要基于意见,因此这个问题很适合被关闭。接下来,SO 这里有很多类似的问题,它们提供了不同方法的优缺点。最后但并非最不重要的一点是,您的服务(非常确定)无论如何都没有遵循 REST 原则,因此应该避免使用术语 REST。
标签: java web-services optional-parameters business-logic