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

允许用户在RESTful web应用程序中更改应用程序状态(f.ex.语言),rest,Rest,我目前正在重新编写一个旧的web应用程序,我希望它是RESTful的。现在,RESTful应用程序背后的一个重要理念是,到端点的每个请求都必须是无状态的 对于这个应用程序,我的目标是为API提供一个通用的代码库,就像正常浏览一样。换句话说,我想避免像http://api.domain.tld或http://domain.tld/api。我打算为此解释HTTPAccept头 我遇到的一个挑战是请求参数,浏览页面的用户通常只选择一次。语言就是一个很好的例子。同样,我可以使用Accept Langua

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

对于这个应用程序,我的目标是为API提供一个通用的代码库,就像正常浏览一样。换句话说,我想避免像
http://api.domain.tld
http://domain.tld/api
。我打算为此解释HTTP
Accept

我遇到的一个挑战是请求参数,浏览页面的用户通常只选择一次。语言就是一个很好的例子。同样,我可以使用
Accept Language
标题选择初始语言。但是,如果用户希望改变这一点怎么办?如果用户在每次请求后都需要切换语言,则无法使用

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

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

旁注:我目前正在使用它构建网页,它提供了一种方法
url\u来构建url。我正在考虑覆盖它,因此每个生成的URL都会有参数。但这不是烧瓶特有的问题。这是大多数REST服务应该考虑的,所以我不会用Python,也不是烧瓶来标记它! 状态转移
REST并不要求每个请求都是无状态的。要求是服务器不必代表客户机管理状态。实际上,每个请求都必须具有足够的状态,以允许服务器对其进行处理

您提供用户语言的方法是非常明智的。其他人可能更喜欢从共享数据库检索,但这可能会有一些可伸缩性问题。

状态转移 REST并不要求每个请求都是无状态的。要求是服务器不必代表客户机管理状态。实际上,每个请求都必须具有足够的状态,以允许服务器对其进行处理


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

在仔细考虑您的响应后,我倾向于说请求确实应该是无状态的。说“每个请求必须具有足够的状态以允许服务器处理它”,对我来说意味着非常无状态。然而,我确实认为,人们愿意走多远,这是有争议的。在我的例子中,我想提供一个公共API。我想让请求资源变得容易,请求越少越好。因此,让请求尽可能无状态是有益的。在仔细考虑您的响应之后,我倾向于说请求确实应该是无状态的。说“每个请求必须具有足够的状态以允许服务器处理它”,对我来说意味着非常无状态。然而,我确实认为,人们愿意走多远,这是有争议的。在我的例子中,我想提供一个公共API。我想让请求资源变得容易,请求越少越好。因此,使请求尽可能无状态是有益的。