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

URL RESTful: где я должен поместить локаль? example.com/ru/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 по моему вкусу.

Какая лучшая практика? Что вы используете и почему?

4b9b3361

Ответ 1

Локализация является частью Content-Negotiation в Restful API.

Итак, мой предпочтительный способ сделать это через заголовки. HTTP предлагает стандартный способ определения желаемого языка. Посмотрите заголовок Accept-Language.

Ответ 2

Из https://www.w3.org/International/info/qa-accept-lang-locales:

Первоначально заголовок HTTP-Accept-Language предназначался для указания языка пользователя. Однако, поскольку многие приложения должны знать язык пользователя, в обычной практике для определения этой информации использовался Accept-Language. Не рекомендуется использовать заголовок Accept-Language HTTP только для определения локали пользователя. Если вы используете исключительно Accept-Language, вы можете навязать пользователю набор вариантов не по своему вкусу.

Мои предпочтения:

  • Запрос
    • используйте параметр запроса
    • вернуться к заголовку Accept-Language, если параметр запроса не указанный
    • вернуться к документированному стандарту Locale, если заголовок Accept-Language не определен
  • Ответ
    • Установить Content-Language
    • Установите языковой стандарт в полезной нагрузке ответа, например <some-root-tag xml:lang="en-US"> (см. http://www.opentag.com/xfaq_lang.htm)