允许用户在RESTful Web应用程序中更改应用程序状态(f.ex.语言)

时间:2011-08-15 08:44:06

标签: rest

我目前正在重写一个旧的Web应用程序,我希望它是RESTful的。现在,RESTful应用程序背后的一个重要理念是,每个对终点的请求必须是无状态

使用该应用程序,我的目标是为常规浏览提供API的通用代码库。换句话说,我想避免特殊网址,例如http://api.domain.tldhttp://domain.tld/api。我打算为此解释HTTP Accept标题。

我提出的一个挑战是请求参数,浏览页面的用户通常只选择一次。一个很好的例子是语言。同样,我可以使用Accept-Language标题来选择初始语言。但是,如果用户希望更改此怎么办?如果用户需要在每次请求后切换语言,它将无法使用。

在我看来,这实际上是一个请求参数,应该这样传递。例如:http://domain.tld/resource?lang=en。因此,一旦用户切换语言,我需要将此参数附加到页面上的每个 URL。

在某种程度上,这使得浏览会话成为有状态的。这有什么“最佳实践”吗? 将如何解决这个问题。我有一个想法是在会话中存储这些“全局”参数,但是仍然将它们添加到每个URL。如果只是为了让API易于发现。

旁注:我目前正在使用Flask构建网页,该网页提供了构建网址的方法url_for。我正在考虑覆盖这个,所以每个生成的URL都有参数。但这不是Flask特有的问题。这是大多数RESTful服务应该考虑的事情,所以我不会用python标记它,也不会烧瓶!

1 个答案:

答案 0 :(得分:1)

州转移

REST不要求每个请求都是无状态的。要求是服务器不必代表客户端管理状态。实际上,每个请求必须带有足够的状态以允许服务器处理它。

您提供用户语言的方法非常明智。其他人可能更喜欢从共享数据库中检索它,但这可能存在一些可扩展性问题。