是否允许REST资源随时间变化?

是否允许REST资源随时间变化?,rest,Rest,我想在这个例子中为一个视频游戏实现一个RESTAPI,并希望使它尽可能无状态,身份验证是唯一的状态 我仍然对无状态的真正含义感到困惑:例如,连续两次调用 api.myhost.com/users/{playerid} 可以及时提供两种不同的答案,例如: {name: "toto", life: 98, score: 52} 及 问题: 在访问同一资源时提供不同的答案是否被视为打破RESTAPI的无状态状态? 在这种情况下,是否将时间对资源的影响视为一种公认的做法? 如果不是,因为我想要表示

我想在这个例子中为一个视频游戏实现一个RESTAPI,并希望使它尽可能无状态,身份验证是唯一的状态

我仍然对无状态的真正含义感到困惑:例如,连续两次调用

api.myhost.com/users/{playerid} 
可以及时提供两种不同的答案,例如:

{name: "toto", life: 98, score: 52}

问题:

在访问同一资源时提供不同的答案是否被视为打破RESTAPI的无状态状态? 在这种情况下,是否将时间对资源的影响视为一种公认的做法? 如果不是,因为我想要表示的现实有一个状态随时间而变化,我应该如何将其转换为无状态模型?
您所描述的—一个API随时间返回不同的值—非常好。这不是无国籍所指的

无状态意味着每个REST调用都应该是自包含的:服务器不存储任何或更多关于客户端的信息。客户端的状态(例如,他们在搜索结果的哪个页面上,或者他们是否登录)没有存储在服务器上;客户机每次发出新请求时都必须重新发送


您所描述的—一个API随时间返回不同的值—非常好。这不是无国籍所指的

无状态意味着每个REST调用都应该是自包含的:服务器不存储任何或更多关于客户端的信息。客户端的状态(例如,他们在搜索结果的哪个页面上,或者他们是否登录)没有存储在服务器上;客户机每次发出新请求时都必须重新发送

REST是无状态的 REST代表代表代表性的状态转移,该架构由Roy Thomas Fielding在年定义

Fielding为REST体系结构定义了一组约束。其中一个限制是客户机和服务器之间的通信,定义为以下要点在他的论文中没有出现:

[…]从客户端到服务器的每个请求必须包含理解请求所需的所有信息,并且不能利用服务器上存储的任何上下文。因此,会话状态完全保留在客户机上。[……]

因此,如果将会话状态保留在服务器上,则会中断会话。因此,这不是休息。在REST中,服务器上不会有会话,因此也不会有会话标识符

每个请求必须包含要处理的所有数据 从客户机到服务器的每个请求都必须包含服务器能够理解的所有必要信息。使用它,您不需要依赖服务器上存储的任何会话上下文

例如,当访问需要身份验证的受保护资源时,每个请求都必须包含所有需要正确身份验证/授权的数据。这意味着将对每个请求执行身份验证

资源可以是静态的,也可以随时间变化 根据Fielding,资源可以是静态的,也可以随时间而变化。看看他的论文:

REST中信息的关键抽象是资源。任何可以命名的信息都可以是资源:文档或图像、临时服务(例如,洛杉矶的今天的天气)、其他资源的集合、非虚拟对象(例如,人)等等。换句话说,任何可能成为作者超文本引用目标的概念都必须符合资源的定义。资源是到一组实体的概念映射,而不是在任何特定时间点对应于映射的实体

更准确地说,资源R是一个随时间变化的隶属函数MRt,对于时间t,它映射到一组等价的实体或值。集合中的值可以是资源表示和/或资源标识符。资源可以映射到空集,空集允许在概念的任何实现存在之前引用该概念——在Web之前,大多数超文本系统都不熟悉这个概念。有些资源是静态的,在创建后的任何时候检查时,它们总是对应于相同的值集。其他人的价值随着时间的推移有很大程度的差异。对于资源来说,唯一需要是静态的是映射的语义,因为语义是区分一个资源和另一个资源的地方

例如,作者对学术论文的首选版本是其值随时间变化的映射,而对在《X会议记录》上发表的论文的映射是静态的。这是两种不同的资源,即使它们在某个时间点都映射到相同的值。这种区别是必要的,这样两种资源都可以被独立地识别和引用。软件工程中的一个类似例子是单独的标识 参考最新版本、版本号1.2.7或橙色版本中包含的版本时,版本控制源代码文件的版本。[……]

REST是无状态的 REST代表代表代表性的状态转移,该架构由Roy Thomas Fielding在年定义

Fielding为REST体系结构定义了一组约束。其中一个限制是客户机和服务器之间的通信,定义为以下要点在他的论文中没有出现:

[…]从客户端到服务器的每个请求必须包含理解请求所需的所有信息,并且不能利用服务器上存储的任何上下文。因此,会话状态完全保留在客户机上。[……]

因此,如果将会话状态保留在服务器上,则会中断会话。因此,这不是休息。在REST中,服务器上不会有会话,因此也不会有会话标识符

每个请求必须包含要处理的所有数据 从客户机到服务器的每个请求都必须包含服务器能够理解的所有必要信息。使用它,您不需要依赖服务器上存储的任何会话上下文

例如,当访问需要身份验证的受保护资源时,每个请求都必须包含所有需要正确身份验证/授权的数据。这意味着将对每个请求执行身份验证

资源可以是静态的,也可以随时间变化 根据Fielding,资源可以是静态的,也可以随时间而变化。看看他的论文:

REST中信息的关键抽象是资源。任何可以命名的信息都可以是资源:文档或图像、临时服务(例如,洛杉矶的今天的天气)、其他资源的集合、非虚拟对象(例如,人)等等。换句话说,任何可能成为作者超文本引用目标的概念都必须符合资源的定义。资源是到一组实体的概念映射,而不是在任何特定时间点对应于映射的实体

更准确地说,资源R是一个随时间变化的隶属函数MRt,对于时间t,它映射到一组等价的实体或值。集合中的值可以是资源表示和/或资源标识符。资源可以映射到空集,空集允许在概念的任何实现存在之前引用该概念——在Web之前,大多数超文本系统都不熟悉这个概念。有些资源是静态的,在创建后的任何时候检查时,它们总是对应于相同的值集。其他人的价值随着时间的推移有很大程度的差异。对于资源来说,唯一需要是静态的是映射的语义,因为语义是区分一个资源和另一个资源的地方

例如,作者对学术论文的首选版本是其值随时间变化的映射,而对在《X会议记录》上发表的论文的映射是静态的。这是两种不同的资源,即使它们在某个时间点都映射到相同的值。这种区别是必要的,这样两种资源都可以被独立地识别和引用。软件工程中的一个类似示例是,在参考最新版本、版本号1.2.7或橙色版本中包含的版本时,对版本受控源代码文件进行单独标识。[……]

{name: "toto", life: 12, score: 378}