Запрос REST API с языком и регионом
Я разрабатываю REST API, и мне нужно реализовать метод, которому нужен язык и страна для получения результата в правильном формате, поскольку результат содержит числа и даты.
Я использовал HTTP Accept-Language
заголовок, чтобы получить язык. Спецификации определяют заголовок как спецификатор языка, но теперь я не уверен, правильно ли использовать этот заголовок для получения страны. Например, я хочу разрешить результат на испанском языке, но с цифрами в английском формате (с запятыми вместо точек).
Является es-US
принятое значение для Accept-Language
заголовок?
Я думал, что смогу разработать новый пользовательский заголовок, такой как X-Country
для моего REST API.
Какие-нибудь мысли? Благодарю.
3 ответа
Есть хорошие документы о том, как локализовать ваши API. Об этом даже есть ответ переполнения стека.
Главным образом это вращается вокруг согласования контента и заголовка "Accept-Language". Если вам нужно, чтобы валюта управлялась отдельно, общий консенсус, похоже, сохраняется в полезной нагрузке, а не в заголовках, но если вы собираетесь делать заголовки, я бы сделал Accept-Currency
(ведет себя подобно другим заголовкам HTTP Accept, но с кодами валют ISO 4217) по запросу, и Content-Currency
на ответ.
Я думал, что смогу разработать новый пользовательский заголовок, такой как
X-Country
для моего REST API.
Я бы избегал пользовательских заголовков, если один из стандартных заголовков HTTP соответствует вашим потребностям.
Является
es-US
приемлемое значение дляAccept-Language
заголовок?
Да, es-US
(Испанский / США) является допустимым языковым стандартом (см. Примечания ниже), и это подходящее значение для Accept-Language
заголовок:
Accept-Language
Поле заголовка может использоваться пользовательскими агентами для указания набора естественных языков, которые являются предпочтительными в ответе. Языковые теги определены в разделе 3.1.3.1. [...]
Соответствующие части раздела 3.1.3.1 приведены ниже:
Языковой тег, как определено в RFC 5646, идентифицирует естественный язык, на котором говорят, пишут или иным образом передают люди для передачи информации другим людям. Компьютерные языки явно исключены. [...]
Языковой тег - это последовательность из одного или нескольких регистров без учета регистра, каждый из которых разделен дефисом (
-
,%x2D
). В большинстве случаев языковой тег состоит из основного языкового подтэга, который идентифицирует широкое семейство родственных языков (например,en
= Английский), за которым необязательно следует последовательность вложенных тегов, которые уточняют или сужают диапазон этого языка (например,en-CA
= разнообразие английского языка, как сообщается в Канаде). Пробелы запрещены внутри языкового тега. Примеры тегов включают в себя:fr, en-US, es-419, az-Arab, x-pig-latin, man-Nkoo-GN
См. RFC 5646 для получения дополнительной информации.
Примечание 1. Можно найти комбинации кодов языка и территории, которые можно считать действительными (в том смысле, что данное население данной территории может читать и писать на данном языке и достаточно удобно для использования с компьютерами). здесь
Примечание 2: Не уверен, какой язык программирования вы используете, но вот список локалей, доступных в Java.
Какие-нибудь мысли? Благодарю.
Я бы рекомендовал начать с наличия ресурса для каждого (языка, страны), который вы поддерживаете, а затем подумать о том, хотите ли вы иметь один ресурс, который выполняет согласование контента.
Простым шаблоном для ресурса, использующего согласование содержимого, будет использование заголовка Content-Location для указания на конкретный ресурс для согласованной пары язык / страна.
См. Также ответ Тома Кристи за 2012 год, особенно ссылку на комментарий Филдинга в 2006 году.