为什么我们在Restful API中使用不同的动词?

时间:2018-10-09 16:35:20

标签: rest

除了“最佳实践”和“创建标准”的明显答案之外,还有使用GET,POST,PUT,DELETE等的技术论据,而不是使用POST进行所有操作吗?

3 个答案:

答案 0 :(得分:1)

除了创建Uniform Interface之外, 不同的动词具有不同的属性:

safeGETHEADOPTIONSTRACE

  

区分安全和不安全方法的目的是      允许自动检索过程(蜘蛛)和缓存性能      优化(预提取)即可正常工作,而不必担心会造成伤害。

idempotentPUTDELETEGETHEADOPTIONSTRACE

  

区分优势方法是因为,如果在客户端能够读取服务器的响应之前发生通信故障,则可以自动重复请求。

cacheable:(GETHEADPOST

  

可以将请求方法定义为“可缓存的”,以指示允许存储对它们的响应以供将来重用;

组成“ Internet”的所有中间服务器都依赖统一的接口,并且这些属性才能正常工作。其中包括内容交付网络,代理和缓存。正确使用动词有助于互联网更好地工作。

答案 1 :(得分:0)

这些动词是HTTP规范的一部分,这是我们在通过HTTP进行REST时使用它们的主要原因,并且在早期我们开始在HTTP上进行REST,因此它们成为了最佳实践的一部分。

答案 2 :(得分:0)

  

是否有使用GET,POST,PUT,DELETE等的技术论据,而不是使用POST进行所有操作?

是的

对于HTTP来说,选择GET而不是POST的重要原因之一是缓存RFC 7234定义了一堆缓存语义,可以将其写入消息(特别是标头)。

计算机科学有趣的问题之一是缓存无效化;在HTTP中,invalidation有一种与方法有关的特定语义:

  

当收到非错误状态代码时,缓存必须使有效的请求URI([RFC7230]的5.5节)以及“位置”和“内容-位置”响应头字段(如果存在)中的URI无效。响应不安全的请求方法。

换句话说,POSTGET(也称为HEAD)之间的部分区别在于,通用客户端知道会使资源的缓存表示无效。因此,我可以使用第三方无头浏览器来与您的API通讯,并缓存“正常工作”。

POST与其他不安全方法之间的界线不太清楚,但存在。基本轮廓是POST可以表示任何含义-但PUTDELETE都专门描述idempotent operations。因此,再次重申,如果消息在不可靠的网络上丢失,我不需要定制一个做正确的事情的客户端-我可以使用与域无关的HTTP客户端来进行PUT和DELETE操作,并且重新广播丢失的消息可以再次“就是工作”。

方法之间区别的强大之处在于,我们可以创建和重用了解HTTP语义的通用中间组件(无头浏览器,缓存,反向代理),并且(因为我们已经使用这些语义描述了域协议)它们都“正常工作”-通用组件即使不知道真正发生了什么,也能够做有用的工作。