Java 具有可选参数和不同业务逻辑的Webservice
问题: 设计具有可选参数和特定参数的不同业务逻辑的Web服务的最佳方法是什么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服务旨在使搜索房屋成为可能 房屋资源具有如下结构:
{
"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
看起来如何?