表示REST中的断开时间范围

时间:2014-08-19 07:13:59

标签: java web-services rest

我正在尝试设计一个rest api,它接受一个指定日期范围的查询参数。
对于一个简单的时间范围,我会这样做

&st=1407772800000&et=1408432033709

以纪元毫秒表示开始时间和结束时间。

但现在我有一个要求,其中我需要指定一个断裂(分裂)时间范围,

  

例如:在给定的开始和结束时间内的所有星期一和星期二。

将此案例表示为查询参数的最佳方法是什么?

编辑:我只需要指定一周中的几天,时区是UTC。
我基本上试图在范围内指定限制日期

4 个答案:

答案 0 :(得分:1)

您的日期范围现在需要拆分为多个数据范围,因为它们之间存在中断日期。

为简单起见,我将在示例中使用YYYYMMDD格式的日期:

假设以下日期范围:

20140901 to 20140907

20140904

上设置了限制日期

然后您需要发送两个日期范围:

20140901 to 20140903
20140905 to 20140907

您可以使用查询参数数组发送日期范围,其中每个元素包含开始日期,结束日期对:

&date-range=20140901-20140903&date-range=20140905-20140907

检查How to pass an array within a query string?以查找其他查询字符串数组示例。

答案 1 :(得分:1)

我建议您只查询多个开始日期和结束日期,并在必要时将其嵌入查询字符串协议中。

&st1=1407772800000&et1=1408432033709&st2=...&et2=...

优点是,如果你有一个格式错误的stX和etX对,你可以很容易地输出错误,你可以扩展它来处理没有结束时间的开始时间(在半闭的时间间隔内有用),你可以添加尽可能多的你想要的范围(重叠或不重叠)。

其他解决方案是可行的;但是任何类型的减法参数传递(从查询中删除一个时间间隔)都需要一些半丑的区间数学来正确地减去,如果真的做得好,则需要相同数量的额外开始和结束时间。

包含其他不同时间格式的解决方案只会产生额外的处理,以便将不同的时间格式处理为与边界格式一致的格式,并且实际上可能会不必要地限制日期/日期边界的未来查询。

答案 2 :(得分:0)

除了已经发送的信息之外,我建议你只指定限制日期。 例如:

&st=1407772800000&et=1408432033709&bo=1407872800000%1407972800000%1408072800000

注意,%2只是,函数之后的URLEncode个字符。 因此,您将获得以逗号分隔的中断日期列表。 在您的Java代码中,您可以拆分它们,按增加时间排序并制作适当的范围:

  

1407772800000 - 1407872800000

     

1407872800000 - 1407972800000

     

1407972800000 - 1408072800000

     

1408072800000 - 1408432033709

答案 3 :(得分:0)

受Joda周期的启发,我建议使用一种模式来指定查询类型,然后追加详细信息。

这样的东西
  • type=range&st= 1407772800000&et=1408432033709
  • type=period&st= 1407772800000&et=1408432033709&day=monday&day=tuesday
  • type=period&st= 1407772800000&et= 1408432033709&day=monday&day=tuesday&startHourOfDay=8&endHourOfDay=16

此方法允许指定范围(从/到)以及范围内的期间