ST设计。我这样说并不是要贬低菲尔丁的工作,他的工作显然具有巨大的影响力。另一方面,本论文是从2000年开始的,没有太多的实践经验。我在2000年是一名初级开发人员,相信我,REST不是一件事。如果您真的做过web服务,SOAP就是它的所在

ST设计。我这样说并不是要贬低菲尔丁的工作,他的工作显然具有巨大的影响力。另一方面,本论文是从2000年开始的,没有太多的实践经验。我在2000年是一名初级开发人员,相信我,REST不是一件事。如果您真的做过web服务,SOAP就是它的所在,rest,http,cookies,uri,application-state,Rest,Http,Cookies,Uri,Application State,我主要从Subbu Allamaraju的RESTful Web服务食谱以及Ian Robinson、Jim Webber和Savas Parastatidis的REST实践中学到REST。在我看来,这些书所依据的是开发生产服务的实际经验,而不是菲尔丁在撰写论文时可能拥有的经验 综上所述,我想我可以解析菲尔丁对购物篮的引用: 在超媒体数据格式中定义购物项目的语义,允许用户代理在其自己的客户端购物篮中选择和存储这些项目,并在客户端准备购买时使用URI进行结账 请注意,它谈到了客户端购物篮。这意味着

我主要从Subbu Allamaraju的RESTful Web服务食谱以及Ian Robinson、Jim Webber和Savas Parastatidis的REST实践中学到REST。在我看来,这些书所依据的是开发生产服务的实际经验,而不是菲尔丁在撰写论文时可能拥有的经验

综上所述,我想我可以解析菲尔丁对购物篮的引用:

在超媒体数据格式中定义购物项目的语义,允许用户代理在其自己的客户端购物篮中选择和存储这些项目,并在客户端准备购买时使用URI进行结账

请注意,它谈到了客户端购物篮。这意味着跟踪状态是客户的责任

我的解释是,每个购物项目都是一个独立的资源,这几乎没有争议。在REST中,资源由地址标识,因此购物篮就是URL的集合:

/products/12345
/products/56789
/products/90125
客户机必须像上面的列表一样维护一个资源地址列表。一旦它准备好签出,它将
将列表发布到为此目的提供给它的URI中:

POST /check-out HTTP/1.1
Content-Type: text/plain
/products/12345
/products/56789
/products/90125
在这里,我刚刚使用了一个换行分隔的纯文本列表,但也可以用XML或JSON对数据进行编码(后者在2000年也不是真正的东西)


我不认为我会设计一个非常安静的购物篮,但这就是我对上述引文的解释。

我没有读过菲尔丁的论文,也没有遵循这些引文中的推理路线,但既然你让我(带外)来看看这个问题,我想说,像主题这样的东西在我看来就像两种不同的表示,比如说,机器可读API中的JSON和XML。这些通常通过HTTP的内容协商协议处理,而不是使用不同的URL。毕竟,它们是同一资源的两种不同表示。@MarkSeemann感谢您的反馈。问题是用户在web浏览器中无法控制它。如何通过内容协商在后续网页中坚持用户的选择?我不确定我是否遵循。REST是机器可读API的设计理念。它们不应该被浏览器使用。例如,你不能用浏览器执行
PUT
DELETE
请求。@MarkSeemann REST实际上并不局限于机器可读的API:“对我来说更重要的是,相同的设计反映了良好的人类网页设计,因此,我们可以通过遵循相同的体系结构风格来设计协议,以支持机器和人工驱动的应用程序。“它需要知道的只是这些指令的含义以及它下一步要做什么的一些想法,无论是用户驱动的、配置驱动的还是某种人工智能驱动的。”(参考罗伊·菲尔丁的评论)@MarkSeemann,您可以使用Javascript对象
XMLHttpRequest
在浏览器中发送
PUT
DELETE
HTTP请求。感谢您的反馈。关于购物车示例,我还考虑了您的其他解释。这已经可以在HTML5中实现:您只需调用
window.history.pushState(数据“”,uri)
从Javascript创建一个新的应用程序状态,在浏览器的应用程序历史记录中存储购物车
数据
,可选更改
uri
,然后您可以使用
window.history.state
检索该
数据
,并使用POST请求的主体将其发送到签出uri。这是您想要的吗eant?这种方法的缺点是,如果浏览器中禁用了Javascript,它将不起作用,因此如果您希望购物车数据在没有Javascript的情况下工作,则必须将其存储在URI中,这与用户偏好示例的方法基本相同。哦,抱歉,我现在明白了您的意思:菲尔丁建议的全部要点ion正是为了允许通过响应表示的超媒体格式(例如HTML中的一个新的
元素,该元素将点击转换为应用程序状态的更新)本地操纵应用程序状态,而不是依赖客户端脚本(例如Javascript的历史API)。关于用户首选项示例,可以肯定的是,我的解释是,要跨多个操作携带存储在URI中的用户首选项,每个资源都应该有一个超链接表示,该超链接存储与资源URI相同的用户首选项(例如,资源
/foo?x=bar
表示中的所有超链接都应该有查询组件
x=bar
,以便信息
x=bar
可以传播)。你同意这种解释吗?“这篇论文来自2000年,不能基于太多的实践经验。”-然而,我认为这似乎是因为不幸的事实,行业盗用了另一个概念的名称。菲尔丁的REST和行业REST实际上是两件不同的事情。这篇论文根本不是关于(基于RPC的)的设计web服务,它在某种程度上抽象地描述了他所称的“互联网规模的分布式超媒体系统”的体系结构约束和属性,即万维网(当时已有10多年的历史)这是一个公平的批评。正如我所写的,我还没有读过这篇论文。我和自己争论是否应该回答这个问题,但是OP已经要求我(带外)来考虑这个问题,基于我所做的其他工作。