违反RESTfulness的行为关系到数据库

时间:2019-04-09 03:20:32

标签: rest

从我的角度来看,会话在存储在内存或数据库中时都违反了RESTfulness

如果会话存储在内存中,由于服务器不共享会话数据,因此很难像负载平衡那样扩展服务器。

同样,如果会话存储在数据库中,则当许多服务器同时进行查询时,数据库将超载。

我的问题与第二种情况有关。

很长时间以来,我一直认为服务器和数据库是不同的。


我的过去假设

当客户端向服务器请求特定数据时,服务器将这些数据存储在mysql或mongo等数据库中。

所以服务器不必关心客户端的状态,因为数据库可以完全控制客户端的状态。

服务器可以独立于客户端的请求,因为只要想知道客户端是谁,服务器都可以对数据库进行查询。


所以我的两个问题是

  1. 每当提及“ RESTful服务器独立于客户端的请求而已”时,“服务器”是否包括数据库?
  2. 如果是,并且存在与一对多关系相关联的User模型和Post模型,这是否还违反了RESTfulness?

我确信第二个问题没有道理,因为如果第二个问题的答案是正确的,那么RESTapi永远不会那么有用。

但是我无法理解数据库中的会话是否违反RESTfulness和User-Post没有违反Restfulness。

我认为他们两个都遵循相同的过程,即客户端-服务器-数据库。

我如何轻松理解此问题?

2 个答案:

答案 0 :(得分:2)

无状态通常指的是:执行HTTP请求的所有信息都包含在请求中。

其中一些含义是:

  • 我可以断开TCP套接字的连接并重新打开它,或者我可以保持TCP连接的打开状态,这没有什么区别。执行请求的所有信息都包含在请求中。
  • 对于幂等方法,我可以重新执行完全相同的请求,并得到与仅执行一次相同的状态。

换句话说

有更多关于无状态和HTTP的完整描述,但是重要的是这里的无状态并不意味着服务器根本不能具有任何状态。如果没有状态,大多数REST服务可能就没用了。

现在有一个会话是否违反REST主体的问题。我认为很难客观地陈述这两种方式。与您的问题有关的重要部分是,要实现RESTful,您需要一个资源概念,一个能够解决这些问题的概念以及在客户端和服务器之间转移状态的概念。 (还有更多组成REST服务的内容,但是这里有一些相关的内容)。

我不认为拥有身份验证手段可以阻止这种情况,无论通过Authorization标头还是Cookie标头进行身份验证都没有那么重要。

如果会话cookie和关联的会话数据开始以其他方式干扰此过程,则与会话相关的功能可能会违反REST主体,但我认为这通常是不正确的。

如果有很多文章说会话违反了REST,我认为没有任何真正的依据。有很多关于REST的垃圾描述。我确实认为使用Cookie进行身份验证可能出于其他原因是不好的。确实会带来安全隐患。

答案 1 :(得分:-1)

稳定服务器与数据库分开。 宁静的服务器(如果有这样的事情)仅仅是Web服务器。 REST只是一种方法论上的体系结构,可以通过HTTP将信息从服务器传递到客户端,反之亦然。