最近的一个项目采用前后端完全分离的架构,前端组件:vue + vue-router + vuex + element-ui + axios,后端组件:Spring Boot + MyBatis。之所以这样做是为了考虑后端水平扩容的便利性,在部署的时候完全可以将前后端彼此独立部署,前端部署可以直接使用诸如Nginx这样的高性能Web服务器。

前端需要知道它所访问的后端服务器IP地址才能访问到数据,但是如果将IP地址硬编码在前端代码中的话,在部署的时候会存在一个问题:当服务器端IP地址变化之后必须重新打包发布(开发,测试和产线的环境不同,也需要针对特定环境打包)。

相对路径



如果后端项目的上下文路径为“/”,那么出于对资源利用率的考虑,在项目前期(规模小)可以将前后端部署在同一个嵌入式Tomcat容器中(Spring Boot框架支持静态页面)。此时,在前端项目的Ajax请求中可以使用相对路径,如下所示:

var url = "/api/v1/data"
$.get(url, function(data){
alert("Data Loaded: " + data);
});

此时Ajax会自动在相对路径前面加上http://host:port ,并且上下文路径为“/”,那么最终的请求的API路径为:http://host:port/ + 相对路径。此时就不用在前端的代码中硬编码后端地址和端口了,但是注意这个用法的前提必须满足2个条件:

(1)前后端必须部署在同一个容器

(2)后端的上下文路径必须为“/”

绝对路径



随着项目的发展,前后端要同时支持水平扩容(集群化),此时需要考虑将前后端完全独立部署,那么在前端的Ajax请求中就不能使用相对路径了(因为主机地址已经不同,存在跨域),对于后端API的访问只能使用绝对路径,而且也只能硬编码后端的访问地址和端口(如:http://host:port/api/xxx )。为了应对这种尴尬的局面,可以考虑使用域名的方式访问后端服务,这样只要域名不变,前端的访问地址就不用变更。

基于Spring Boot架构的前后端完全分离项目API路径问题的更多相关文章

  1. 《Spring Boot 入门及前后端分离项目实践》系列介绍

    课程计划 课程地址点这里 本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 个部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 项目实践开发 ...

  2. 《Spring Boot 入门及前后端分离项目实践》目录

    开篇词:SpringBoot入门及前后端分离项目实践导读 第02课:快速认识 Spring Boot 技术栈 第03课:开发环境搭建 第04课:快速构建 Spring Boot 应用 第05课:Spr ...

  3. 实战!spring Boot security+JWT 前后端分离架构认证登录!

    大家好,我是不才陈某~ 认证.授权是实战项目中必不可少的部分,而Spring Security则将作为首选安全组件,因此陈某新开了 <Spring Security 进阶> 这个专栏,写一 ...

  4. Vue学习笔记-基于CDN引入方式简单前后端分离项目学习(Vue+Element+Axios)

    一  使用环境 开发系统: windows 后端IDE: PyCharm 前端IDE: VSCode 数据库: msyql,navicat 编程语言: python3.7  (Windows x86- ...

  5. spring boot ajax post 前后端

    1 传输的数据格式是json 1.1 前端ajax json的所有的key都必须是双引号引用的,并且最外层也要用双引号引用.例如 "{"a":b, "b&quo ...

  6. 在Azure DevOps Server中运行基于Spring Boot和Consul的微服务项目单元测试

    1 概述 谈到微服务架构体系,绕不开服务发现这个功能.服务发现机制是简化微服务配置.实现容灾.水平扩缩容.提高运维效率的重要方式.在服务发现工具中,Consul在部署和使用方面与容器结合的天衣无缝,成 ...

  7. 七个开源的 Spring Boot 前后端分离项目,一定要收藏!

    前后端分离已经在慢慢走进各公司的技术栈,根据松哥了解到的消息,不少公司都已经切换到这个技术栈上面了.即使贵司目前没有切换到这个技术栈上面,松哥也非常建议大家学习一下前后端分离开发,以免在公司干了两三年 ...

  8. 八个开源的 Spring Boot 前后端分离项目,一定要收藏!

    八个开源的 Spring Boot 前后端分离项目 最近前后端分离已经在慢慢走进各公司的技术栈,不少公司都已经切换到这个技术栈上面了.即使贵司目前没有切换到这个技术栈上面,我们也非常建议大家学习一下前 ...

  9. 基于Spring Boot、Spring Cloud、Docker的微服务系统架构实践

    由于最近公司业务需要,需要搭建基于Spring Cloud的微服务系统.遍访各大搜索引擎,发现国内资料少之又少,也难怪,国内Dubbo正统治着天下.但是,一个技术总有它的瓶颈,Dubbo也有它捉襟见肘 ...

随机推荐

  1. js事件2-事件兼容问题

    对于不同的浏览器,事件响应会有一定的不同,所以我们为了更好的用户效果,必须要考虑好事件兼容性问题. 为了兼容不同的浏览器,我们可以自己编写一个事件对象,通过它的事件添加函数和删除函数来给元素添加/删除 ...

  2. springboot之DevTools热部署的简单原理解析

    IDEA新建springboot选择DevTools springboot-devtools模块能够实现热部署,添加类.添加方法,修改配置文件,修改页面等,都能实现热部署. 原理就是重启项目,但比手动 ...

  3. Centos7.x for aarch64 下载地址

    ARM64架构系统 CentOS7镜像下载源 http://archive.kernel.org/centos-vault/altarch/ 例如:centos7.5 http://archive.k ...

  4. Struct Socket详细分析(转)

    原文地址:http://anders0913.iteye.com/blog/411986 用户使用socket系统调用编写应用程序时,通过一个数字来表示一个socket,所有的操作都在该数字上进行,这 ...

  5. Ferguson游戏&&Ua12293——打表找规律

    题意 有两个盒子分别有m颗糖果和n颗糖果,每次移动是将一个盒子清空而把另一个盒子里得一些糖果拿到被清空的盒子,使得两个盒子至少各有一个.无法移动者输. 分析 设初始状态为(m, n),显然(1, 1) ...

  6. python 定时任务 from apscheduler.schedulers.blocking import BlockingScheduler

    说明:使用python内置的模块来实现,本篇博客只是以循环定时来示范,其他的可以结合crontab的风格自己设定 一.导包 from apscheduler.schedulers.blocking i ...

  7. LeetCode 1234. Replace the Substring for Balanced String

    原题链接在这里:https://leetcode.com/problems/replace-the-substring-for-balanced-string/ 题目: You are given a ...

  8. solidworks 学习 (二)

    洗手液瓶建模

  9. Navicat配置跳板机连接数据库

    需求 在开发中,有时候我们会碰到这么一个情况.数据库的服务器在内网,如果想连接,必须得先ssh登陆到跳板机,然后在跳板机ssh到达数据库所在服务器,进而操作数据库.遗憾的是,如果跳板机和数据库所在服务 ...

  10. DDD 全称 “Domain-Driven Design”,领域驱动设计

    大型软件项目的最复杂之处不是实现,而是软件所服务的真正的领域. 领域驱动设计就是用来处理这些高度复杂领域的理想和途径,使得领域本身成为项目关注的焦点,从而达到维护能深刻反映领域的软件模型的目的. 通过 ...