我对域和Rest API设计的最佳实践有一些一般性问题。假设我们有一个域对象-客户,针对以下属性进行描述:id,名称,姓氏,产品。
当前,我们不在乎日期,而是通过以下URL提供当前状态的信息:/api/v1/customers/{id}
现在,在任何请求的日期都需要提供有关客户的信息,所以我想知道,创建URL的最佳方法是什么:1.应该是@PathVariable
:/api/v1/customers/{id}/{date}
2.或通过@RequestParam
:/api/v1/customers/{id}?date=XXX
另一个问题是,我是否还应该更改域对象并添加一些其他字段,例如start_dt / end_dt /它们两者或它们中的任何一个(我只能更改我的数据库表,并查询历史表,所以这将是必需的仅更改数据库层,但不更改我的主要服务)。
什么是最佳解决方案?在此先感谢
您应该使用选项II,即查询参数(或@RequestParam
)。这是更好的选择,因为它以当前查询客户的方式保持向后兼容性。您指定了...
当前,我们不在乎日期
使用查询参数可使相同的端点与旧式请求兼容,同时扩展其功能以允许特定日期的查询。
关于开始日期和结束日期,答案取决于您要提供的内容。在大多数情况中,日期范围比单个日期有用,因此首选开始/结束系统。我会假设情况就是这样。
最优雅的方法是利用defaultValue
的defaultValue
属性。您可以将默认@RequestParam
设置为时间的开始(通常为start_dt
),将默认January 1, 1970设置为时间的结束(end_dt
或1月31日,9999或正无穷大)。这样,如果用户未指定任何一个查询参数,API的功能将与之前完全相同(它将始终返回结果)。但是用户可以根据需要限制其时间范围。