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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哪个RESTful HTTP动词用于读取时变状态?相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

我可以想到几种方法:

  • 将GET与Cache-Control一起使用:标头中没有缓存
  • 使用(或滥用)POST并让它返回一个值
  • 不要将RESTful设计用于此类应用程序

什么被认为是正确的方法?

答案

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

GET

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

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

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

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

另一答案

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

正如你所说的那样,你需要有正确的缓存机制(我有意识地说,因为你可能只设置缓存最大年龄0,但你可能还需要在任何后期的缓存),以确保你在响应中获得新数据。

以上是关于哪个RESTful HTTP动词用于读取时变状态?的主要内容,如果未能解决你的问题,请参考以下文章

RESTful 的学习总结

短短的 RESTful API 设计规范

通俗易懂的 RESTful API 设计规范

Django中的RESTful

restful规范介绍

ElasticSearch restful实操