当前位置: 首页 > news >正文

Web 开发前端与后端 API 的交互

1. XMLHttpRequest (XHR)

简介
最早的浏览器原生 API,用于异步请求数据(如 AJAX)。
代码示例

const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data', true);
xhr.onload = function() {if (xhr.status === 200) {console.log(JSON.parse(xhr.responseText));}
};
xhr.send();

特点

  • 兼容性:支持所有浏览器(包括旧版 IE)。

  • 缺点:API 设计冗长,需手动处理状态和错误。

  • 用途:传统项目或需要兼容老浏览器时使用。


2. Fetch API

简介
现代浏览器原生提供的更简洁的 HTTP 请求 API,基于 Promise。
代码示例

fetch('https://api.example.com/data').then(response => {if (!response.ok) throw new Error('Network error');return response.json();}).then(data => console.log(data)).catch(error => console.error(error));

特点

  • 优点:语法简洁,支持 Promise,可配合 async/await

  • 缺点

    • 默认不会携带 Cookie(需配置 credentials: 'include')。

    • 不直接支持超时设置(需用 AbortController 实现)。

  • 用途:现代浏览器环境下的简单请求。


3. Axios

简介
基于 Promise 的第三方 HTTP 库,功能强大。
代码示例

axios.get('https://api.example.com/data', {params: { id: 1 },timeout: 5000
})
.then(response => console.log(response.data))
.catch(error => console.error(error));

特点

  • 优点

    • 支持请求/响应拦截器。

    • 自动转换 JSON 数据。

    • 浏览器和 Node.js 通用。

  • 缺点:需额外安装依赖。

  • 用途:企业级项目,需要复杂配置(如拦截器、取消请求等)。


4. WebSocket

简介
全双工通信协议,适用于实时交互(如聊天室、股票行情)。
代码示例

const socket = new WebSocket('wss://api.example.com/ws');
socket.onopen = () => socket.send('Hello Server!');
socket.onmessage = (event) => console.log(event.data);
socket.onclose = () => console.log('Connection closed');

特点

  • 优点:实时双向通信,低延迟。

  • 缺点:需后端支持 WebSocket,不适合普通 HTTP 请求。

  • 用途:实时推送场景(如在线游戏、即时通讯)。


5. GraphQL

简介
通过单一端点灵活查询数据,由客户端定义返回字段。
代码示例(使用 Apollo Client):

import { ApolloClient, gql } from '@apollo/client';const client = new ApolloClient({ uri: 'https://api.example.com/graphql' });client.query({query: gql`query GetUser($id: ID!) {user(id: $id) {nameemail}}`,variables: { id: 1 }
}).then(result => console.log(result.data));

特点

  • 优点:减少冗余数据传输,强类型(需搭配 Schema)。

  • 缺点:学习成本高,需后端支持 GraphQL。

  • 用途:复杂数据查询场景(如 CMS、社交网络)。


6. Server-Sent Events (SSE)

简介
服务端单向推送数据(如实时通知)。
代码示例

const eventSource = new EventSource('https://api.example.com/events');
eventSource.onmessage = (event) => console.log(event.data);
eventSource.onerror = () => eventSource.close();

特点

  • 优点:简单轻量,基于 HTTP 协议。

  • 缺点:仅支持服务端到客户端的单向通信。

  • 用途:实时通知(如新闻更新、日志流)。


7. JSONP(已淘汰)

简介
通过 <script> 标签跨域请求数据(仅限 GET)。
代码示例

function handleResponse(data) {console.log(data);
}
const script = document.createElement('script');
script.src = 'https://api.example.com/data?callback=handleResponse';
document.body.appendChild(script);

特点

  • 优点:兼容老浏览器,绕过跨域限制。

  • 缺点:不安全,仅支持 GET,已被 CORS 替代。

  • 用途:旧系统临时解决方案。


对比总结

方法协议方向实时性适用场景
XHRHTTP客户端→服务端传统 AJAX 请求
FetchHTTP客户端→服务端现代简单请求
AxiosHTTP客户端→服务端复杂企业级应用
WebSocketWS双向实时聊天、游戏
GraphQLHTTP客户端→服务端灵活数据查询
SSEHTTP服务端→客户端服务端推送通知
JSONPHTTP客户端→服务端旧浏览器跨域(已淘汰)

如何选择?

  1. 普通 REST API:优先用 Axios 或 Fetch

  2. 实时双向通信:选 WebSocket

  3. 服务端推送:用 SSE

  4. 复杂数据查询:考虑 GraphQL

  5. 兼容旧浏览器XHR 或 JSONP(不推荐新项目使用)。

http://www.dtcms.com/a/326183.html

相关文章:

  • golang 基础案例_01
  • 【MYSQL】MySQL中On duplicate key update
  • 台式机内存条安装方法
  • Docker中安装MySQL 5的详细过程
  • 算法讲解--水果成篮
  • GitHub的简单使用方法----(2)
  • Android中Activity销毁底层原理
  • AVS Video Converter视频转换与编辑工具深度评测
  • 基于OpenCV的实时美颜技术:从传统算法到深度学习融合实现
  • 光功率dBm为何是负数?一文详解
  • Effective C++ 条款35:考虑 virtual函数以外的其他选择
  • Spring源码解析 - SpringApplication run流程-prepareContext源码分析
  • MD5:理解MD5 / MD5核心特性 / MD5 在前端开发中的常见用途 / 在线生成MD5 / js-md5
  • Linux Docker 运行SQL Server
  • loading效果实现原理
  • Elasticsearch Node.js 客户端的安装
  • 第六十一章:AI 模型的“视频加速术”:Wan视频扩散模型优化
  • 简单清晰的讲解一下RNN神经网络
  • HarmonyOS 开发入门 第一章
  • 力扣面试150题--阶乘后的零,Pow(x,n)直线上最多的点
  • Win10电脑密码忘记如何进入操作系统
  • 基于AS32S601芯片的商业卫星光纤放大器(EDFA)抗单粒子效应解决方案研究
  • 前端组件库双雄对决:Bootstrap vs Element UI 完全指南
  • Speech Databases of Typical Children and Children with SLI 数据集解读
  • 飞轮储能和超级电容综合对比分析
  • LintCode第1181题-二叉树的直径
  • VBA即用型代码手册:计算选择的单词数Count Words in Selection
  • (Arxiv-2025)Phantom-Data:迈向通用的主体一致性视频生成数据集
  • MathType关联Wps实现公式编辑【Tex语法适配】
  • 使用行为树控制机器人(一) —— 节点