Web前后端交互

devtools/2024/10/20 6:26:51/

前端与后端之间的交互是Web应用程序中至关重要的组成部分,它们通过一系列技术和协议进行数据交换,以实现用户界面与服务器端业务逻辑及数据存储的协同工作。以下是一些常见的交互方式:

### 1. HTTP请求(主要包括AJAX、Fetch API)
- AJAX(Asynchronous JavaScript and XML):前端使用JavaScript(通常借助库如jQuery、axios等)创建异步HTTP请求,无需刷新整个页面即可从后端获取数据或发送数据。AJAX允许在后台与服务器交换数据,使得网页能够局部更新,提供更流畅的用户体验。

示例(使用fetch API):
```javascript

javascript">fetch('/api/data').then(response => response.json()).then(data => {// 更新DOM或执行其他操作}).catch(error => console.error('Error:', error));


```

- Fetch API:现代浏览器原生提供的更强大、更灵活的请求API,用于替代传统的XHR(XMLHttpRequest)。Fetch API同样支持异步操作,并且可以更好地处理Promise,方便进行错误处理和中间件集成。

### 2. 表单提交
- GET请求:通过HTML表单提交数据时,浏览器默认使用GET方法。表单数据被编码为查询字符串附加在URL后面,适合于简单数据提交或搜索请求。

```html

<form action="/search" method="get"><input type="text" name="query" /><button type="submit">Search</button>
</form>


```

- POST请求:对于包含敏感信息或大量数据的表单提交,通常使用POST方法。数据以键值对的形式隐藏在请求正文中,不显示在URL上。

```html

<form action="/submit" method="post"><!-- 输入字段 --><button type="submit">Submit</button>
</form>


```

### 3. RESTful API
- REST(Representational State Transfer):一种基于HTTP协议的设计风格,用于定义客户端与服务器之间的交互。前端通过发送HTTP动词(GET、POST、PUT、DELETE等)至特定的URL(资源标识符)来操作资源。示例(使用fetch API):
```javascript

javascript">// POST请求创建新资源
fetch('/api/users', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({username: 'newuser',email: 'newuser@example.com'})
});// GET请求获取资源列表
fetch('/api/users').then(response => response.json()).then(users => {// 处理返回的用户列表});


```

### 4. WebSocket
- WebSocket:提供全双工、基于TCP的通信协议,允许前端与后端建立持久的、双向的实时通信通道。一旦建立连接,双方可以在任何时候主动发送数据,无需反复发起HTTP请求。```javascript

javascript">const socket = new WebSocket('ws://example.com/ws');socket.addEventListener('open', function (event) {socket.send('Hello Server!');
});socket.addEventListener('message', function (event) {console.log('Message from server:', event.data);
});


```

### 5. Server-Sent Events (SSE)
- EventSource:浏览器原生支持的一种轻量级的单向数据推送技术。前端创建一个`EventSource`对象,连接到服务器提供的SSE endpoint,服务器随后可以持续向客户端推送事件数据。

```javascript

javascript">const source = new EventSource('/api/stream');
source.onmessage = function(event) {console.log('Received data:', event.data);
};


```

### 6. GraphQL
- GraphQL:一种用于API的查询语言,允许客户端精确地描述所需数据,而后端返回匹配结构的数据。前端通过POST请求发送GraphQL查询到指定的API端点。

```javascript

javascript">const query = `query {user(id: "123") {nameemailposts {titlecontent}}}
`;fetch('/graphql', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ query })
}).then(response => response.json()).then(data => {// 处理返回的GraphQL响应数据});


```

### 共同要点:

- 接口定义:前端与后端通常会约定一套API接口规范(如OpenAPI、Swagger等),明确请求路径、HTTP方法、请求/响应数据格式(如JSON)、错误处理等,以确保双方对接顺畅。
- 数据交换格式:JSON是最常见的数据交换格式,因其简洁、易于解析且与JavaScript无缝集成。其他格式如XML、protobuf、MsgPack等在特定场景下也可能被使用。
- 认证与授权:交互过程中可能涉及身份验证(如Bearer token、OAuth、JWT等)和权限控制(如RBAC、ACL),确保数据安全。

前端与后端通过上述技术与协议进行交互,实现数据请求、提交、实时更新等功能,共同构建功能完备、响应迅速的Web应用程序。


http://www.ppmy.cn/devtools/27373.html

相关文章

flutter开发实战-混淆minifyEnabled及shrinkResources

flutter开发实战-混淆minifyEnabled及shrinkResources 最近开发中&#xff0c;出现了在Debug模式下完全正常&#xff0c;打包build后出现插件代码调用提示未实现。 No implementation found for method login on channel app_plugin 经过查找发现在build apk时候出现了混淆的问…

网络通信基础

网络基本的概念: ip地址&#xff1a;标志网络上设备当前的位置 端口号&#xff1a;用来指定一个特定的应用程序 认识协议&#xff1a;在网络通信中&#xff0c;信息交互需要遵守的协议 OSI模型 (Open System Interconnection&#xff0c;开放系统互连) OSI模型只是在逻辑上把网…

[Java、Android面试]_24_Compose为什么绘制要比XML快?(高频问答)

欢迎查看合集&#xff1a; Java、Android面试高频系列文章合集 本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&#xff0c;每天整理一点&am…

C# 实现格式化文本导入到Excel

目录 需求 Excel 的文本文件导入功能 范例运行环境 配置Office DCOM 实现 组件库引入 OpenTextToExcelFile 代码 调用 小结 需求 在一些导入功能里&#xff0c;甲方经常会给我们一些格式化的文本&#xff0c;类似 CSV 那样的纯文本。比如有关质量监督的标准文件&…

数据结构四:线性表之带头结点的单向循环链表的设计

前面两篇介绍了线性表的顺序和链式存储结构&#xff0c;其中链式存储结构为单向链表&#xff08;即一个方向的有限长度、不循环的链表&#xff09;&#xff0c;对于单链表&#xff0c;由于每个节点只存储了向后的结点的地址&#xff0c;到了尾巴结点就停止了向后链的操作。也就…

乾元通渠道商中标天津某区自然灾害应急能力提升项目

近日&#xff0c;乾元通渠道商中标天津某区自然灾害应急能力提升项目&#xff0c;乾元通作为设备厂家&#xff0c;为项目提供通信指挥类装备&#xff08;多链路聚合设备&#xff09; QYT-X1 。 随着万亿国债项目的全面铺开&#xff0c; 青岛乾元通数码科技有限公司 作为国家应急…

【汇编】指令系统的寻址方式

指令系统的寻址方式 指令系统的寻址方式是指计算机处理器在执行指令时&#xff0c;如何定位并访问指令中操作数所在的内存地址或寄存器&#xff08;寻址方式&#xff1a;获取操作数所在地址的方法&#xff09; 指令中的操作数 通常一条指令包含操作符和操作数&#xff0c;操…

QSqlTableModel的canFetchMore、fetchMore效率太低,需替换

问题描述&#xff1a;SQLITE数据库&#xff0c;使用QSqlTableModel获取行数&#xff0c;调用函数rowCount()&#xff0c;仅能获取256行&#xff0c;故使用下面代码获取实际行数&#xff1a; while(m_model->canFetchMore()){m_model->fetchMore();} 但实际使用发现效率…