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

为什么后端路由需要携带 /api 作为前缀?前端如何设置基础路径 /api?

一、为什么后端路由需要携带 /api 作为前缀?

1. 区分 API 端点与其他路由

在 Web 应用程序中,后端不仅需要处理 API 请求,还可能需要处理静态资源(如 HTML、CSS、JS 文件)或其他服务(如 WebSocket)。通过为 API 路由添加 /api 前缀,可以清晰地将其与其他请求区分开来,避免路由冲突。

例如:

  • API 请求:https://example.com/api/users
  • 静态资源请求:https://example.com/static/style.css

2. 方便路由管理

在大型项目中,API 路由通常由多个模块组成。为所有路由添加 /api 前缀,可以方便地对路由进行分类和管理。

例如:

  • 用户模块:/api/users
  • 订单模块:/api/orders
  • 商品模块:/api/products

3. 支持跨域请求

如果前端和后端分别部署在不同的域名或端口上,浏览器会执行跨域请求检查。通过为所有 API 路由添加 /api 前缀,可以更容易地配置跨域规则。

例如,后端可以配置 CORS 规则,只允许 /api 路径的请求:

<JAVA>

@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/api/**") // 只允许 /api 路径的请求.allowedOrigins("*").allowedMethods("GET", "POST", "PUT", "DELETE");}
}

4. 与前端路由区分

在单页应用(SPA)中,前端通常使用虚拟路由来管理页面导航。通过为所有后端路由添加 /api 前缀,可以避免与前端路由冲突。

例如:

  • 前端路由:https://example.com/dashboard
  • 后端路由:https://example.com/api/dashboard

5. 方便负载均衡和反向代理

在生产环境中,API 请求通常通过负载均衡器或反向代理(如 Nginx)进行路由。通过为所有 API 路由添加 /api 前缀,可以更容易地配置转发规则。

例如,Nginx 配置:

<NGINX>

location /api/ {proxy_pass http://backend-server/;
}

二、前端如何设置基础路径 /api

在前端项目中,所有对后端 API 的请求都需要携带 /api 前缀。以下是常见的实现方式:

1. 手动拼接路径

在发送请求时,手动为每个 API 添加 /api 前缀:

<JAVASCRIPT>

fetch('/api/users').then(response => response.json()).then(data => console.log(data));

这种方式简单直接,但在大型项目中容易出错,且维护成本较高。

2. 使用环境变量

通过环境变量定义 API 的基础路径,并在请求中使用:

<JAVASCRIPT>

const API_BASE_URL = process.env.REACT_APP_API_BASE_URL || '/api';fetch(`${API_BASE_URL}/users`).then(response => response.json()).then(data => console.log(data));

.env 文件中定义:

REACT_APP_API_BASE_URL=/api

这种方式可以根据不同环境(如开发、测试、生产)动态修改 API 路径。

3. 使用 Axios 的全局配置

如果项目中使用 Axios 作为请求库,可以设置全局的 baseURL

<JAVASCRIPT>

import axios from 'axios';axios.defaults.baseURL = '/api';axios.get('/users').then(response => console.log(response.data));

4. 使用前端路由代理

在开发环境中,可以通过前端路由代理将 /api 请求转发到后端服务器。例如,在 React 项目中,可以在 package.jsonvite.config.js 中配置代理:

<JSON>

{"proxy": "http://localhost:8080"
}

所有 /api 请求会被自动转发到后端服务器:

<JAVASCRIPT>

axios.get('/api/users') // 请求会被转发到 http://localhost:8080/api/users.then(response => response.json()).then(data => console.log(data));

三、总结

在 Web 应用程序中,为后端路由添加 /api 前缀是一种常见的做法,其主要原因包括:

  • 区分 API 端点与其他路由。
  • 方便路由管理和分类。
  • 支持跨域请求和反向代理。
  • 避免与前端路由冲突。

在前端项目中,可以通过以下方式设置基础路径 /api

  1. 手动拼接路径。
  2. 使用环境变量。
  3. 使用 Axios 的全局配置。
  4. 使用前端路由代理。

通过合理的配置,可以提高项目的可维护性和开发效率。如果你正在开发一个前后端分离的项目,不妨试试上述方法,相信它会为你的工作带来便利!🚀


参考资源

  • Axios 官方文档
  • Nginx 反向代理配置
  • React 开发环境代理配置

希望这篇博客对你有所帮助,欢迎在评论区分享你的经验和问题!😊

相关文章:

为什么后端路由需要携带 /api 作为前缀?前端如何设置基础路径 /api?

一、为什么后端路由需要携带 /api 作为前缀&#xff1f; 1. 区分 API 端点与其他路由 在 Web 应用程序中&#xff0c;后端不仅需要处理 API 请求&#xff0c;还可能需要处理静态资源&#xff08;如 HTML、CSS、JS 文件&#xff09;或其他服务&#xff08;如 WebSocket&#x…...

C++ 关系运算符重载和算术运算符重载的例子,运算符重载必须以operator开头

在C中&#xff0c;运算符重载允许为用户定义的类型&#xff08;类或结构体&#xff09;赋予某些内置运算符的功能。下面是一个关于关系运算符重载&#xff08;&#xff09;和算术运算符重载&#xff08;&#xff09;的简单例子。 示例&#xff1a;复数类的运算符重载 将创建一…...

建造者模式 (Builder Pattern)

建造者模式 (Builder Pattern) 是一种创建型设计模式,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 一、基础 1.1 意图 将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 1.2 适用场景 当创建复杂对象的算法应该…...

MCU vs SoC

MCU&#xff08;Microcontroller Unit&#xff0c;单片机&#xff09;和SoC&#xff08;System on Chip&#xff0c;片上系统&#xff09;是两种不同的芯片类型&#xff0c;尽管它们都实现了高度集成&#xff0c;但在设计目标、功能复杂性和应用场景上存在显著差异。以下是两者…...

RAG 架构地基工程-Retrieval 模块的系统设计分享

目录 一、知识注入的关键前奏——RAG 系统中的检索综述 &#xff08;一&#xff09;模块定位&#xff1a;连接语言模型与知识世界的桥梁 &#xff08;二&#xff09;核心任务&#xff1a;四大关键问题的协调解法 &#xff08;三&#xff09;系统特征&#xff1a;性能、精度…...

(C语言)习题练习 sizeof 和 strlen

sizeof 上习题&#xff0c;不知道大家发现与上一张的习题在哪里不一样嘛&#xff1f; int main() {char arr[] "abcdef";printf("%zd\n", sizeof(arr));printf("%zd\n", sizeof(arr 0));printf("%zd\n", sizeof(*arr));printf(&…...

Unity Animation的其中一种运用方式

Animation是Unity的旧的动画系统&#xff0c;先说目的&#xff0c;其使用是为了在UI中播放动效&#xff0c;并且在动效播放结束后接自定义事件而设计的 设计的关键点在于&#xff0c;这个脚本不是通过Animation直接播放动画片段&#xff0c;而是通过修改AnimationState的nor…...

湖北楚大夫

品牌出海已成为众多企业拓展业务、提升竞争力的关键战略。楚大夫(chudafu.com)作为一家专注于品牌出海、海外网络营销推广以及外贸独立站搭建的公司&#xff0c;凭借其专业、高效、创新的服务模式&#xff0c;致力于成为中国企业走向国际市场的坚实后盾与得力伙伴。楚大夫通过综…...

框架的CVE漏洞利用 php类 java类 手工操作和自动化操作蓝队分析漏洞利用的流量特征

前言 php重要框架和基本的识别特征 php的主要是 tp框架 和 laravel 当然还有 yii等 tp的主要特征 1\报错信息&#xff1a; 2、图标 3、请求头 Laravel特征 1、报错信息 2、请求头 php框架CVE利用 lavarvel 工具 https://github.com/zhzyker/CVE-2021-3129 https://git…...

前端Wind CSS面试题及参考答案

目录 标准盒模型与 IE 盒模型的区别是什么?如何通过 box-sizing 属性切换这两种盒模型? 如何计算一个元素在标准盒模型下的总宽度(包含 margin、padding、border)? 父元素高度塌陷的原因是什么?请列举至少 3 种清除浮动的方法。 方法一:使用 clear 属性 方法二:使用…...

数据结构 -- 线索二叉树

线索二叉树 线索二叉树的概念 线索二叉树的作用 我们在进行中序遍历时&#xff0c;总是从根节点出发进行二叉树遍历&#xff0c;而当仅知道某一孩子节点的指针时&#xff0c;由于无法访问父节点&#xff0c;所以没有办法进行遍历。由此引入线索二叉树 【思考】①如何找到指定…...

【算法day19】括号生成——数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

括号生成 https://leetcode.cn/problems/generate-parentheses/description/ 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 左括号数必须大于右括号数&#xff0c;且小于等于n class Solution { publ…...

Qt5.15.2实现Qt for WebAssembly与示例

目录 1.什么是Qt for WebAssembly&#xff1f; 1.1 什么是 WebAssembly&#xff1f; 1.2 WebAssembly 的优势 1.3 什么是 Qt for WebAssembly&#xff1f; 1.4 Qt for WebAssembly 的特点 1.5 编译过程 1.6 运行时环境 注意&#xff01;&#xff01;&#xff01;注意&am…...

好吧好吧,看一下达梦的模式与用户的关系

单凭个人感觉&#xff0c;模式在达梦中属于逻辑对象合集&#xff0c;回头再看资料 应该是一个用户可以对应多个模式 问题来了&#xff0c;模式的ID和用户的ID一样吗&#xff1f; 不一样 SELECT USER_ID,USERNAME FROM DBA_USERS WHERE USERNAMETEST1; SELECT ID AS SCHID, NA…...

HOW - DP 动态规划系列(三)(含01背包问题)

目录 一、01背包问题最直接的暴力解法动态规划解法 二、完全背包 通过几个算法的学习&#xff0c;理解和掌握动态规划来解决背包问题。 一、01背包问题 对于面试的话&#xff0c;掌握01背包和完全背包就够用了&#xff0c;最多可以再来一个多重背包。 如果这几种背包分不清&…...

Linux的文件上传下载的lrzsz库的安装与使用

以下是关于 Linux 下 lrzsz 库的安装与使用 的详细指南&#xff0c;适用于通过终端&#xff08;如 SecureCRT、Xshell、MobaXterm 等&#xff09;使用 ZMODEM 协议快速上传和下载文件&#xff1a; 一、lrzsz 简介 功能&#xff1a;提供 rz&#xff08;接收文件&#xff09;和 …...

在linux服务器部署Heygem

前言&#xff1a; Heygem官方文档上提供了基于windwos系统的安装方案。在实际使用过程中个人电脑的配置可能不够。这个时候如果服务器配置够的话&#xff0c;可以尝试在服务器上装一下。但是服务器一般都是linux系统的&#xff0c;于是这篇教程就出现了… 可行性分析 通读安装…...

图书管理系统系统-Java、SpringBoot、Vue和MySQL开发的图书馆管理系统

「springboot、vue图书馆管理系统.zip」 链接&#xff1a;https://pan.quark.cn/s/5a929a7e9450 分享一个图书管理系统&#xff0c;Java、SpringBoot、Vue和MySQL开发的图书馆管理系统 以下是对文本内容的总结&#xff1a; 项目概述 项目名称与背景&#xff1a; 项目概述 项…...

学生管理系统(需求文档)

需求&#xff1a; 采取控制台的方式去书写学生管理系统 分析&#xff1a; 初始菜单&#xff1a; “----------欢迎来到java学生管理系统----------” “1:添加学生” “2&#xff1a;删除学生” “3&#xff1a;修改学生” “4&#xff1a;查询学生” “5&#xff1a;…...

[c语言日寄]数据输入

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…...

CMake-环境变量介绍

文章目录 作用域获取环境变量初始化查看特殊的环境变量 环境变量类似普通变量&#xff0c;但也有些不同&#xff0c;如下&#xff1a; 作用域 在一个CMake进程中环境变量具有全局作用域 获取环境变量 使用ENV操作符获取环境变量&#xff0c;例如$ENV{<name>}&#xff…...

数据预处理流程与关键步骤解析

数据预处理流程图&#xff08;Markdown格式&#xff09;&#xff1a; #mermaid-svg-b3mhJcpFWaJ9qMZ8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-b3mhJcpFWaJ9qMZ8 .error-icon{fill:#552222;}#mermaid-svg-b3m…...

字节DAPO算法:改进DeepSeek的GRPO算法-解锁大规模LLM强化学习的新篇章(代码实现)

DAPO算法&#xff1a;解锁大规模LLM强化学习的新篇章 近年来&#xff0c;大规模语言模型&#xff08;LLM&#xff09;在推理任务上的表现令人瞩目&#xff0c;尤其是在数学竞赛&#xff08;如AIME&#xff09;和编程任务中&#xff0c;强化学习&#xff08;RL&#xff09;成为…...

计算机操作系统(四) 操作系统的结构与系统调用

计算机操作系统&#xff08;四&#xff09; 操作系统的结构与系统调用 前言一、操作系统的结构1.1 简单结构1.2 模块化结构1.3 分层化结构1.4 微内核结构1.5 外核结构 二、系统调用1.1 系统调用的基本概念1.2 系统调用的类型 总结&#xff08;核心概念速记&#xff09;&#xf…...

Docker安装,并pullMySQL和redis

卸载原Docker 您的 Linux 发行版可能提供非官方的 Docker 软件包&#xff0c;这可能与 Docker 提供的官方软件包冲突。在安装 Docker Engine 正式版之前&#xff0c;您必须先卸载这些软件包。 sudo dnf remove docker \ docker-client \ docker-client-latest \ docker-common…...

第三天 开始Unity Shader的学习之旅之第二天的补充

Unity Shader的学习笔记 第三天 开始Unity Shader的学习之旅之第二天的补充 文章目录 Unity Shader的学习笔记前言一、Unity 提供的内置文件和变量1. 内置的包含文件2. UnityCG.cginc中的常用结构体 二、Unity 提供的Cg/HLSL语义1. 从应用阶段传递模型数据给顶点着色器时Unity…...

DeepSeek技术架构解析:MoE混合专家模型

一、前言 2025年初&#xff0c;DeepSeek V3以557万美元的研发成本&#xff08;仅为GPT-4的1/14&#xff09;和开源模型第一的排名&#xff0c;在全球AI领域掀起波澜。其核心创新之一——混合专家模型&#xff08;Mixture of Experts, MoE&#xff09;的优化设计&#xff0c;不…...

【正点原子】AI人工智能深度学习(RV1126/RK3568/RK3588)-第1期 准备篇

1.1SDK编译后的目录 1、真正的根文件系统镜像存放目录 2、非必须&#xff0c;负责系统升级等&#xff0c;kerneldtbramdisk组成的根文件系统 1.2文件系统分区 1.3开机自启动 1.6设置静态ip地址 1.8RKMedia框架/编译测试SDK自带RKMedia例程 出厂系统以下内容都是默认…...

PCB沉金和镀金的区别

本文通过多方面角度对比两者的区别。 一.成本和工艺复杂度 沉金&#xff1a;成本较高&#xff0c;制作过程中消耗的金盐多。工艺的参数控制上较严格&#xff0c;需防止“黑盘效应”。 黑盘效应&#xff1a;是指在PCB&#xff08;印刷电路板&#xff09;的化学镀镍金&#xf…...

靶场(十五)---小白心得思路分析---LaVita

启程&#xff1a; 扫描端口&#xff0c;发现开放22&#xff0c;80端口&#xff0c;发现ws.css可能存在exp&#xff0c;经查发现无可利用的exp PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.4p1 Debian 5deb11u2 (protocol 2.0) | ssh-hostkey: | 3072 c9…...