Многоязычные ресурсы REST - предложения по именованию URL - PullRequest
6 голосов
/ 21 ноября 2011

Существует ли наилучшая практика REST для получения ресурсов на разных языках.В настоящее время у нас есть

www.mysite.com/books?locale=en

Я знаю, что мы можем использовать заголовок accept-language, но лучше ли нам сделать

www.mysite.com/books/en or www.mysite.com/books.en

или это не имеет значения?

Ответы [ 3 ]

20 голосов
/ 21 ноября 2011

Если вы пытаетесь заставить ваш сервер возвращать разные переводы или локализованные версии одних и тех же книг (другими словами, один и тот же ресурс с точки зрения RESTful), тогда используйте Accept-Language , поскольку ресурсто же самое, но представление отличается в зависимости от потребностей клиента.

Однако, если вы пытаетесь вернуть совершенно разные книги в зависимости от локали клиента (скажем, возвращая книги, написанные на французском языке)если вы знаете, что пользователь находится во Франции), то URI должны быть другими, поскольку будут возвращены разные ресурсы.На данный момент вы говорите больше о запросе запроса, чем о чем-либо еще.Для чего это стоит, подход /books/en звучит разумно.Другой подход заключается в добавлении языкового стандарта или языка в качестве параметра ресурса в GET как /books?lang=en.

6 голосов
/ 21 ноября 2011

Я думаю, что лучшим способом было бы реализовать это следующим образом:

  1. HTTP-заголовок Accept-Language
  2. Префикс языка в URI, например /en/books/...

Другими словами, вы можете принять язык из обоих источников. Реализация будет следующая:

  1. Проверьте, указан ли заголовок Accept-Language, и сохраните его в переменной;
  2. Если URI запроса начинается с / en, / fr или других известных кодов языка (поддерживаемых вашей системой) Перезаписать языковую переменную этим новым значением, убрать ее из URI, т.е. если URI равен / ru / books в итоге вы получите / books .
  3. Если язык не указан, оставьте язык по умолчанию в переменной, например "en"

При таком подходе вы можете быть уверены, что: а) маршрутизация пути не зависит от языка и ваша система будет работать равномерно с путями; б) обработка языка / согласование будут полностью отделены от ваших сценариев. Вы можете использовать информацию о языке в своих сценариях, даже не зная, каков был источник и как он был запрошен.

0 голосов
/ 16 июня 2012

Я согласен с комментарием manuel-aldana в ответе на вопрос RESTful URL: где я должен указать локаль?example.com/en/page vs example.com/page?locale=en

Сначала проверьте параметр (например, locale = en), чтобы позволить клиенту явно указать язык с отступлением до * 1009Язык

...