REST GET API的推荐日期格式

时间:2012-03-06 10:21:14

标签: http url rest date get

这样的REST GET API的推荐时间戳格式是什么:

http://api.example.com/start_date/{timestamp}

我认为实际日期格式应为ISO 8601格式,例如UTC时间为YYYY-MM-DDThh:mm:ssZ

我们是否应该使用不带连字符和冒号的ISO 8601版本,例如:

http://api.example.com/start_date/YYYYMMDDThhmmssZ

或者我们应该使用例如base64编码来编码ISO 8601格式吗?

5 个答案:

答案 0 :(得分:65)

查看此文章,了解API日期和时间HERE的5条法则:

  • 法律#1:在您的日期使用ISO-8601
  • 法律#2:接受任何时区
  • 法律#3:以UTC格式存储
  • 法律#4:以UTC格式退回
  • 法律#5:如果你不需要时间,请不要使用时间

文档中的更多信息。

答案 1 :(得分:59)

REST没有推荐的日期格式。真的可归结为最适合您的最终用户和系统的功能。就个人而言,我希望坚持像ISO 8601(url编码)那样的标准。

如果没有丑陋的URI是一个问题(例如,不包括:的网址编码版本,{URI}中的-和(人)可寻址性并不重要,你也可以考虑纪元时间(例如http://example.com/start/1331162374)。 URL看起来更清晰,但你肯定会失去可读性。

/2012/03/07是您经常看到的另一种格式。你可以扩展我的想法。如果你走这条路,只要确保你总是处于GMT时间(并在文档中明确说明),或者你可能还想要包含某种时区指标。

归根结底,它归结为适用于您的API和最终用户的内容。您的API应该适合您,而不适合您; - )。

答案 2 :(得分:10)

RFC6690 - Constrained RESTful Environments (CoRE) Link Format没有明确说明日期格式应该是什么,但是section 2. Link Format它指向RFC 3986.这意味着应该使用RFC 3986中的日期类型建议。

基本上RFC 3339 Date and Time on the Internet是要查看的文件:

  

用于Internet协议的日期和时间格式   用于表示日期和时间的ISO 8601标准的简介   使用公历的次数。

归结为: YYYY-MM-ddTHH:mm:ss.ss±hh:mm

(例如1937-01-01T12:00:27.87 + 00:20)

最安全的赌注。

答案 3 :(得分:4)

输入/输出中的每个日期时间字段都必须采用 UNIX/epoch 格式。这避免了API各个方面的开发人员之间的混乱。

优点:

  • Epoch格式没有时区。
  • Epoch具有单一格式(Unix时间是一个带符号的数字)。
  • 上架时间不受夏令时影响。
  • 大多数后端框架和所有本机ios / android API支持时代转换。
  • 本地时间转换部分可以完全在应用程序侧完成,具体取决于用户设备/浏览器的时区设置。

缺点:

  • 用于转换为UTC并以UTC格式存储在数据库中的额外处理。
  • 输入/输出的可读性。
  • GET URL的可读性。

注释:

  • Timezones are a presentation-layer problem!您的大多数代码都不应处理时区或本地时间,而应该传递Unix时间。
  • 如果要存储人类可读的时间(例如日志),请考虑将其与Unix时间(而不是Unix时间)一起存储。

答案 4 :(得分:0)

始终使用UTC:

例如,我有一个包含一个参数DATETIME的日程表组件。 当我使用GET动词调用它时,我使用以下格式,其中我的传入参数名称为scheduleDate。

示例:
https://localhost/api/getScheduleForDate?scheduleDate= 2003-11-21T01:11:11Z