首页 > 其他分享 >深入了解REST约束,优化你的web应用

深入了解REST约束,优化你的web应用

时间:2023-06-15 15:07:33浏览次数:50  
标签:web 可以 系统 REST API 服务器 优化 客户端

REST 是 Representational State Transfer 的缩写,是 Roy Fielding 于 2000 年提出的一种通过 HTTP 设计松散耦合应用程序的架构风格,其主要应用于 Web 服务的开发。REST 不是强制性的,可以不遵守,但它提供了一种高级设计指南。

架构约束

REST 定义了六种架构约束来构成 Web 服务。RESTful API 是指使用 HTTP 并遵循 REST 原则的 API。这些架构约束有以下作用:

  • 提高系统的可伸缩性和可靠性:通过客户端-服务器分离、无状态和分层系统等架构约束,使系统更容易扩展和维护,提高系统的可靠性;
  • 提高系统的性能:使用缓存可以减少对服务器资源的消耗,从而提高系统的性能和可伸缩性;
  • 提高系统的安全性和隔离性:分层系统可以提供更好的安全性和隔离性,使系统更加安全可靠;
  • 降低开发和维护成本:通过统一接口可以使开发人员更加容易地理解和使用 API,同时按需代码可以减少服务器端的负载,提高了客户端的灵活性和可扩展性。

一个 RESTful API,需要满足以下六大架构约束:

  1. 统一接口
  2. CS (客户端-服务器分离)
  3. 无状态
  4. 缓存
  5. 系统分层
  6. 按需编码(可选)

接下来我们来详细看看这六大架构约束。

CS(客户端-服务器分离)

这是 REST 风格的基本原则之一:将客户端和服务器之间分离,使其能够分别进行演化和扩展,提高了系统的可伸缩性和可靠性。通过客户端-服务器分离,客户端和服务器可以分别由不同的开发团队进行开发和维护,并且可以使客户端和服务器之间的协议更加简单和清晰。

无状态

服务器不应存储客户端的状态信息。每个请求都应该包含足够的信息以便服务器可以处理请求,这样可以使服务器更容易扩展,提高系统的可伸缩性和可靠性。无状态的设计可以降低系统的复杂度,并且可以减少对服务器资源的消耗。

缓存

服务器应该尽可能地使用缓存来提高性能和可扩展性。客户端可以缓存服务器返回的响应,以减少对服务器的请求;服务器也可以缓存请求的响应,以减少对后端系统的请求。缓存可以减少网络带宽的使用,提高系统的性能和可伸缩性。

统一接口

REST 使用一组标准接口来实现客户端和服务器之间的通信。这些接口包括资源的标识、资源的表示、自描述消息、超媒体作为应用程序状态的引擎等。通过使用这些标准接口,REST 可以使客户端和服务器之间的通信更加简单和可靠。统一接口可以使开发人员更加容易地理解和使用 API。

分层系统

REST 允许系统被分成多个层次,每个层次都可以有自己的功能。这样可以提高系统的可伸缩性和可靠性,同时也提供了更好的安全性和隔离性。分层系统可以使开发人员更加容易地扩展和修改系统,也可以提高系统的可靠性和安全性。

按需代码(可选)

REST 可以通过向客户端传输可执行的代码(例如 JavaScript)来扩展客户端的功能。这样可以减少服务器端的负载,同时也提高了客户端的灵活性和可扩展性。按需代码可以使开发人员更加容易地扩展和修改客户端功能。

最后需要注意的是,这些约束并不是死的,如果违反了一两个,也不影响称为 RESTful API,但不符合“真正的 RESTful”约束。

知识扩展:

了解更多 REST API 相关知识。

标签:web,可以,系统,REST,API,服务器,优化,客户端
From: https://blog.51cto.com/u_15964010/6492452

相关文章

  • C++ 中 switch 的性能优化
    问题有这样一段代码,编译器会傻傻地做多次compare来找到对应分支吗?#include<stdio.h>#include<stdlib.h>intfunc(inti){return(long)(&i)+i+rand();}inttest(intflag){ inti=0; switch(flag){ case0: i+=func(i); break; case1: i+=f......
  • asp.net WebUploader 分块上传
    ​IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag        客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续传......
  • JavaScript开发工具-WebStorm 2023 mac/win版
    WebStorm是一款由JetBrains开发的JavaScript开发工具,是专为JavaScript开发者设计的集成开发环境(IDE)。它提供了强大的功能和工具,能够帮助开发者更高效地编写、调试和维护JavaScript代码。→→↓↓载WebStorm2023mac/win版 WebStorm拥有一套丰富的功能,使得它成为JavaScript开......
  • 【SQL 优化器技术系列】谓词推导
    Oracle2005年出了一个30多页的小册子,《QueryOptimizationinOracleDatabase10gRelease2》,介绍了常见的优化器技术。我是做SQL执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。谓词推导(Transitivepredicategeneration)听上去高大上......
  • 【SQL 优化器技术系列】谓词下推和上拉
    Oracle2005年出了一个30多页的小册子,《QueryOptimizationinOracleDatabase10gRelease2》,介绍了常见的优化器技术。我是做SQL执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。一个复杂query里可能包含多个视图和子查询(下称语句块......
  • 【SQL 优化器技术系列】 外连接消除
    Oracle2005年出了一个30多页的小册子,《QueryOptimizationinOracleDatabase10gRelease2》,介绍了常见的优化器技术。我是做SQL执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。外连接消除就是将一个outerjoin转换成innerjoin。......
  • 测试类中启动web环境
    先在pom.xml文件中引入相关依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>然后定义测试类进行模拟: ......
  • 创建项目-空项目、java项目、web项目
    空项目(EmptyProject):空项目是一个完全空白的项目,没有任何默认的目录结构或配置文件。你可以根据需要自定义项目的结构和配置,适用于从头开始构建自己的项目。Java项目(JavaProject):Java项目是一个标准的Java应用程序项目,具有默认的目录结构和配置。它包含了源代码目......
  • 25 个在 Web 中嵌入图表的免费资源
    在Web中嵌入图形图表的技术越来越丰富,我们可以选择JavaScript库,CSS,Flash,Silverlight,PHP库,服务器端的组件,也可以选择GoogleChartAPI这样的Web服务。本文介绍了25个在Web中嵌入图形图表的免费资源。 JSCharts(基于JavaScript的图表生成工具)Protovis(可视化javaS......
  • 使用Node.js和WebHDFS REST API访问Hadoop HDFS数据
    可用服务以下是可用的服务集:1)文件和目录操作  1.1创建和写入文件:CREATE(HTTPPUT)  1.2附加到文件:APPEND(HTTPPOST)  1.3打开并读取文件:OPEN(HTTPGET)  1.4创建目录:MKDIRS(HTTPPUT)  1.5重命名文件/目录:RENAME(HTTPPUT)  1.6删除文件/目录:DELETE(HTTPDELETE) ......