【发布时间】:2010-11-19 04:21:09
【问题描述】:
即使我提供了 PUT 和 DELETE 的替代方法(参见“低 REST”),我如何为从浏览器访问我的 Web 服务的用户提供用户友好的表单验证,同时仍然公开 RESTful URI?表单验证问题(如下所述)是我目前的困惑,但我想问的更广泛的问题是:如果我沿着尝试提供 RESTful 公共接口 和 非 JavaScript HTML界面,它会让生活更轻松还是更难?他们一起玩吗?
理论上,这应该只是改变输出格式的问题。机器可以查询 URL“/people”,并以 XML 格式获取人员列表。人类用户可以将他们的浏览器指向同一个 URL,并获得漂亮的 HTML 响应。 (我用的是URL examples from the microformats wiki,看起来还算合理)。
通过对“/people”URL 的 POST 请求创建新的人员资源。为此,人类用户可以首先访问“/people/new”,它会返回一个静态 HTML 表单来创建资源。该表单具有 method=POST 和 action="/people"。如果用户的输入是有效的,这将正常工作,但是如果我们在服务器端进行验证并发现错误怎么办?友好的做法是返回表单,其中包含用户刚刚输入的数据以及错误消息,以便他们可以解决问题并重新提交。但是我们不能直接从 POST 将输出返回到“/people”,否则会破坏我们的 URL 系统,如果我们将用户重定向回“/people/new”表单,则无法报告错误并且重新填充表单(除非我们将数据存储到会话状态,否则 RESTful 会更少)。
使用 javascript,事情会容易得多。只需在后台执行 POST,如果失败,则在表单顶部显示错误。但我希望应用程序在 javascript 支持不可用时优雅地降级。目前,我得出的结论是,一个重要的 Web 应用程序无法在没有 javascript 的情况下实现 HTML 界面,并且使用传统的 RESTful URL 方案(例如微格式 wiki 上描述的方案)。如果我错了,请告诉我!
有关 Stack Overflow 的相关问题(均不涉及表单验证):
【问题讨论】:
-
@Todd 没有“低 REST”之类的东西 - 正如您所知,REST 确实允许规避协议标准,只要由于不正确的客户端实现是必要的,即仅 HTML4支持 POST/GET。