【问题标题】:What does statelessness mean in a RESTfull service无状态在 RESTful 服务中意味着什么
【发布时间】:2017-06-22 12:09:21
【问题描述】:

我已经阅读 REST 一周了,我能说的一切都可以在 1 分钟内学会,我可以使用 HTTP 请求,例如 GET/POST/PUT/DELETE 操纵网站内容

但是当人们描述 REST 时,什么是无状态和其他难以理解的术语?

为什么我不能通过$_GET[''] 这样的http://localhost/register.php?id=1&username=bob 方法将内容添加到数据库中,这里我使用了所谓的$_GET[] 方法 - 我相信这与 REST(GET/ PUT) 方法 - 并将信息插入到数据库中,而不是使用相同的方法,只是以更复杂的方式理解

【问题讨论】:

  • Wikipedia 实际上总结得很好:The client–server communication is constrained by no client context being stored on the server between requests. Each request from any client contains all the information necessary to service the request, and session state is held in the client. 示例:您不只是验证自己一次,然后执行您想要的所有 API 请求,而是在每个请求中验证自己。例如请求中的某个标记或资源 uri 本身。

标签: php rest methods get


【解决方案1】:

什么是无国籍

无状态是支持扩展、可见性和可靠性的特定架构约束。菲尔丁在third chapter of his dissertation 中对其进行了描述。

从客户端到服务器的每个请求都必须包含理解请求所需的所有信息,并且不能利用服务器上存储的任何上下文。会话状态完全保存在客户端上。

这些约束提高了可见性、可靠性和可扩展性的属性。可见性得到提高,因为监控系统不必超越单个请求数据来确定请求的全部性质。可靠性得到了提高,因为它简化了从部分故障中恢复的任务[133]。可扩展性得到改进,因为不必在请求之间存储状态允许服务器组件快速释放资源并进一步简化实现。

client-stateless-server 的缺点是它可能会通过增加一系列请求中发送的重复数据(每次交互开销)来降低网络性能,因为这些数据不能在共享上下文中留在服务器上。

简而言之,HTTP 支持这种架构约束的事实是它能够如此成功的原因之一。

为什么我不能将内容添加到数据库中

你当然可以修改服务器状态;也就是说,“资源”的状态,以响应 HTTP 请求。在这种情况下,您会受到 HTTP 的限制(例如,GET 应该有 read-only semantics)。

但是服务器不应该对当前正在处理的消息中无法证明的当前客户端状态做出任何假设。

【讨论】:

  • 但是如果我使用 POST 方法,那么我会做和使用 Insert into db 方法一样的事情,不是吗?
  • 我不知道如何解释这个问题。
  • INSERT INTO DB 是一种插入数据库的 CRUD 方式,如果我通过 URL ($_GET['']) 获取信息来做到这一点,我将有同样的“事件”发生就好像我要通过 REST 使用 POST 方法既然使用 REST 我可以使用 POST 方法创建内容,这难道一点意义都没有吗?
猜你喜欢
  • 2017-09-01
  • 2012-05-11
  • 2012-10-23
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 2021-06-18
  • 2016-12-18
  • 1970-01-01
相关资源
最近更新 更多