关于 REST API,你了解多少?

什么是 REST API

REST 是 REpresentational State Transfer 的缩写,是分布式超媒体系统的架构风格。Roy Fielding 于 2000 年在他的著名论文中首次提出了这一点。从那时起,它已成为构建基于 Web 的 API(应用程序编程接口)的最广泛使用的方法之一。
REST 不是一种协议或标准,而是一种架构风格。在开发阶段,API 开发人员可以通过多种方式实现 REST。符合REST架构风格的Web API(或Web Service)称为 REST API(或RESTful API)。

REST API 风格

REST(Representational State Transfer)是一种基于网络的软件架构风格,它的设计原则包括以下六个方面:

  1. 统一接口(Uniform Interface):定义了一组通用的接口约束,包括资源的标识、资源的操作和资源的表示。这样可以使不同的组件之间更加松耦合,提高系统的可扩展性和可维护性。

  2. 客户端-服务器(Client-Server):将应用程序分为客户端和服务器两个部分,它们之间通过接口进行通信。这种分离可以提高系统的可扩展性和简化组件的开发。

  3. 无状态(Stateless):服务器不会保存客户端的状态信息,每个请求都是独立的。这样可以减少服务器的负担,提高系统的可伸缩性。

  4. 缓存(Cache):客户端可以缓存服务器的响应,以减少网络传输和提高性能。服务器可以通过设置响应头来控制缓存的行为。

  5. 分层系统(Layered System):将系统分为多个层次,每个层次都有特定的功能和责任。这样可以提高系统的可扩展性和安全性。

  6. 按需代码(Code on Demand):服务器可以向客户端传输可执行代码,以扩展客户端的功能。这种方式在 REST 中并不是必须的,但是它可以提高系统的灵活性和可扩展性。

为什么需要 REST API

REST API是在Web应用程序的发展过程中产生的。在Web应用程序的早期阶段,应用程序之间的通信主要是通过SOAP(Simple Object Access Protocol)和XML-RPC(XML Remote Procedure Call)等协议来实现的。这些协议使用XML格式来传输数据,但它们的设计复杂、繁琐,不易于使用和扩展。

在这种情况下,Roy Fielding在2000年提出了REST(Representational State Transfer)的概念,作为一种新的Web应用程序架构风格。REST使用HTTP协议作为通信协议,使用URI(Uniform Resource Identifier)来标识资源,使用HTTP请求方法(如GET、POST、PUT、DELETE等)来操作资源,并使用HTTP状态码来表示操作结果。REST的设计风格简单、灵活、可扩展,因此在Web应用程序中得到了广泛的应用。

随着Web应用程序的不断发展,REST API已经成为现代Web应用程序的重要组成部分。它可以提高应用程序的互操作性、灵活性和可伸缩性,从而为用户提供更好的体验。

其他

REST API != HTTP
Roy Fielding 在他的论文中没有提到任何实现方式——包括任何协议偏好。到目前为止,凡是满足 REST 原则的都是 RESTful

总结

简而言之,在 REST 架构风格中,数据和功能被视为资源,并使用统一资源标识符 (URI) 进行访问。
通过使用一组简单的、定义良好的操作对资源进行操作。此外,资源必须与其表示形式解耦,以便客户机能够以各种格式访问内容,如 HTML、 XML、纯文本、 PDF、 JPEG、 JSON 等。
客户端和服务端要使用标准化的接口和协议来交换资源,通常是 HTTP,但 REST 并不强制要求它。
并且可以控制缓存、检测传输错误以及身份验证或访问控制等等。最重要的是,与服务器的每次交互都必须是无状态的。所有这些原则都有助于 RESTful 应用程序变得简单、轻量级和快速。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/411829.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

保障工作效率!实时监管员工工作微信

随着移动办公的普及,员工使用微信进行工作沟通已成为常态。为了实时监管员工工作微信,企业可以通过个微管理系统来提高效率并确保合规: 给员工分配微信子账号 企业管理者可以直接在系统上给员工分配子账号,并轻松查看子账号的工…

leetcode hot100 买卖股票的最佳时机二

注意,本题是针对股票可以进行多次交易,但是下次买入的时候必须保证上次买入的已经卖出才可以。 动态规划可以解决整个股票买卖系列问题。 dp数组含义: dp[i][0]表示第i天不持有股票的最大现金 dp[i][1]表示第i天持有股票的最大现金 递归公…

ElasticSearch之bool多条件查询

写在前面 在实际的业务场景中,不可能只是简单的单值查询 ,更多的是n个条件的综合查询,就像下面的搜索: 针对这种场景我们就需要依赖于bool查询了,本文就一起来看下这部分的内容。 1:bool查询介绍 bool查…

在github的README.md中插入视频;在github的README.md中添加gif演示动画

