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

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

  1. example.com / ы / страница
  2. example.com / page? Locale = ru - путь 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 ]

36 голосов
/ 25 октября 2011

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

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

17 голосов
/ 15 января 2016

С 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)
...