1

我们正在重新开发我们的在线购买功能,并以 RESTful 方式进行。

该过程分为三步,每一步都要求客户输入数据。

假设三个 URL 是;

/step1.aspx

/step2.aspx

/step3.aspx

每个步骤都是非常自主的,不需要来自任何其他步骤的数据。

问题是我如何阻止客户直接导航到第 2 步而无需先完成第 1 步中的详细信息,因为每个步骤对上一步一无所知?

我知道我可以向我的对象模型添加一个属性,告诉我哪一步是最后一步等,但这不会破坏整个 REST 原则吗?

我也不想检查我的模型是否已提交上一步中的详细信息,因为这再次违反了 REST 原则。

我想我正在慢慢让自己接受一个我需要(某事)告诉我我去过哪里但我不想要的概念。

控制器应该/可以检测到历史不包含上一步将控制放回我认为应该在的位置吗?

4

2 回答 2

3

REST URL 应该代表实体。例如书籍/订单/照片等。

我认为上面的混淆是您试图将 REST 术语中的预订序列表示为实体,而(当然)它们不是。因此,您的客户可以选择的对象、他们的订单等可能以这种方式有用地表示。该过程的其他元素不应该是。

您可能会争辩说第 1 步代表一个地址(为了论证)。但是发布地址对象不同于在表单中输入该数据并允许导航到/从相关页面。该操作有一个序列或流程,并且在概念上比简单地发布/获取/删除地址更丰富。您通过争辩您想要阻止某人完成第 2 步而不完成第 1 步等来说明这一点。

于 2009-11-10T22:32:53.220 回答
2

当从 step1.asx 转到 step2.asx 时,传递一个查询参数,其中包含一些告诉服务器 step1 已被访问的键。例如,step1.asx 具有指向 step2.asx?whatever=a92jv29 的 href。

例如,“a92jv29”可以是来自服务器的加密时间戳。您可以轻松地在服务器端验证它是否有效(未过期且不会来自未来)。无需存储状态。

您的 URL 可以有更好的名称,应该是“terms.aspx”、“registration.aspx”或其他任何名称,但这并不是必需的。

于 2009-11-10T22:34:00.033 回答