RESTful API学习笔记

60 阅读3分钟

简介

目的

  • REST的目标是为了创建具有良好扩展性的分布式系统。

含义

  • 全称:状态表述转换
    1. 一组网页的网络(一个虚拟状态机)
    2. 在这些网页上,用户可以通过点击链接来前进(状态转换)
    3. 点击渲染的结果就是下一个网页(表示程序的下一个状态)被传输到用户那里并渲染好给用户使用

性质

  • 协议无关性
    • REST是一种架构风格(上层抽象),而不是规范或标准(底层设施)
    • REST需要使用规范、协议或标准(例如HTTP、JSON等)来实现这种架构

优势

  • 性能:通信简单高效

  • 分布式系统的特性:

    • 组件交互的可扩展性
    • 组件的可修改性
  • 可移植性:平台无关

  • 可靠性:无状态

  • 可视性:API系统外的中间组件(如代理、网关、缓存、日志系统)能够轻松理解并观察客户端和服务端之间的交互。


内容

约束

  1. 客户端 - 服务器(CS架构)

    • 不同的语言和平台
  2. 无状态

    • 无持久连接(无Session)
  3. 统一的资源接口和界面(API提供者/消费者标准必须完全相同)

    • 资源的标识
      • URI,不是URL,URL是网址
      • 资源/表述分离,格式可以不同
      • 媒体类型可以不同(xml格式、json格式……)
    • 通过表述来对资源进行操纵
      • 当客户端拥有资源表述(通常是资源的数据)时,客户端就有了充足的信息来对资源进行增删改查操作
    • 带有自我描述的信息
      • 源自REST的无状态性,即客户端进行请求时请求数据中必须携带具有自我描述性的信息,这样服务端才能知道怎么处理这个信息
    • 超媒体作为应用程序状态的引擎
      • HATEOAS,Hypermedia As The Engine Of Application State
      • 服务端返回给客户端的不只是数据,还包含了“下一步能做什么”的链接。
  4. 多层系统

    • REST适用于多层架构,层与层之间是互不干扰的,客户端也只能知道对外层
  5. 可缓存

    • 响应信息必须明确指出响应是否可被缓存
  6. 按需编码(可选)

    • 服务器可以扩展、定制客户端

Richardson 成熟度模型(Level3 是前提)

  • 用于评估RESTful API成熟度,分为一下四个层级
    • Level0:POX(Plain Old XML)沼泽,即API只是用了HTTP协议,其他都不符合RESTful API架构
    • Level1:资源,即API的每个资源都映射到了单独的URI,但是HTTP请求方法没有区别
    • Level2:动词,即API正确地使用了HTTP请求方法和HTTP状态代码
    • Level3:超媒体,使用了HATEOAS,即API会返回驱动应用程序的超链接

标准请求方法

  • GET:获取资源/集合资源
  • POST:添加资源,返回能获取到这个资源的URI,状态码201
  • 更新
    • PUT:替换资源,没有返回,状态码204
    • PATCH:部分更新资源,没有返回,状态码204
  • DELETE:删除资源,没有返回,状态码204