REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统.
1,一个原则是分层系统,这表示组件无法了解它与之交互的中间层以外的组件。通过将系统知识限制在单个层,可以限制整个系统的复杂性,促进了底层的独立性。
2,另一个重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。
一个Web应用程序协议的“状态”在通常指的是为两个相互关联的用户交互操作保留的某种公共信息,它们常常被用来存储工作流或用户状态信息等数据。这些信息可以被指定不同的作用域如page,request,session或全局作用域,而存储他们的责任也同样可以由Client端或Server端负责。虽然存储状态为企业软件开发带来了诸多便利,但是它也给分布式系统的其他方面带来了许多限制,比如在负载均衡方面,在有状态的模式下,一个用户的请求必须被提交到保存有其相关状态信息的服务器上,否则这些请求可能无法被理解,这也就意味着在此模式下服务器端无法对用户请求进行自由调度。于此相关的另一个问题是容错性,倘若保有用户信息的服务器宕机,那么该用户最近的所有交互操作将无法被透明地移送至备用服务器上,除非该服务器时刻与主服务器同步全部用户的状态信息。此外,由于HTTP本身不是一个有状态的协议,开发人员必须通过模拟实现状态的钝化与激活等。于是为了克服这些不足,无状态(Statelessness)架构风格属性受到了广泛关注。
RESTful架构对于state的两个不同的解释: 应用状态(Application State)和资源状态(Resource State)。应用状态指的是与某一特定请求相关的状态信息,而资源状态则反映了某一存储在服务器端资源在某一时刻的特定状态,该状态不会因为用户请求而改变,任何用户在同一时刻对该资源的请求都会获得这一状态的表现(Representation)。
RESTful架构要求服务器端不保有任何与特定HTTP请求相关的资源,所以应用状态必须由请求方在请求过程中提供
传递一个session ID是违背REST架构风格而传递user credentials却不是?
其实有状态和无状态与请求本身没有多大关联,重要的是状态信息是由请求方还是响应方负责保存。在Session ID可以被认为是一个用来标识某一会话状态的Key,将其传递给服务器端意味着这样一个请求:“请帮我取出这个状态信息”,也就是说这个请求假设响应方保有着状态信息。由于与某一特定请求相关的状态属于应用状态,而RESTful架构要求任何此类状态由请求方负责提供,所以传递Session ID被认为是unRESTful的做法。反过来,user credential作为一种应用状态,是被期望由请求方提供的,所以在请求中传递user credentials是符合RESTful架构规范的。
参考http://www.cnblogs.com/Nyyrikki/archive/2009/06/16/1504191.html
相关推荐
1. 无状态(Stateless):RESTful 架构的关键特性是无状态,意思是服务器不保存任何关于客户端的信息,每个请求都包含了所有必要的信息。 2. 可缓存(Cacheable):RESTful 架构支持缓存,这可以提高系统的性能。 3....
3. **无状态(Stateless)**:每次客户端请求都应该包含处理该请求所需的所有信息。服务器不保存任何会话状态,使得服务器能更轻松地进行横向扩展。 4. **缓存(Cache)**:REST允许服务端响应可被客户端缓存,提高...
4. **无状态(Stateless)**:每次客户端请求都包含处理请求所需的所有信息,服务器不保存任何会话状态。这使得服务器更易于扩展,因为它不必处理跨请求的数据。 5. **缓存(Cache)**:RESTful API允许客户端缓存...
3. **无状态(Stateless)**:每次请求包含处理请求所需的所有信息,服务器不保存任何会话状态。 4. **统一接口(Uniform Interface)**:简化架构,提高可互操作性。 **cxf_demo**是一个使用Apache CXF实现的...
3. **无状态(Stateless)**:在RESTful设计中,每一次请求都应该包含处理该请求所需的所有信息。这意味着服务器不会保存任何客户端状态信息,从而降低了系统复杂度,提高了可伸缩性。 4. **分层系统(Layered System)*...
4. **无状态(Stateless)**:每次请求包含所有必要的信息,服务器不保存任何客户端状态。 在这个SSM RESTful实例中,我们可能会有以下接口: 1. GET /users:获取所有用户信息。 2. POST /users:创建新用户。 3....
3. **无状态通信(Stateless Communication):** 每次请求都应该包含理解该请求所需的所有信息,服务器不应该存储任何有关客户端的状态。 4. **超媒体作为应用程序状态引擎(HATEOAS):** 客户端通过服务器返回的...
为了更好地理解JAX-RS的作用,我们需要深入了解RESTful架构的原则。以下是一些关键点: 1. **Addressability**:每个资源都应该有一个唯一的URL,以便可以独立地访问和管理。 2. **Uniform Interface**:REST架构...
3. 无状态(Stateless):服务器不会保存客户端的状态,这使得服务器更容易扩展,并提高了交互的可见性。 4. 可缓存(Cacheable):响应必须被明确定义为可缓存或不可缓存,以改善客户端-服务器之间的交互。 5. 分层...
3. 所有的操作都是无状态的 REST 架构风格遵循 CRUD 原则,该原则告诉我们对于资源(包括网络资源)只需要四种行为:创建、获取、更新和删除就可以完成相关的操作和处理。您可以通过统一资源标识符(Universal ...
- 无状态(Stateless):服务器不会存储任何客户端的上下文信息,每次请求都包含了执行所需的所有信息。 - 缓存(Cache):通过允许数据缓存来改善客户端与服务器之间的交互,减少延迟,提高性能。 - 统一接口...
4. **无状态(Stateless)**:每次请求都应该包含处理请求所需的所有信息,服务器不保存任何会话状态。这样可以提高可伸缩性和性能。 5. **缓存(Cache)**:RESTful允许使用HTTP缓存机制,减少不必要的网络通信,...
首先,无状态登录(Stateless Login)是一种设计模式,它遵循RESTful API的原则,其中服务器不存储任何关于客户端会话的状态。这意味着每次客户端请求都需要包含所有必要的信息,以便服务器能够验证用户的身份。这种...
1. **无状态(Stateless)**: 每次请求都包含处理请求所需的所有信息,服务器不保存任何会话状态。这使得服务器可以更易于扩展,因为每个请求都可以独立处理,不需要依赖于之前的请求。 2. **缓存(Cache)**: 允许...
3. **无状态(Stateless)**:每个请求都包含所有必要的信息,服务器不需要保存任何客户端会话状态。这意味着服务器可以快速地处理请求,不需要存储额外的上下文信息,降低了系统的复杂性。 4. **可缓存(Cacheable...
首先,我们要理解RESTful服务中的核心原则之一是无状态(Stateless)。这意味着每个客户端请求都包含处理该请求所需的所有信息,服务器不保存任何会话状态。这与传统的基于HTTP session的事务处理有所不同,后者通常...