RESTful编程到底是什么?


当前回答

一种称为REST(RepresentationalStateTransfer)的体系结构风格主张web应用程序应该像最初设想的那样使用HTTP。查找应使用GET请求。PUT、POST和DELETE请求应分别用于变异、创建和删除。

REST支持者倾向于使用URL,例如

http://myserver.com/catalog/item/1729

但REST架构不需要这些“漂亮的URL”。带有参数的GET请求

http://myserver.com/catalog?item=1729

完全是RESTful的。

请记住,GET请求不应用于更新信息。例如,向购物车添加项目的GET请求

http://myserver.com/addToCart?cart=314159&item=1729

这是不合适的。GET请求应该是幂等的。也就是说,发出两次请求与发出一次请求应该没有区别。这就是请求可缓存的原因。一个“添加到购物车”请求不是幂等的,发出两次请求会向购物车添加两个项目副本。POST请求显然适合于这种情况。因此,即使是RESTful web应用程序也需要共享POST请求。

这摘自大卫·M·Geary的优秀著作《核心JavaServer面孔》。

其他回答

如果我不得不将关于REST的原始论文缩减为短短的3句话,我认为以下内容抓住了它的精髓:

通过URL请求资源。协议仅限于使用URL进行通信的内容。元数据作为名称-值对(发布数据和查询字符串参数)传递。

之后,很容易陷入关于适应、编码约定和最佳实践的争论。

有趣的是,本文中没有提到HTTPPOST、GET、DELETE或PUT操作。这一定是后来有人对“统一界面”的“最佳实践”的解释。

当涉及到web服务时,我们似乎需要一些方法来区分WSDL和基于SOAP的体系结构,这会给接口增加相当大的开销和不必要的复杂性。它们还需要额外的框架和开发人员工具才能实现。我不确定REST是否是区分常识接口和过度工程化接口(如WSDL和SOAP)的最佳术语。但我们需要一些东西。

如果我没有直接回答这个问题,我很抱歉,但通过更详细的例子更容易理解这一切。由于所有的抽象和术语,字段化并不容易理解。

这里有一个很好的例子:

解释REST和超文本:垃圾邮件清理机器人Spam-E

更棒的是,这里有一个简单的例子(powerpoint更全面,但你可以在html版本中获得大部分内容):

http://www.xfront.com/REST.ppt或http://www.xfront.com/REST.html

看完这些例子后,我明白了Ken为什么说REST是超文本驱动的。但我实际上并不确定他是对的,因为/user/123是指向资源的URI,我不清楚它是否是非RESTful的,因为客户端知道它是“带外”的

xfront文档解释了REST和SOAP之间的区别,这也非常有用。当Fielding说:“这是RPC。它尖叫RPC。”时,很明显RPC不是RESTful的,所以了解这一点的确切原因很有用。(SOAP是RPC的一种类型。)

什么是API测试?

API测试利用编程向API发送调用并获得产量。它的测试将被测段视为一个黑盒子。API测试的目的是在将部件协调到应用程序之前确认部件的正确执行和错误处理。

休息API

REST:代表性状态转移。

这是测试人员执行请求和接收响应的功能安排。在REST API中,通过HTTP协议进行交互。REST还允许计算机之间通过网络相互通信。对于发送和接收消息,它涉及使用HTTP方法,并且不像Web服务那样需要严格的消息定义。REST消息通常接受XML或JavaScript对象符号(JSON)形式的表单。

4常用API方法:-

GET:–它提供对资源的只读访问。POST:–用于创建或更新新资源。PUT:–用于更新或替换现有资源或创建新资源。DELETE:–用于删除资源。

手动测试API的步骤:-

要手动使用API,我们可以使用基于浏览器的REST API插件。

安装POSTMAN(Chrome)/REST(Firefox)插件输入API URL选择REST方法选择内容标题输入请求JSON(POST)单击发送它将返回输出响应

自动化REST API的步骤

REST定义了6个体系结构约束,使任何web服务都成为真正的RESTful API。

统一接口客户端-服务器无国籍的可缓存的分层系统按需编码(可选)

https://restfulapi.net/rest-architectural-constraints/

Edit

阅读这里的自述文件,我希望你真的能得到REST。

https://github.com/lukepuplett/surfdude-csharp/blob/master/README.md

--

这些给出链接资源示例的答案很好,但只占一半。

所以,想象你正在设计一个网站。你写一个故事,

我希望能够通过邮政编码搜索地址,以便选择发货地址

然后,您将构建网站,让用户踏上旅程,并尝试在工作流中将页面链接在一起。

一个网站设计让他们进行地址查找,然后让他们将地址复制到剪贴板,然后返回到发货地址表单,这是不太有用的。

REST API使用我们在web上认为理所当然的模式进行机器-机器交互。

对邮政编码功能的搜索不应该是base/addresss/{postcode},并且会返回一个集合,即使每个地址都链接到一个完整的地址和一些编辑链接,因为这是一个死胡同;API使用者需要猜测如何使用该地址。

相反,该功能的动机应内置于其使用的流程中,以便旅程在开始时结束:

1 GET /orders/123/shipping

  200 OK { Current shipping details + link to parent + link to address picker }

2  -> GET /orders/123/shipping/addresspicker

      200 OK { Link and form for searching for a postcode }

3   -> GET /orders/123/shipping/addresspicker?postcode=tn11tl

       200 OK { List of addresses each with link to pick it }

4    -> POST /orders/123/shipping/addresspicker?postcode=tn11tl&pickNo=3

        200 OK { Current shipping details + link to parent + link to address picker }

这是一次用户旅程,最后您可以看到流量对订单的影响。

HTTP请求/响应严格来说不是REST的一部分,但我认为没有人见过非HTTP REST应用程序。

现在这些URL可以是任何一组字符,它们只是标识符,我把它们做得很漂亮,因为它们对人们来说很有意义。机器将使用rel来计算它们做什么,而不依赖于可读的href。