RESTful URL: где я должен поставить локаль? example.com/en/page vs example.com/page?locale=en

Я решаю, как организовать URL и добавить в него локаль. У меня есть два варианта:

  1. example.com/en/page
  2. example.com/page?locale=en - путь Google
  3. 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)
Другие вопросы по тегам