多语言REST资源 - URL命名建议

Ily*_*tel 7 rest restful-url

是否有REST最佳实践来获取不同语言的资源.目前,我们有

www.mysite.com/books?locale=en
Run Code Online (Sandbox Code Playgroud)

我知道我们可以使用accept-language标题,但对我们来说更好

www.mysite.com/books/en or www.mysite.com/books.en
Run Code Online (Sandbox Code Playgroud)

或者没关系?

Bri*_*lly 20

如果您尝试让服务器返回相同书籍的不同翻译或本地化版本(换句话说,从RESTful角度来看相同的资源),则使用Accept-Language,因为资源相同但表示形式不同根据客户的需求.

但是,如果您尝试根据客户的区域设置返回完全不同的书籍(例如,如果您知道用户在法国,则返回用法语书写的书籍),那么URI应该是不同的,因为将返回不同的资源.此时,您更多地讨论查询请求.对于它的价值,这种/books/en方法听起来很合理.另一种方法是将语言环境或语言作为资源参数添加到GET中/books?lang=en.


ios*_*seb 7

我认为最好的方法是实现以下方式:

  1. HTTP的Accept-Language标头
  2. URI中的语言前缀,例如/ en/books/...

换句话说,您可以接受来自两个来源的语言.实施将如下:

  1. 检查是否提供了Accept-Language标头并将其保留在变量中;
  2. 如果请求URI以/ en,/ fr或其他已知语言代码(系统支持)开头,请使用此新值覆盖语言变量,将其从URI中删除,即如果URI是/ en/books,您将最终使用/ books.
  3. 如果没有提供语言,请将默认语言保留在变量中,例如"en"

使用这种方法,您可以确保a)路径路由与语言无关,并且您的系统将统一使用路径; b)语言处理/协商将与脚本完全分离.您可以在脚本中使用语言信息,甚至不知道源的来源和请求方式.