REST架构
rest不是一种技术,也不是一种具体的规范,是一种软件架构风格。
rest是所有web应用应该遵守的架构设计指导原则,但是不用也可以实现应用功能。
架构约束:
1.客户端→服务器
2.无状态
3.缓存
4. 统一接口
5.分层系统
6. 按需代码
rest的五个关键词:
1.资源
URI既是地址也是资源的名称.
感觉资源和Java中的对象很像,以下是讯飞星火大模型给出的区别:
web中的资源和Java中的对象在功能用途、生命周期以及访问方式等方面有所不同。具体分析如下:
1.功能用途
Web资源:可以是服务器上存储的任何文件或数据,如HTML文件、图片、脚本等,主要用于构建和服务于Web页面的内容和功能。
Java对象:是编程中的一个基本单元,其实例被用来存储数据并执行特定的业务逻辑。
2.生命周期
Web资源:通常由Web服务器管理,其生命周期与Web服务器的运行状态相关联。
Java对象:生命周期受程序控制,可以在需要时创建,完成任务后销毁。
3.访问方式
Web资源:可以通过HTTP请求直接访问,例如通过浏览器输入URL获取网页内容。
Java对象:主要通过编程语言内部的调用和引用来访问。
4.更新机制
Web资源:更新通常涉及文件的重新上传和服务器配置的修改。
Java对象:更新是通过代码的修订和重新部署来实现的。
总的来说,Web资源和Java对象虽然都是计算机系统中用于处理数据和功能的实体,但它们在概念、使用场景以及管理和访问方式上有显著的不同。Web资源侧重于数据的表示和传输,而Java对象则强调在程序逻辑中的作用和行为。
2.资源的表述
资源在某个特定时刻的状态的描述。格式可以为HTML、XML、JSON、文本等。
3.状态转移
在客户端和服务器之间转移代表资源状态的表述。通过转移和操作资源的表述间接实现操作资源的目的。
4.统一接口
rest必须通过统一的接口来对资源执行各种操作,每个资源只能执行一组有限的操作。
5. 超文本驱动
又名将超媒体作为应用状态的引擎。超媒体中不仅包含数据还包含状态迁移的语义。
rest结构的特点:
- 面向资源
rest架构是以资源为核心展开的。 - 可寻址
每个资源都有自己的地址 - 连通性
尽量通过超链接将资源关联起来 - 无状态
- 统一接口
- 超文本驱动
选择rest架构的好处
- 简单
- 可伸缩性
- 松耦合
缺点:
1.资源的复杂性,很难将资源进行划分。
2.业务很复杂,有些操作不能对应到PUT、GET、DELETE、POST上面
3. 有的客户端不支持DELETE、PUT等请求。
RESTful API:REST架构风格在WEB领域的一种具体实现方式
● restful api使用HTTP方法来表示对资源的操作
get:获取资源、post:新增资源、put:更新资源、delete:删除资源
● 使用HTTP状态码表示操作结果的示例(仅展示前端,以"手机"资源为例)
post–新增信息
$.ajax({
url: "/phones",
type: "POST",
contentType: "application/json",
data: JSON.stringify({
name: "手机",
description: "苹果牌"
}),
dataType: "json",
success: function(data) {
console.log("创建成功:", data);
},
error: function(xhr, status, error) {
console.error("创建手机资源失败:", error);
}
});
get–获取信息
$.ajax({
url: "/phones/1",
type: "GET",
dataType: "json",
success: function(data) {
console.log("指定手机资源:", data);
},
error: function(xhr, status, error) {
console.error("获取指定手机资源失败:", error);
}
});
put:更新信息
$.ajax({
url: "/phones/1",
type: "PUT",
contentType: "application/json",
data: JSON.stringify({
name: "手机1",
description: "更新后的苹果手机"
}),
dataType: "json",
success: function(data) {
console.log("更新成功:", data);
},
error: function(xhr, status, error) {
console.error("更新失败:", error);
}
});
案例四:delete删除信息
$.ajax({
url: "/phones/1",
type: "DELETE",
dataType: "json",
success: function(data) {
console.log("删除手机资源成功:", data);
},
error: function(xhr, status, error) {
console.error("删除手机资源失败:", error);
}
});