最近需要再github中上传项目的源代码,应导师的要求,需要再README中加入对实验视频的展示,但是github的README.md其实就是一个markdown文件,据我的理解这个文件里应该无法直接插入视频吧?(如果后续有办法直接…

python中的类与对象(2)

目录 一. 类的基本语法 二. 类属性的应用场景 三. 类与类之间的依赖关系 (1)依赖关系 (2)关联关系 (3)组合关系 四. 类的继承 一. 类的基本语法 先看一段最简单的代码: class Dog():d_…

Python Web开发记录 Day3:BootStrap

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 三、BootStrap1、BootStrap-初体验2、BootStrap…

Inno setup 打包jar包+前端dist+mysql+navicat等应用文件操作

目录 一、 使用exe4j将后端jar包打包成exe应用文件 1.创建一个新的工程 2.选择一个你想要存放的路径 3.进入配置界面 4.选择jar转换exe模式 5.自定义名字和选择输出路径 6.配置初始化 7.配置java环境 8.测试运行结果 二、Inno 打包应用文件exe 1.新建一个工程文件 2…

前端取图片相同颜色作为遮罩或者背景

需求 遮罩层取图片相同/相似的颜色作为遮罩 效果 做法 npm库 grade.js 所提供图像中前 2 个主色生成的互补渐变https://github.com/benhowdle89/grade COLOR THIEF 只需使用Javascript即可从图像中获取调色板。 https://github.com/lokesh/color-thief https://lokeshd…

向导式堆栈管理器Dockge

经过申诉,目前博客的几个域名都恢复了,时间也延长到了 2033 年,后面还会不会出问题,老苏就不知道了 什么是 Dockge ? Dockge 是一款时髦的、易于使用的、响应式的、自托管的 docker-compose.yaml 向导式堆栈管理器,可…

python使用winio控制x86工控机的gpio

视频讲解 https://www.bilibili.com/video/BV1Nu4m1w7iv/?vd_source5ba34935b7845cd15c65ef62c64ba82f pywinio库 https://pypi.org/project/pywinio/ 安装库 pip install pywinio寄存器地址 测试代码 import pywinio winio get_winio() # 设置排针2输出1,0x40是bit6置…

SSMBUG之 url +

1. Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured. 经查, 书写一切正常. 注意到此时yml文件的图标是一个红色的Y而不是绿色的spring , 推测没有正确加载. 重新创建项目, 所有东西拷贝一份便恢复正常…

04|MySQL事务及ACID

1 事务 事务是一组操作要么全部成功,要么全部失败,目的是为了保证数据最终的一致性。 2 事务的ACID属性 2.1 原子性(Atomicity) 当前事务的操作要么同时成功,要么同时失败。原子性由 undo log日志来实现。 2.2 一致性(Consistent) 使用…

爬虫入门四(抽屉半自动点赞、xpath使用、动作链、打码平台、scrapy框架介绍与安装及创建项目)

文章目录 一、抽屉半自动点赞二、xpath的使用三、动作链四、打码平台介绍超级鹰打码基本测试 五、自动登录超级鹰六、scrapy框架介绍安装创建爬虫项目 一、抽屉半自动点赞 登录抽屉账号保存cookiesimport timeimport jsonfrom selenium import webdriverfrom selenium.webdrive…

javascript给对象添加迭代器

迭代器是啥就自行百度了 为啥for…of可以遍历数组,为啥不能遍历对象,就是for…of会调用迭代器,而数组是内置了迭代器了,而对象没有内置,所以直接使用for…of遍历对象会报错,因此只用在对象的原型上面自定义…

复旦EMBA徐能:攻克新能源+关键技术,十年如一日拓荒前行

乘着“双碳”战略的东风,我国新能源产业迎来了重大发展机遇。在低碳绿色发展日渐成为全球共识的背景下,新能源产业正在发生什么变化,未来的发展将呈现什么格局?本期《同学同行》让我们一起走进复旦大学EMBA 2022级2班同学徐能和他…

Linux服务器节点性能问题排查和优化思路

Linux服务器节点性能问题排查和优化思路 1. atop安装2. 整体思路2.1 如果现场存在/能复现2.2 如果现场不能复现: 3. 高负载问题排查与应对3.1. hung task 问题3.2. 底层硬盘/文件系统无法写入3.3. IO性能不足导致的运行缓慢3.4. CPU 性能不足导致的运行缓慢&#xf…

今天面了个字节拿 38K 出来的测试,让我见识到了基础的天花板

最近内卷严重,各种跳槽裁员,相信很多小伙伴也在准备金九银十的面试计划。 作为一个入职5年的老人家,目前工资比较乐观,但是我还是会选择跳槽,因为感觉在一个舒适圈待久了,人过得太过安逸,晋升涨…

wcf 简单实践 数据绑定 数据更新ui

1.概要 2.代码 2.1 xaml <Window x:Class"WpfApp3.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expr…

SpringIOC之support模块StaticMessageSource

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

react useRef用法

1&#xff0c;保存变量永远不丢失 import React, { useState,useRef } from react export default function App() { const [count,setcount] useState(0) var mycount useRef(0)//保存变量永远不丢失--useRef用的是闭包原理 return( <div> <button onClick{()>…