REST后端上的HTML UI

在本文中,我将向您展示浏览器发送到服务器的表单只能使用GETPOST HTTP方法,以及为了仍然使用REST后端而应应用的解决方法。

REST Web服务在当今环境中变得越来越普遍。 我们只能想象原因,但是我猜想SOAP的结构化方法仅在最复杂的用例中有用,而在其余时间过大了。 相反,REST非常容易设置。

在Java世界中,REST有自己的规范,即带有JSR 311的JAX-RS,并受所有主要框架的支持:

以我的拙见,考虑到REST的采用,下一步将是开发标准客户端和浏览器均可访问的REST后端,以分解代码并降低成本。

传统上,使资源在Web上可访问是通过超链接实现的。 超链接使用GET方法。 同样,REST是基于使用HTTP方法的,其中每个方法都有一个关联的动词:

HTTP方法 动词

开机自检

创建

得到

更新资料

删除

删除

不幸的是,现实世界开始发挥作用。 为了使它起作用, HTML 4规范是一个很大的障碍:

FORM元素[…]

方法:此属性指定将使用哪种HTTP方法提交表单数据集。 可能的(不区分大小写)值是“ get”(默认)和“ post”。

这意味着符合HTML 4的浏览器将只允许您读取和创建,而不能更新或删除 。 例如,我分别使用的Firefox和Internet Explorer版本3.5.6和6.0(!)使用POST进行POST,使用GET进行其他所有操作。 这是反对使用REST的真实案例。 但是,有一些解决方法。

第一个不是将HTTP方法用于动词,而是将其放入URL。 从而

这显然违反了REST的对动词使用HTTP方法的原则,但这适用于简单的情况。

第二种解决方法稍微复杂一点,但是它有两个很大的优点:它符合REST原则,并且可以在大多数现代浏览器中使用。

诀窍是使用由Microsoft创建但现在已在所有地方实现的整洁的小对象XMLHttpRequest对象。 是的,这是Ajax的基础目标,也是我们解决问题的方法。 XMLHttpRequest open()方法有两个参数,第一个是用于访问url的HTTP方法(第二个参数)。 现在,您可以传递所需的动词,如以下示例所示。

var xmlhttp = new XMLHttpRequest ();
xmlhttp . open ( ' DELETE ' , ' http://frankel.ch/customer/1 ' );
xmlhttp . send ( null );

此外,您不仅可以使用4个CRUD动词,还可以使用任何想要的动词。

该解决方案有两个主要限制:

  • 它需要现代浏览器,因为XMLHttpRequest对象在较XMLHttpRequest浏览器中不可用
  • 它需要JavaScript,因此您需要在客户端浏览器上启用它,并且需要管理浏览器的兼容性。 例如,上面的脚本使用Firefox 3.5而不是IE 6(直言不讳,我并不为之烦恼)

HTML 5规范似乎(在其草稿状态下)声明必须支持所有4个基本CRUD动词,从而使这种黑客毫无用处。

您可以在此处找到本文的示例 。 使用时,如果部署在Eclipse中,请导航至http:// localhost:8080 / httpmethods / 。 它已经在Firefox 3.5上进行了测试,并且可以完美运行。 相反,由于我的脚本并非设计为跨浏览器,因此它不适用于IE 8。 对于Tomcat用户,您必须向Tomcat添加JSTL功能(这意味着在commons / lib目录中添加standard.jar和jstl.jar)。

翻译自: https://blog.frankel.ch/html-ui-over-a-rest-backend/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值