RestAPI和域设计-最佳实践

时间:2020-05-18 17:49:10

标签: java spring-boot rest spring-mvc restful-url

我对域和Rest API设计的最佳实践有一些一般性问题。 假设我们有一些域对象-客户,针对此类属性进行了描述:ID,名称,姓氏,产品。

当前,我们不在乎日期,而是通过以下网址提供有关当前状态的信息:/api/v1/customers/{id}

现在,在任何请求的日期都需要提供有关客户的信息,所以我想知道创建URL的最佳方法是什么: 1.应该由@PathVariable通过:/api/v1/customers/{id}/{date} 2.或通过@RequestParam/api/v1/customers/{id}?date=XXX

另一个问题是,我是否还应该更改域对象并添加一些其他字段,例如start_dt / end_dt /它们两者或它们中的任何一个(我可以只更改我的数据库表,并查询历史表,所以它将只需更改数据库层,而无需更改我的主要服务)。

什么是最好的解决方案? 预先感谢

1 个答案:

答案 0 :(得分:0)

您应该使用选项II,即查询参数(或@RequestParam)。这是更好的选择,因为它与当前查询客户的方式保持向后兼容性。您指定了...

当前,我们不在乎日期

使用查询参数可以使同一端点与旧式请求兼容,同时扩展其功能以允许针对特定日期的查询。

关于开始日期和结束日期,答案取决于您要提供的内容。在大多数情况下,日期范围比单个日期更有用,因此首选开始/结束系统。我会假设适合您。

执行所有这些操作的最优雅的方法是利用@RequestParam的{​​{3}}属性。您可以将默认start_dt设置为时间的开始时间(通常为defaultValue),并将默认end_dt设置为时间的结束时间(January 1, 1970或9999年1月31日或正无限)。这样,如果用户未指定任何一个查询参数,API的功能将与以前完全相同(它将始终返回结果)。但是用户可以根据自己的需要限制时间范围。