Http REST GET API的推荐日期格式

Http REST GET API的推荐日期格式,http,url,rest,date,get,Http,Url,Rest,Date,Get,REST GET API的推荐时间戳格式如下: http://api.example.com/start_date/{timestamp} 我认为实际的日期格式应该是ISO8601格式,比如UTC时间的YYYY-MM-DDThh:MM:ssZ 我们是否应该使用不带连字符和冒号的ISO 8601版本,例如: http://api.example.com/start_date/YYYYMMDDThhmmssZ 或者我们应该使用base64编码对ISO 8601格式进行编码?REST没有推荐的日期

REST GET API的推荐时间戳格式如下:

http://api.example.com/start_date/{timestamp}
我认为实际的日期格式应该是ISO8601格式,比如UTC时间的
YYYY-MM-DDThh:MM:ssZ

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

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

或者我们应该使用base64编码对ISO 8601格式进行编码?

REST没有推荐的日期格式。实际上,它归结为什么最适合您的最终用户和您的系统。就我个人而言,我希望遵守ISO 8601(url编码)的标准

如果没有丑陋的URI是一个问题(例如,不包括URL编码版本的<代码>:,<代码> ->代码>,<代码> <代码>在URI中)和(人)可寻址性不是很重要,你也可以考虑划时代(例如<代码> >http://example.com/start/1331162374)。URL看起来有点干净,但肯定会失去可读性

/2012/03/07
是您经常看到的另一种格式。我想你可以再详细说明一下。如果你走这条路线,只要确保你总是在格林尼治时间(并在你的文档中明确),或者你可能还想包括一些时区指示器


最终,它归结为什么对您的API和最终用户有效。您的API应该适合您,而不是您自己;-)

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

  • 法则1:约会时使用ISO-8601
  • 法则2:接受任何时区
  • 定律3:将其存储在UTC中
  • 定律4:在UTC中返回
  • 法则五:如果你不需要时间,就不要浪费时间
文档中的更多信息。

未明确说明日期格式,但其中指向RFC 3986。这意味着应该使用日期类型的建议

基本上是要看的文件,上面说:

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

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

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


是最安全的赌注。

输入/输出中的每个日期时间字段都需要采用格式。这避免了API不同方面的开发人员之间的混淆

优点:

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

  • 转换为UTC以UTC格式存储在数据库中的额外处理
  • 输入/输出的可读性
  • 获取URL的可读性
注意事项:

  • 您的大多数代码不应该处理时区或本地时间,而应该传递Unix时间
  • 如果要存储一个人类可读的时间(例如日志),请考虑将它与UNIX时间一起存储,而不是UNIX时间。
始终使用UTC:

例如,我有一个schedule组件,它接受一个参数DATETIME。 当我使用GET动词调用它时,我使用以下格式,其中传入的参数名是scheduleDate

示例:

2003-11-21T01:11:11Z

为什么ISO 8601格式不是您的选择?@Johannes ISO 8601格式(在没有连字符和冒号的版本中)可以,我只是想知道是否有一种推荐的方法来表示URLStanks中的日期,这是一个非常有用的答案。我想我会选择ISO 8601的压缩版本(即
http://api.example.com/start_date/YYYYMMDDThhmmssZ
)这有利于可读性和干净的URL。但JSON确实有一个推荐的日期格式,它是ISO 8601:)@radupotp是的,但这是我们谈论的HTTP和URI标准。我不确定JSON与此有什么关系。我只想指出,连字符不需要URL编码。此链接-agiletribe.wordpress.com/2015/06/10/jsonrest-api-handling-dates建议使用integer epoch,以避免iso-8601格式可能遇到的人类可读性问题。如果您有不同的观点,请告诉我-1,因为
2017-11-20T11%3A00%3A00Z
的可读性不强。此外(特定于IIS)似乎对URL中的冒号非常偏执,即使它们是编码的。此链接-建议使用integer epoch,以避免iso-8601格式可能遇到的人类可读性问题。如果您有不同的观点,请告诉我。请注意,连字符和点不是URL中的保留字符。只有冒号需要URL编码()。在ISO-8601()中,连字符是必需的,但冒号是可选的。因此,如果您需要更高的精度,URL中使用的正确ISO-8601变体是YYYY-MM-DDThhmmssZ和YYYY-MM-DDThhmmss.mmmZ。这是一篇经常链接和激烈争论的文章。虽然我同意选择可排序格式(如果它必须是字符串的话),但unix时间戳(这篇文章甚至没有承认)具有所述的所有优点和更多优点。在演示之前,时区和夏时制(和政治决策)的问题甚至不存在。不能同意。我只想从一开始就考虑是否需要在系统中的任何地方考虑毫秒。如果是,请使用毫秒版本的Unix时间戳。