Java 具有可选参数和不同业务逻辑的Webservice

Java 具有可选参数和不同业务逻辑的Webservice,java,web-services,optional-parameters,business-logic,Java,Web Services,Optional Parameters,Business Logic,问题: 设计具有可选参数和特定参数的不同业务逻辑的Web服务的最佳方法是什么 具体示例: web服务旨在使搜索房屋成为可能 房屋资源具有如下结构: { "houseId": 3123, "street": "Drake Street", "houseNo": "789", "city": "London", "zipCode: "EC2R 6AB", "country": "uk", "coordinates": "51.506885,

问题: 设计具有可选参数和特定参数的不同业务逻辑的Web服务的最佳方法是什么


具体示例:

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?城市=伦敦和街道=德雷克街和库存=阳台和库存=阳台

现在还可以按如下方式发送请求:

/rest/v1/houses?城市=伦敦&街道=德雷克街&坐标=51.506885,-0.128107

在这种情况下,我必须决定哪些地理信息具有优先权。坐标或街道+城市+ZipCode

为了使事情更加复杂,还应该可以将搜索结果的半径和数量传递给Web服务。出于性能原因,如果缺少国家/地区,则不可能获得无限数量的搜索结果

此外,对于无限半径,不可能获得无限数量的搜索结果。因此,必须将这两个值中的一个设置为有限数才能触发搜索

等等。。。进一步的逻辑


结论:

通过id或类似的方式识别特定的房屋(资源)并不重要。根据标准筛选现有房屋很重要

但是,在筛选时,必须确保某些参数具有不同的业务逻辑


如何在后端优雅地映射这样一个问题?是否有任何模式支持这种方法?

过滤可能是一件很难做到正确的事情,因此这里没有正确或错误的答案。下面是我将如何处理这个问题

首先,假设您有一个用于的RESTful URL

/rest/v1/search-houses/
它可以接受多个参数,一个或多个

基于此,您可以查看需要过滤的参数。这就是您的业务逻辑所在,这在很大程度上取决于代码库、数据库等的结构

在设计模式方面,我认为MVC解决了很多问题。在本例中,如果您总是使用基本查找从单个表中筛选数据,即
where town=London或country=UK
,那么这很简单。只需使用已输入的参数构建一个
字符串
,该字符串将位于
where
子句部分。确保使用
准备好的语句安全地执行此操作

如果您根据输入的信息在多个表或不同的位置查找,这将变得更加棘手。因此,在本例中,我可能希望创建多个模型文件,这些文件遵循上述相同的方法,但针对特定的数据库查询进行定制


希望这能帮助你朝着正确的方向前进。不幸的是,这个问题没有单一的答案。就像很多事情一样,这取决于

你可能收到的任何答案都主要是基于观点的,因此这个问题是一个很好的被关闭的候选者。接下来,这里有很多类似的问题,因此提供了不同方法的赞成和反对意见。最后但并非最不重要的一点是,您的服务(非常确定)无论如何都没有遵循REST原则,因此应该避免使用该术语。嗨,Michael,谢谢您的回答。我已经开发了一个Web服务,它接受各种参数,根据参数执行业务逻辑,然后构造SQL语句(如您所述)。不幸的是,添加了越来越多的参数和业务逻辑。因此,维护webservice方法和筛选变得越来越复杂。最大的问题是根据业务逻辑验证传入的参数以及用于db查询的结果搜索参数。是的,这些类型很多事情很快就会变得非常混乱。我还没有找到一个完美的解决方案。我所做的最好的事情是将所有DB查询放在各个模型文件中,尽可能地将事情分开,尽管这取决于各个需求,但在某些情况下可能会更糟。一个
非RESTful URL
看起来如何?