具有可选参数和不同业务逻辑的Web服务



问题:设计具有可选参数和不同业务逻辑的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?city=London&street=Drake Street&inventory=Balcony&inventory=Veranda

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

/rest/v1/houses?city=London&street=Drake Street&coordinates=51.506885, -0.128107

在这种情况下,我必须确定哪些地理信息优先。坐标或街道 城市 Zipcode。

为了使事情变得更加复杂,也应该可以将半径和搜索结果的数量传递给WebService。出于绩效原因,如果缺少该国,则不应获得无限数量的搜索结果。

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

等等...进一步的逻辑...


结论:

通过ID或类似的东西识别特定房屋(资源)并不重要。按照标准过滤现有房屋很重要。

过滤时,必须确保某些参数有不同的业务逻辑。

如何在后端优雅地绘制这样的问题?是否有任何支持这种方法的模式?

过滤可能是一件很难的事情,因此这里没有正确或错误的答案。不过,这就是我的处理方式。

首先,假设您有一个宁静的URL;

/rest/v1/search-houses/

可以使用多个参数,一个或多个。

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

在设计模式方面,我认为MVC解决了很多问题。在这种情况下,如果您总是从一个具有基本查找的单个表中过滤数据,即where town = London or country = UK,那么这很容易。只需使用已输入的参数来构建将存在where子句部分的String即可。确保使用prepared statements安全地执行此操作。

如果您在多个表格或不同的位置上抬头,具体取决于输入了哪些信息,这会变得更加棘手。因此,在这种情况下,我可能希望创建多个遵循与上面概述相同方法的模型文件,但针对特定的数据库查询量身定制。

希望可以帮助您朝着正确的方向发展。不幸的是,这个问题没有一个答案。与许多事情一样,这取决于...

相关内容

  • 没有找到相关文章

最新更新