php发展

首页 » 常识 » 常识 » REST正在消亡,摆脱它吧
TUhjnbcbe - 2024/3/1 16:53:00
白癜风中药治疗 https://m-mip.39.net/news/mipso_5939656.html

自年代以来,我一直在为计算机编程。在那段时间里,我看到并使用了很多来来去去的语言和技术。我看到Web出现了新功能,例如异步交换XML数据的浏览器。今天我们将这种异步JavaScript和XML数据交换称为“AJAX”,但具有讽刺意味的是,AJAX通常甚至不再使用XML。大多数情况下,这些数据以JSON、YAML、HTML或其他格式交换。

年,微软工程师在IE4中引入了iframe标签。这允许浏览器在不刷新页面的情况下与相同或完全不同的服务器异步交换数据,并且可以将数据传递给生成iframe对象的父对象。

当时,新功能对我来说似乎只是一个神奇的“框架”功能(我知道,你不知道什么是HTML框架;是的,我已经那么老了,谢谢提醒)。然而,我的兄弟在年代中期在商业项目中使用这项技术来做到这一点——甚至在“AJAX”一词被发明之前就使用XML进行“AJAX”数据调用。

几年后,微软将XMLHttpRequest在IE5中创建该对象。其他浏览器厂商纷纷效仿,“AJAX”时代诞生了。

REST正在消亡,摆脱它吧。

有时,标准和技术的发明源于以下原因:好的、坏的和丑陋的。REST是体现所有三个标准的标准之一:好的、坏的和丑陋的。但是每个人都在继续使用REST,因为这是现代客户端(浏览器)实现的。

我对REST的主要问题是它的动词:GET、POST、PUT、DELETE等,限制太多,响应通常不一致,或者根本没有响应,就像DELETE一样。是的,您可以通过DELETE调用发送成功响应(即数据有效负载),但这并不是真正的标准。哦,你得到了响应,这意味着它有效。不是。也许它做到了,也许它没有。发送或响应可能同样神秘。

公平地说,REST实际上并不是一个数据交换协议,例如SOAP。它实际上是一种建筑风格,或者有人会说“模式”。作为软件开发人员,有时我们明确地遵循样式/模式,有时我们不这样做。

标准是好的,如果他们工作。但随着技术使用的进步,“标准”通常开始阻碍你,这就是REST对Web所做的事情。

除了动词的限制之外,我对REST的许多问题中的另一个是它的端点。谁认为拥有37个不同的端点是个好主意?

REST也不像SOAP和WSDL那样本机实现API文档。是的,OpenAPI规范(以前称为Swagger)试图解决这个问题,但它是另一个REST附加组件。

由于REST的这个和其他限制,许多软件工程师使用小部分REST和/或借鉴其他更好的协议来开发和发展我们自己的Web服务版本,我也不例外。

TIGER:更简单、效果更好的Web服务

TIGER是我为大约12年前开发的一个松散的Web服务标准而创造的一个名称,因为我厌倦了REST的限制和废话。TIGER松散地基于一种JSON-RPC(JSON远程过程调用)协议,它实际上只是使用REST的POST和/或GET动词通过浏览器客户端发送和接收数据。如果您愿意,GET用于快速获取数据,但POST几乎专门用于安全地交换数据。

TIGER利用易于使用的“消息模式”将数据发送和路由到需要去的地方。路由元数据包含(混合)在发往服务器的“消息”中。

因此,TIGER真的只需要一个端点。

是的,您可以拥有多个端点,但您不应该这样做。就像我们在典型的RESTful服务中看到的那样,拥有具有多个端点的API会产生巨大的代码膨胀。Zend甚至创建了一个名为“Apigility”的完整REST框架来管理和进一步膨胀API端点。这是胡说八道。保持简单的事情发生了什么?

TIGER真正闪耀的地方在于面向服务的MVC应用程序的上下文中。您的AJAX数据消息无需设置多个端点,而是仅包含MVC的控制器/操作,或者在SOA(面向服务的架构)的情况下,您希望针对数据有效负载进行处理的服务/方法。繁荣!完毕。

如果您愿意,您还可以在消息元数据中包含版本属性等内容,以针对特定的服务版本。

TIGERWebservices背后的主要目标是:

为API创建一个单一且安全的入口点,这样我就不必管理和维护数十个版本化的端点,从而使我的代码膨胀。

自动验证、路由和授权来自API的请求。

在客户端和服务器的消息和响应之间创建一个灵活但又一致的契约。

TIGER服务通常是有状态的。但如果你愿意,它们可以是完全无国籍的。您不会限制某人对API应该如何表现的想法。

在MVC的上下文中运行的TIGER必须将每个匿名请求验证为“访客”,或者作为其他经过身份验证的角色来进行授权。如果你无权访问你请求的任何资源,你就不会进入。

在这方面,TIGERWeb服务确实依赖于客户端维护某种会话状态,但无论如何我们已经对各种RESTful服务做到了这一点,所以TIGER在这方面没有什么不同。

TIGERWeb服务在行动

这里的概念非常简单。这就是图案的美妙之处:

这是使用jQuery调用的典型TIGERAJAX请求的样子:

$.ajax({type:POST,url:/api,dataType:json,data:{service:user,method:save,firstname:Thundarr,lastname:Barbarian},beforeSend:beforeSend,

1
查看完整版本: REST正在消亡,摆脱它吧