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

时间:2011-11-20 21:20:28

标签: rest restful-url

是否有针对不同语言的GETting资源的REST最佳实践。目前,我们有

www.mysite.com/books?locale=en

我知道我们可以使用接受语言标题但是我们做得更好

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

或者没关系?

3 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分:6)

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

  1. HTTP的Accept-Language标题
  2. URI中的语言前缀,例如/ en / books /...
  3. 换句话说,您可以接受来自两个来源的语言。实施将如下:

    1. 检查是否提供了Accept-Language标头并将其保留在变量中;
    2. 如果请求URI以 / en,/ fr 或其他已知语言代码(系统支持)开头,请使用此新值覆盖语言变量,将其从URI中剥离,即如果URI为< strong> / en / books 您最终将获得 / books
    3. 如果没有提供语言,请将默认语言保留在变量中,例如“en”
    4. 使用这种方法,您可以确保a)路径路由与语言无关,并且您的系统将统一使用路径; b)语言处理/协商将与脚本完全分离。您可以在脚本中使用语言信息,甚至不知道源是什么以及请求的来源。

答案 2 :(得分:0)

我同意manuel-aldana对问题answerRESTful URL: where should I put locale? example.com/en/page vs example.com/page?locale=en的评论

首先检查参数(例如locale = en)以允许客户明确指定回退到Accept-Language的语言