哪个RESTful HTTP动词用于读取时变状态?

时间:2018-03-06 07:16:05

标签: rest http http-headers

我正在考虑创建一个RESTful API来监控远程仪器 - 出于讨论的目的,假设远程仪器是电压表。

API的一个重要功能是随时读取仪器测量的电压。

我的问题:什么(如果有的话)是用于读取可以从一个读数更改为下一个读数的值的适当HTTP动词?

据我了解,GET是错误的,因为服务器可能认为该值是幂等的,因此缓存返回的值。

但其他通常的选择 - PUT和POST - 似乎用于创建和更新值而不返回值。

我可以想到几种方法:

  • 使用GET和Cache-Control:标题中的no-cache
  • 使用(或滥用)POST并让它返回值
  • 不要将RESTful设计用于此类应用

什么是正确的方法?

2 个答案:

答案 0 :(得分:2)

当您只想从服务器获取某些数据时,请使用GET作为隐含意义。

正如你所说的那样,你需要有正确的缓存机制(我故意说它可能只是设置缓存最大时间0,但你可能还需要在任何以后的时间点缓存),以确保你在响应中获得新数据

答案 1 :(得分:2)

  

我的问题:什么(如果有的话)是用于读取可以从一个读数更改为下一个读数的值的适当HTTP动词?

GET

  

GET方法请求传输目标资源的当前选定表示。

RFC 7234中描述了缓存的语义;特别是,您可以使用Cache-Control header向中间组件提供正确缓存响应所需的元数据。如果您始终希望中间组件在重用值之前检查原点,则缓存控制指令列表包括no-cache

这是uniform interface的要点 - 因为资源统一实现了一组一致的语义,客户端和中介可以依赖这些语义来贡献而无需了解具体细节资源,它的实现,或它的表示。

  

将REST架构风格与其他基于网络的样式区分开来的核心功能是强调组件之间的统一接口(图5-6)。通过将通用性的软件工程原理应用于组件接口,简化了整个系统架构,提高了交互的可见性。实现与它们提供的服务分离,这鼓励了独立的可演化性。然而,权衡是统一的接口会降低效率,因为信息是以标准化形式传输的,而不是特定于应用程序需求的形式。 REST接口旨在高效地进行大粒度超媒体数据传输,针对Web的常见情况进行优化,但会导致界面不适合其他形式的架构交互。