主页

索引

模块索引

搜索页面

RESTful 风格的系统六个特征

  1. 服务端与客户端分离(Client-Server):

    分离开用户界面和数据存储所关注的逻辑,有助于提高用户界面跨平台的可移植性。
    
    不分离的情况如: 原始的jsp, php,服务代码与html混在一起
    风水轮流转:
    由于前端的日渐强势,开始出现前端代码反过来驱动服务端进行渲染的 SSR 技术
    
  2. 无状态(Stateless):

    这是 REST 的一条关键原则
    
    REST 希望服务器能不负责维护状态,
    每一次从客户端发送的请求中,应该包括所有必要的上下文信息,会话信息也由客户端保存维护,
    服务器端依据客户端传递的状态信息来进行业务处理,并且驱动整个应用的状态变迁。
    
    服务端无状态可以在分布式环境中获得很高价值的好处。
    
    注: 越复杂、越大型的系统越难达到此标准。
      大型系统的上下文状态数量太大,可能客户端在发送请求时,无法全部囊括系统里所有必要的上下文信息。
    
  3. 可缓存(Cacheability):

    无状态服务,虽然提升了系统的可见性、可靠性和可伸缩性,但也降低了系统的网络性。
      即: 无状态的服务则可能会需要多个请求,或者在请求中带有冗余的信息。
    为缓解这矛盾,REST 希望软件系统能像万维网一样,客户端和中间的通讯传递者(代理)可将部分服务端的应答缓存
    
    运作良好的缓存机制可以减少客户端、服务器之间的交互,甚至有些场景中可以完全避免交互,这就进一步提高了性能
    
  4. 分层系统(Layered System):

    客户端一般不需要知道是否直接连接到了最终的服务器,或者是连接到路径上的中间服务器。
    中间服务器可以通过负载均衡和共享缓存的机制,提高系统的可扩展性,这样也便于缓存、伸缩和安全策略的部署。
    
  5. 统一接口(Uniform Interface):

    REST 希望开发者面向资源编程,
      希望软件系统设计的重点放在抽象系统该有哪些资源上,而不是抽象系统该有哪些行为(服务)上。
    
    统一接口也是 REST 最容易陷入争论的地方,
      基于网络的软件系统,到底是面向资源更好,还是面向服务更合适,
      这件事情在很长的时间里恐怕都不会有个定论,也许永远都没有。
    但是,有一个已经基本清晰的结论是:面向资源编程的抽象程度通常更高。
    
    坏处是往往距离人类的思维方式更远
    好处是往往通用程度会更好。
    
    举例:
      后台管理上的登录、注销功能
    说明:
      面向服务的概念: 登录=>login、注销=>logout
      面向资源的概念:
          设定一个Session 资源
          登录=> PUT Session
          注销=> DELETE Session
    
    要在架构设计中合理恰当地利用统一接口,Fielding 给出了三个建议:
      第一,系统要能做到每次请求中都包含资源的 ID,所有操作均通过资源 ID 来进行;
      第二,每个资源都应该是自描述的消息;
      第三,通过「超文本」来驱动应用状态的转移。
    
  6. 按需代码(Code-On-Demand):

    被 Fielding 列为了一条可选原则
      原因其实并非是它特别难以达到,更多是出于必要性和性价比的实际考虑。
    
    按需代码是指任何按照客户端(如浏览器)的请求,将可执行的软件程序从服务器发送到客户端的技术。
    
    例子:
    以前的 Java Applet 技术、今天的 WebAssembly 等都属于典型的按需代码,
    蕴含着具体执行逻辑的代码存放在了服务端,
    只有当客户端请求了某个 Java Applet 之后,
    代码才会被传输并在客户端机器中运行,结束后通常也会随即在客户端中被销毁掉。
    

主页

索引

模块索引

搜索页面