RESTful URL: где я должен поставить локаль? example.com/en/page vs example.com/page?locale=en
Я решаю, как организовать URL и добавить в него локаль. У меня есть два варианта:
- example.com/en/page
- example.com/page?locale=en - путь Google
ru.example.com/page- не очень хорошо, потому что я использую субдомены
С одной стороны example.com/en/page
выглядит лучше и компактнее, чем example.com/page?locale=en
, С другой стороны у нас есть два URL example.com/en/page
а также example.com/ru/page
для одного ресурса с двумя представлениями. Конечно на всякий случай example.com/page?locale=en
у нас тоже есть два URL для одного ресурса, но он немного более RESTful на мой вкус.
Какая лучшая практика? Что вы используете и почему?
2 ответа
Локализация является частью Content-Negotiation в Restful API.
Поэтому я предпочел бы делать это через заголовки. HTTP предлагает стандартный способ определения требуемого языка. Посмотрите на заголовок Accept-Language.
С https://www.w3.org/International/questions/qa-accept-lang-locales:
Заголовок HTTP Accept-Language изначально был предназначен только для указания языка пользователя. Однако, поскольку многим приложениям необходимо знать языковой стандарт пользователя, общепринятая практика использует Accept-Language для определения этой информации. Не рекомендуется использовать заголовок HTTP Accept-Language для определения языкового стандарта пользователя. Если вы используете исключительно Accept-Language, вы можете наложить на пользователя наручники на выбор, который ему не нравится.
Мои предпочтения:
- Запрос
- использовать параметр запроса
- отступить к
Accept-Language
заголовок, если параметр запроса не указан - отступить к задокументированной локали по умолчанию, если
Accept-Language
заголовок не определен
- отклик
- Задавать
Content-Language
- Установите локаль в ответной нагрузке, например
<some-root-tag xml:lang="en-US">
(см. http://www.opentag.com/xfaq_lang.htm)
- Задавать