Запрос 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 заголовок:

5.3.5. Accept-Language

Accept-Language Поле заголовка может использоваться пользовательскими агентами для указания набора естественных языков, которые являются предпочтительными в ответе. Языковые теги определены в разделе 3.1.3.1. [...]

Соответствующие части раздела 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 году.

Другие вопросы по тегам