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

Posted

技术标签:

【中文标题】多语言 REST 资源 - URL 命名建议【英文标题】:Multi-lingual REST resources - URL naming suggestions 【发布时间】:2011-11-20 21:20:27 【问题描述】:

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

www.mysite.com/books?locale=en

我知道我们可以使用接受语言标头,但这样做对我们来说更好吗

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

还是没关系?

【问题讨论】:

***.com/questions/7892502/…的可能重复 【参考方案1】:

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

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

【讨论】:

确实——它是真正的 RESTful 方式!你是绝对正确的!但是在浏览器中测试rest接口或在路径中使用语言参数时使用curl更容易:)所以我的建议是在服务器上检测语言,同时检查标头和url参数。【参考方案2】:

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

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

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

    检查是否提供了 Accept-Language 标头并将其保存在变量中; 如果请求 URI 以 /en、/fr 或其他已知语言代码(您的系统支持)开始strong>/en/books 你最终会得到 /books。 如果没有提供语言,请在变量中保留默认语言,例如“en”

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

这不应该只是一个评论而不是一个遮阳篷。

以上是关于多语言 REST 资源 - URL 命名建议的主要内容,如果未能解决你的问题,请参考以下文章

从 .cs 部分代码访问多语言资源

.Net 多语言 与资源文件

VC2008以资源形式实现多语言版本

MFC/C#.NET混合模式本地化(多语言/多语言应用)

如何使用 MVC 路由多语言 URL

.htaccess 多语言(slug URL/友好 URL)[关闭]