restful定义

本文详细阐述了HTTP的GET、POST、PUT和DELETE方法的语义及幂等性特性。GET是幂等的,多次请求同一资源不会有副作用。DELETE同样具备幂等性,多次删除同一资源结果相同。POST非幂等,因为它会创建新的资源,而PUT是幂等的,用于创建或更新资源。通过理解这些概念,可以更好地设计和使用WebAPI,例如使用PUT实现幂等性取款功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    HTTP GET方法用于获取资源,不应有副作用,所以是幂等的。比如: GET http://www .bank.com/account/123456,
不会改变资源的状态,不论调用一次还是N次都没有副作用。请注意,这里强调的是一次和N次具有相同的副作用,而不
是每次GET的结果相同。GET  http://www.news.com/latestnews这个HTTP请求可能会每次得到不同的结果,但它本身
并没有产生任何副作用,因而是满足幂等性的。

    HTTP DELETE方法用于删除资源,有副作用,但它应该满足幂等性。比如: DELETE http://www.forum.com/article/4231,
调用- -次和N次对系统产生的副作用是相同的,即删掉id为4231的帖子;因此,调用者可以多次调用或刷新页面而不必担
心弓|起错误。

    重点来了:比较容易混淆的是HTTP的 POST和PUT。POST和PUT的区别容易被简单地误认为"POST表示创建资源,
PUT表示更新资源”;而实际上,二者均可用于创建资源,更为本质的差别是在幂等性方面。在HTTP规范中对POST和PUT
是这样定义的:
        POST所对应的URI并非创建的资源本身,而是资源的接收者。比如: POST http://www.forum.com/articles的
    语义是在http://www.forum.com/articles下创建一篇帖子, HTTP响应中应包含帖子的创建状态以及帖子的URI。
    两次相同的POST请求会在服务器端创建两份资源,它们具有不同的URI; 所以,POST方法不具备幂等性。而PUT所
    对应的URI是要创建或更新的资源本身。比如: PUThttp://www.forum/articles/4231的语义是创建或更新ID为4231的帖
    子。对同一URI进行多次PUT的副作用和一次PUT是相同的;因比,PUT方法具有幕等性。

    在介绍了几种操作的语义和幂等性之后,我们来看看如何通过Web API的形式实现前面所提到的取款功能。很简单,
POST /tickets来实现create_ ticket;用PUT /accounts/account id/ticket id&amount=xxx来实现idempotent _withdraw。
值得注意的是严格来讲amount参数不应该作为URI的一部分,正的URI应该是/accounts/account_ id/ticket id,而amount
应该放在请求的body中。 这种模式可以应用于很多场合,比如:论坛网站中防止意外的重复发帖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值