• 产品经理技术脑:RESTful API


    ​RESTful架构,是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。

    REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。Fielding是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。

    Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。对这个词组的翻译是"表现层状态转化"。

    如果有架构成功符合了REST原则,则称它为RESTful架构。

    什么是RESTful架构

    理解Representational State Transfer词组是什么意思,就能明白RESTful是一种什么样的架构。

    Representational State Transfer即"表现层状态转化",完整表达是“资源表现层状态转化”

    • 资源

    资源指网络上的一个实体,或者说是网络上的一个具体信息。

    它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。可以用一个URI(统一资源标识符)指向它,每种资源对应一个特定的URI。

    要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。

    资源的例子

    ↘某用户的手机号码

    ↘某用户的个人信息

    ↘最多用户订购的GPRS套餐

    ↘两个产品之间的依赖关系

    ↘某用户可以办理的优惠套餐

    ↘某手机号码的潜在价值

    URI(统一资源标识符)的例子:

    ↘http://www.pexue.com/

    • 表现层(Representation)

    我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。"资源"是一种信息实体,它可以有多种外在表现形式。

    如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。

    • 状态转化(State Transfer)

    访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。互联网通信协议HTTP协议,是一个无状态协议。

    这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。

    客户端用到的手段是HTTP协议。具体来说是HTTP协议里的4个操作,GET、POST、PUT、DELETE。它们分别对应四种基本操作:

    ↘GET用来获取资源,

    ↘POST用来新建资源(也可以用于更新资源),

    ↘PUT用来更新资源,

    ↘DELETE用来删除资源。

    • GET,DELETE,PUT和POST的典型用法

    ↘GET

    获取表示

    变更时获取表示(缓存)

    200(OK) - 表示已在响应中发出

    204(无内容) - 资源有空表示

    301(Moved Permanently) - 资源的URI已被更新

    303(See Other) - 其他(如,负载均衡)

    304(not modified)- 资源未更改(缓存)

    400 (bad request)- 指代坏请求(如,参数错误)

    404 (not found)- 资源不存在

    406 (not acceptable)- 服务端不支持所需表示

    500 (internal server error)- 通用错误响应

    503 (Service Unavailable)- 服务端当前无法处理请求

    • POST使用服务端管理的(自动产生)的实例号创建资源

    创建子资源

    部分更新资源

    如果没有被修改,则不过更新资源(乐观锁)

    200(OK)- 如果现有资源已被更改

    201(created)- 如果新资源被创建

    202(accepted)- 已接受处理请求但尚未完成(异步处理)

    301(Moved Permanently)- 资源的URI被更新

    303(See Other)- 其他(如,负载均衡)

    400(bad request)- 指代坏请求

    404 (not found)- 资源不存在

    406 (not acceptable)- 服务端不支持所需表示

    409 (conflict)- 通用冲突

    412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)

    415 (unsupported media type)- 接受到的表示不受支持

    500 (internal server error)- 通用错误响应

    503 (Service Unavailable)- 服务当前无法处理请求

    • PUT

    用客户端管理的实例号创建一个资源

    通过替换的方式更新资源

    如果未被修改,则更新资源(乐观锁)

    200 (OK)- 如果已存在资源被更改

    201 (created)- 如果新资源被创建

    301(Moved Permanently)- 资源的URI已更改

    303 (See Other)- 其他(如,负载均衡)

    400 (bad request)- 指代坏请求

    404 (not found)- 资源不存在

    406 (not acceptable)- 服务端不支持所需表示

    409 (conflict)- 通用冲突

    412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)

    415 (unsupported media type)- 接受到的表示不受支持

    500 (internal server error)- 通用错误响应

    503 (Service Unavailable)- 服务当前无法处理请求

    • DELETE

    删除资源

    200 (OK)- 资源已被删除

    301 (Moved Permanently)- 资源的URI已更改

    303 (See Other)- 其他,如负载均衡

    400 (bad request)- 指代坏请求

    404 (not found)- 资源不存在

    409 (conflict)- 通用冲突

    500 (internal server error)- 通用错误响应

    503 (Service Unavailable)- 服务端当前无法处理请求

    RESTful架构特色

    符合RESTful标准的架构,应具备这些特征:

    • 资源

    资源总是以一定的格式来表现自己。文本用txt、html;图片用JPG、JPEG等等。而JSON是RESTful API中最常用的资源表现格式。

    • 统一接口

    对于业务数据的CRUD,RESTful 用HTTP方法与之对应。

    • URI(统一资源标识符)

    它可以唯一标识一个资源,要注意的是,URL(统一资源定位符)是一种URI,因为它可以唯一标志资源。但URL != URI。应该说URL 是URI的子集。因为URL使用路径来唯一标识资源,这只是唯一标识资源的一种方式。还可以用一个唯一编号来标识资源,如example.html.fuce2da23。只不过这种方式并不被广泛使用。总之,要在概念上对URL和URI有所区分。

    • 无状态

    无状态是指所有资源都可以用URI定位,而且这个定位与其他资源无关,不会因为其他资源的变动而变化。这里引入一个幂等性的概念:无论一个操作被执行一次还是多次,执行后的效果都相同。比如对某资源发送GET请求,如果访问一次和访问十次获得的数据一样,那么就说这个请求具有幂等性。

    • URL中只能有名词,不能出现动词

    因为在REST要求对资源的操作由HTTP 方法给出,而方法是由HTTP 请求报文头部给出的,自然不需要在URL中暴露操作方式。

  • 相关阅读:
    【网络编程】Linux网络编程基础与实战第二弹——Socket编程
    统一监听Vue组件报错
    网络层:控制平面
    性能测试-性能监控分析与调优(三)《实战》
    rnacos——用rust重新实现的nacos开源配置、注册中心服务
    操作系统02_进程管理_同步互斥信号量_PV操作_死锁---软考高级系统架构师007
    Qt 读写文件(QFile&QTextStream&QDataStream) 详解
    【数模/评价模型】层次分析
    ABAP面向对象
    LeetCode75——Day30
  • 原文地址:https://blog.csdn.net/weixin_42058609/article/details/126177231