2012-03-06 7 views
47

Что рекомендуемый формат метки времени для REST GET API, как это:Рекомендуемый формат даты для REST GET API

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

Я думаю, что фактический формат даты должен быть ISO 8601, такие как YYYY-MM-DDThh:mm:ssZ для времени UTC.

Если мы используем версию ISO 8601 без переносов и двоеточия, например:

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

или мы должны кодировать формат ISO 8601, используя для кодирования base64 примера?

+0

Почему не является ISO 8601 формат, как есть, вариант для вас? – Johannes

+0

@Johannes Формат ISO 8601 (в версии без дефиса и двоеточия) будет в порядке, мне просто интересно, существует ли какой-то рекомендуемый подход для представления дат в URL-адресах –

ответ

38

REST не имеет рекомендуемого формата даты. На самом деле это сводится к тому, что лучше всего подходит для вашего конечного пользователя и вашей системы. Лично я хотел бы придерживаться такого стандарта, как у вас для ISO 8601 (кодировка url).

Если не имеющие уродливый URI является проблемой (например, не включая URL-адрес закодированной версии :, -, в вас URI) и (человек) адресация не так важна, вы могли бы также рассмотреть вопрос о время эпохи (например http://example.com/start/1331162374) , URL выглядит немного чище, но вы, безусловно, теряете удобочитаемость.

/2012/03/07 - еще один формат, который вы видите много. Наверное, вы могли бы расширить это. Если вы идете по этому маршруту, просто убедитесь, что вы либо всегда находитесь в GMT (и делаете это ясно в своей документации), либо вы можете также включить какой-то индикатор часового пояса.

В конечном счете это сводится к тому, что работает для вашего API и вашего конечного пользователя. Ваш API должен работать на вас, а не на вас ;-).

+5

Спасибо, очень полезный ответ. Я думаю, что я поеду для сжатой версии ISO 8601 (то есть 'http: // api.example.com/start_date/YYYYMMDDThmmssZ'), которая хороша для удобочитаемости и чистых URL-адресов. –

+4

Но у JSON _does_ есть рекомендуемый формат даты, и это ISO 8601 :) –

+0

@RaduPotop Ссылка? – anttikoo

31

Проверить эту статью для 5 законов даты API и времени HERE:

  • Закон № 1: Использование ISO-8601 для вашей даты
  • Закон № 2: Принять любой часовой пояс
  • Закон # 3: Хранить в UTC
  • Закон № 4: Верните в UTC
  • Закон № 5: не используйте время, если вам не нужно это

Дополнительная информация в документах.

+0

-1, так как '2017-11-20T11% 3A00% 3A00Z' просто не очень читаемо. Также (специфичный для IIS) он кажется очень параноидальным в отношении двоеточий в URL *, даже если * они закодированы. – Iain

+0

Эта ссылка - https://agiletribe.wordpress.com/2015/06/10/jsonrest-api-handling-dates/ рекомендует целочисленную эпоху, чтобы избежать проблем с читабельностью, которые могут возникнуть в формате iso-8601. Дайте мне знать, если у вас разные взгляды. –

7

RFC6690 - Constrained RESTful Environments (CoRE) Link Format Не указывается, какой формат даты должен быть указан в section 2. Link Format, он указывает на RFC 3986. Это означает, что следует использовать рекомендацию для типа даты в RFC 3986.

В основном RFC 3339 Date and Time on the Internet это документ, смотреть на это говорит:

формат даты и времени для использования в интернет-протоколов, что является профиль 8601 стандарт ISO для представления даты и раз, используя григорианский календарь.

, что это сводится к тому: YYYY-MM-ДДTчч: мм: SS.SS ± чч: мм

(например 1937-01-01T12: 00: 27.87 + 00: 20)

Это самая безопасная ставка.

Смежные вопросы