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

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

假设这三个 URL 是:

/step1.aspx

/step2.aspx

/step3.aspx

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

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

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

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

我想我正在慢慢地接受这样一个观念:我需要(某些东西)来告诉我我去过哪里,但我不想要那样。

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

有帮助吗?

解决方案

REST的URL应该代表实体。例如书籍/命令/照片等

我觉得上面的困惑是,你要代表预订的的在REST术语实体,和(当然),他们不是。让您的客户可以选择的对象,他们的订单等,可有效地以这种方式来表示。该方法的其它元件不应该。

您可能会认为,步骤1表示(为参数的缘故)的地址。但过帐地址对象是从在表单中输入的数据和从相关网页允许导航到/不同。该操作具有序列或流动到它,并在概念上比单纯投稿/歌厅更丰富/ delete一个的地址。你辩称要防止有人在完成第2步没有完成第1步等说明这一点。

其他提示

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

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

您的 URL 可以有更好的名称,例如“terms.aspx”、“registration.aspx”或其他名称,但这完全没有必要。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top