2015-05-18 6 views
0

Есть ли какой-либо стандарт ИСО, как мы должны вернуть часовой пояс в REST API?Стандарты ответа REST API: Часовой пояс

Если я возвращаю TimeZone типа из 2 действий ASP.NET WebAPI, рамки serialises модели отклика выглядеть следующим образом:

{ 
    "Id": "Dateline Standard Time", 
    "DisplayName": "(UTC-12:00) International Date Line West", 
    "StandardName": "Dateline Standard Time", 
    "DaylightName": "Dateline Daylight Time", 
    "BaseUtcOffset": "-12:00:00", 
    "AdjustmentRules": null, 
    "SupportsDaylightSavingTime": false 
} 
+0

Не знаю, что я знаю. Но часовой пояс на самом деле не является сущностью, он больше похож на объект, определенный смещением по часовой стрелке, имя (которое может быть интернационализировано или нет) и, возможно, другие интересующие атрибуты. Я бы адаптировал то, что возвращает API, исходя из того, какими минимальными требованиями были бы варианты использования. Из моего опыта придерживаться стандартов учета времени, которые выходят за пределы UTC или Unix, только усиливает усилия и делает результат более подверженным проблемам. – Sandman

ответ

2

часовых поясов Microsoft, такие как те, которые используются в TimeZoneInfo объекта, на самом деле может быть сериализации и десериализации, используя FromSerializedString и ToSerializedString методы. На них также можно ссылаться со своим имуществом Id. Оба они относятся к классу TimeZoneInfo, а не к классу TimeZone (который вы не должны использовать вообще).

Однако, если вы отправляете идентификатор часового пояса Microsoft или сериализованную форму часового пояса, ваш API будет доступен только для других приложений .NET. У вас будет очень трудное время, используя часовые пояса Microsoft за пределами .NET.

Для часовых поясов нет официального стандарта, но наиболее близкими будут идентификаторы, предоставленные IANA time zone database. Например, чтобы передать восточный часовой пояс США, вы должны передать "America/New_York" в свой API. Вы можете узнать больше об этом в the timezone tag wiki, а также on Wikipedia. Самое приятное в часовых поясах IANA заключается в том, что оно реализовано на каждой платформе - поэтому, хотя это не стандарт, оно гораздо более переносимо, чем временные зоны Microsoft, которые работают только в Windows.

Для .NET лучшим способом, который я знаю для работы с часовыми поясами IANA, является библиотека Noda Time. Например:

DateTimeZone tz = DateTimeZoneProviders.Tzdb["Asia/Tokyo"]; 

Вы можете прочитать в Нода времени user guide.

Если вы уже создали свою систему около TimeZoneInfo, учтите, что вы все равно можете перевести на часовые пояса IANA на вашем уровне API. Вы можете прочитать о том, как это сделать in this answer.

+1

Отличный ответ. Благодарю. – davenewza

0

Наиболее распространенный стандарт ISO я видел используемый для REST API, , особенно разработанные с учетом взаимодействия, - это стандарт ISO 8601.

http://en.wikipedia.org/wiki/ISO_8601

+1

Но нет спецификации для часовых поясов, которые я вижу? – davenewza

+0

В качестве общей практики API должен использовать даты/время UTC и позволять конвертировать код клиента в часовые пояса. –

+0

Абсолютно. Но в этой ситуации намерение заключается в том, чтобы потребитель мог понять, в какой временной зоне находится ресурс, специфичный для конкретной страны. Например, у нас есть конечная точка для получения дополнительной информации об организациях (ресурсе). Важным аспектом, который необходимо вернуть, является часовой пояс, в котором работает организация. Это не связано с датами и временем. Это чисто информативные данные. – davenewza