Подтвердить что ты не робот

Рекомендуемый формат даты для 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?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Проверьте эту статью на 5 законов дат и времени API ЗДЕСЬ:

  • Закон № 1: Используйте ISO-8601 для своих дат.
  • Закон № 2: принять любой часовой пояс
  • Закон № 3: Сохраните его в UTC
  • Закон № 4: вернуть его в UTC
  • Закон № 5: Не используйте время, если вам это не нужно

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

Ответ 3

RFC6690 - Ограниченный формат ссылок RESTful (CoRE) В явном виде не указано, какой формат даты должен быть в раздел 2. Формат ссылок указывает на RFC 3986. Это означает, что рекомендация для типа даты в RFC 3986.

В основном RFC 3339 Дата и время в Интернете - это документ, на котором можно посмотреть:

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

что это сводится к: ГГГГ-ММ-ДДТГ: мм: ss.ss ± hh: мм

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

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

Ответ 4

Каждое поле даты/времени в вводе/выводе должно быть в формате UNIX/epoch. Это позволяет избежать путаницы между разработчиками разных сторон API.

Плюсы:

  • Формат эпохи не имеет часового пояса.
  • Epoch имеет единый формат (время Unix - это одно знаковое число).
  • Время не зависит от перехода на летнее время.
  • Большинство базовых сред и все нативные API ios/android поддерживают преобразование эпох.
  • Часть преобразования локального времени может быть полностью выполнена на стороне приложения, в зависимости от настройки часового пояса пользовательского устройства/браузера.

Минусы:

  • Дополнительная обработка для преобразования в UTC для хранения в формате UTC в базе данных.
  • Удобочитаемость ввода/вывода.
  • Читаемость GET URL.

Примечания:

  • Часовые пояса - это проблема уровня представления! Большая часть вашего кода не должна иметь дело с часовыми поясами или местным временем, а должна проходить вокруг времени Unix.
  • Если вы хотите сохранить удобочитаемое время (например, журналы), рассмотрите возможность сохранения его вместе со временем Unix, а не со временем Unix.

Ответ 5

Всегда используйте UTC:

Например, у меня есть компонент расписания, который принимает один параметр DATETIME. Когда я вызываю это с помощью глагола GET, я использую следующий формат, где мое имя входящего параметра - scheduleDate.

Пример:
https://localhost/api/getScheduleForDate?scheduleDate=2003-11-21T01:11:11Z