【前后端分离开发及项目部署流程】

news2024/12/27 13:08:31

文章目录

  • 前后端分离开发技术
  • 1 前后端分离开发
    • 1.1 介绍
    • 1.2 开发流程
    • 1.3 前端技术栈(了解)
  • 2 Yapi(定义API接口)
    • 2.1 介绍
    • 2.2 使用
  • 3 Swagger
    • 3.1 介绍
    • 3.2 使用方式
    • 3.3 常用注解
  • 4 项目部署
    • 4.1 部署架构
    • 4.2 部署环境说明
    • 4.3 部署前端项目
    • 4.4 部署后端项目

前后端分离开发技术

背景:

  • 开发人员同时负责前端和后端代码开发,分工不明确
  • 开发效率低
  • 前后端代码混合在一个工程中,不便于管理
  • 对开发人员要求高,人员招聘困难

1 前后端分离开发

1.1 介绍

前后端分离开发,就是在项目开发过程中,对于前端代码的开发由专门的前端开发人员负责,后端代码则由后端开发人员负责,这样可以做到分工明确、各司其职,提高开发效率,前后端代码并行开发,可以加快项目开发进度。

目前,前后端分离开发方式已经被越来越多的公司所采用,成为当前项目开发的主流开发方式。

前后端分离开发后,从工程结构上也会发生变化,即前后端代码不再混合在同一个maven工程中,而是分为前端工程后端工程

1

1.2 开发流程

前后端分离开发后,面临一个问题,就是前端开发人员和后端开发人员如何进行配合来共同开发一个项目?
可以按照如下流程进行:

2

==接口(API接口)==就是一个http的请求地址,主要就是去定义:请求路径、请求方式、请求参数、响应数据等内容。

3

1.3 前端技术栈(了解)

开发工具:

  • Visual Studio Code
  • hbuilder

技术框架:

  • nodejs
  • VUE
  • ElementUI
  • mock
  • webpack

2 Yapi(定义API接口)

4

2.1 介绍

YApi是高效、易用、功能强大的api管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护API,YApi还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。

YApi让接口开发更简单高效,让接口的管理更具可读性、可维护性,让团队协作更合理。

源码地址:https://github.com/YMFE/yapi

要使用YApi,需要自己进行部署。

2.2 使用

使用YApi,可以执行下面操作:

  • 添加项目
  • 添加分类
  • 添加接口
  • 编辑接口
  • 查看接口
  • 导入接口
  • 导出接口

5

3 Swagger

3.1 介绍

使用Swagger你只需要按照它的规范去定义接口及接口相关的信息,再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,以及在线接口调试页面等等。
官网:https://swagger.io/

knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。

Maven坐标:

<dependency>
    <groupld>com.github.xiaoymin</groupld>
    <artifactld>knife4j-spring-boot-starter</artifactld>
    <version>3.0.2</version>
</dependency>

3.2 使用方式

操作步骤:

  1. 导入knife4j的maven坐标

  2. 导入knife4j相关配置类(WebMvcConfig)

    //开启knife4j注解
    @EnableSwagger2
    @EnableKnife4j 
    public class WebMvcConfig extends WebllvcConfigurationSupport{
        @Bean 
        public Docket createRestApi(){
            //文档类型
    		return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.itheima.reggie.controller"))
                    .paths(PathSelectors.any())
                    .build();
        }
        private ApiInfo apiInfo(){    
            return new ApiInfoBuilder()
                    .title("瑞吉外卖")
                    .version("1.0")
                    .description("瑞吉外卖接口文档")
                    .build();
        }
    }
    
  3. 设置静态资源,否则接口文档页面无法访问,(WebMvcConfig类中的addResourceHandlers方法)

    //设置静态资源映射
    registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    
  4. 在LoginCheckFilter中设置不需要处理的请求路径 (过滤器放行)

    //定义不需要处理的请求路径
    String[] urls = new String[]{
        "/doc.html",
        "/webjars/**",
        "/swagger-resources",
        "/v2/api-docs"
    };
    

3.3 常用注解

注解说明
@Api用在请求的类上,例如Controller,表示对类的说明
@ApiModel用在类上,通常是实体类,表示一个返回响应数据的信息
@ApiModelProperty用在属性上,描述响应类的属性
@ApiOperation用在请求的方法上,说明方法的用途、作用(Controller中的方法)
@ApiImplicitParams用在请求的方法上,表示一组参数说明
@ApiImplicitParam用在@ApilmplicitParams注解中,指定一个请求参数的各个方面

6

7

8

4 项目部署

4.1 部署架构

9

4.2 部署环境说明

服务器:

  • 192.168.138.100(服务器A)

    Nginx:部署前端项目、配置反向代理
    Mysql:主从复制结构中的主库

  • 192.168.138.101(服务器B)

    ​ jdk:运行Java项目

    ​ git:版本控制工具

    ​ maven:项目构建工具

    ​ jar:Spring Boot项目打成jar包基于内置Tomcat运行

    ​ Mysql:主从复制结构中的从库

  • 172.17.2.94(服务器C)

    ​ Redis:缓存中间件

4.3 部署前端项目

操作步骤:

第一步:在服务器A中安装Nginx,将前端项目打包(dist文件)后上传到Nginx的html目录下

第二部:修改Nginx配置文件nginx.conf

server {
    listen 80;
    server_name localhost;
    
    location / {
        root html/dist; #指定静态资源根目录
        index index.html;
    }
    
    # 反向代理配置
    location ^~ /api/ {
        # url重写 "/api/employ/login" -> "/employ/login"
        rewrite ^/api/(.*)$ /$1 break;
        proxy_pass http://192.168.138.101:8080; #反向代理配置,将请求转发到指定服务
    }
}

4.4 部署后端项目

第一步:在服务器B中安装jdk,git,maven,MySQL,使用git clone命令将git远程仓库的代码克隆下来

第二步:将资料中提供的reggieStart.sh(自动化部署脚本)文件上传到服务器B,通过chmod命令设置执行权限

chmod 777 reggieStart.sh

第三步:执行reggieStart.sh脚本文件,自动部署项目

资料来源:黑马程序员-瑞吉外卖-前后端分离课程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/693355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:如何使用Python访问共享目录——让共享变得简单易行

如何使用Python访问共享目录 —— 让共享变得简单易行 作为一种高效而强大的编程语言&#xff0c;Python拥有各种各样的应用。其中一个非常重要的应用场景就是对共享目录的访问和操作。无论是在家庭网络&#xff0c;企业内网或者云存储平台&#xff0c;共享目录的重要性毋庸置…

两个链表的入环节点(java)

两个链表的入环节点 两个链表的入环节点解题思路代码演示 链表相关的题 两个链表的入环节点 给定两个可能有环也可能无环的单链表&#xff0c;头节点head1和head2 请实现一个函数&#xff0c;如果两个链表相交&#xff0c;请返回相交的第一个节点。如果不相交返回null 要求如果…

ATTCK(一)之为什么要学习ATTCK

ATT&CK 简介 本系列旨在介绍网络红蓝对抗领域最好的ATT&CK矩阵模型&#xff0c;以期帮助有意愿深耕在红蓝对抗领域的人员能系统性的掌握红蓝对抗领域的知识和经验。本系列将详细ATT&CK的起源、发展历史&#xff0c;ATT&CK矩阵相对其他High-Level红蓝对抗模型…

Redis7【② Key通用命令 十大数据类型】

1 Key的通用命令 redis命令不区分大小写&#xff0c;但是key是区分大小写的。没有返回值的命令执行成功会返回1&#xff0c;失败返回0。 1. KEYS 查看所有的key&#xff0c;返回值是一个数组 2. EXISTS EXISTS key [key ...]&#xff1a;返回给定的key中已存在的个数&#xf…

前端Vue自定义验证码密码登录切换tabs选项卡标签栏标题栏 验证码登录模版 密码登录模版

前端Vue自定义验证码密码登录切换tabs选项卡标签栏标题栏 验证码登录模版 密码登录模版&#xff0c; 请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13221 效果图如下&#xff1a; 实现代码如下&#xff1a; # cc-selectBox #### 使用方法 使…

【计算机网络】可靠传输的实现机制

1、停止-等待协议SW 信道利用率 题目 小结 2.回退N帧协议GBN Go-Back-N 题目 小结

设计模式3:单例模式:JMM与volatile和synchronized的关系

本文目录 JMM简介Java 内部内存模型(The Internal Java Memory Model)硬件内存架构(Hardware Memory Architecture)弥合 Java 内存模型和硬件内存架构之间的差距(Bridging The Gap Between The Java Memory Model And The Hardware Memory Architecture)1.共享对象的可见性2.竞…

OpenStack(T版)——计算(Nova)服务介绍与安装

文章目录 OpenStack(T版)——计算(Nova)服务介绍与安装安装与配置(controller)准备(1)创建数据库(2)加载环境变量(3)创建认证服务凭据(4)创建Nova计算服务组件的API endpoint 安装和配置Nova计算服务组件(1)安装软件包(2)编辑/etc/nova/nova.conf 完成以下操作(3)同步数据库验证…

云服务器Linux防火墙云锁安装部署及使用 技术支持服务器安全运维

服务器必备安全防护及运维管理SAAS解决方案&#xff0c;支持windows/linux服务器跨平台实时、批量、远程安全管理&#xff0c;有效对抗服务器入侵和网络攻击。 服务器&#xff1a;Redhat/CentOS/Ubuntu/SUSE/中标麒麟 64位 Web中间件&#xff1a;Apache/Nginx/kangle/Tomcat/W…

【软考网络管理员】2023年软考网管初级常见知识考点(26)- HTML常见属性标签、表格、表单详解

涉及知识点 Html的概念&#xff0c;html常见标签&#xff0c;html常见属性&#xff0c;html表格&#xff0c;html表单&#xff0c;软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码…

5-2图像处理经典案例:正弦噪声图像去噪

学习目标&#xff1a; 图像处理经典案例 去除噪声 1.简述 图像降噪的英文名称是Image Denoising&#xff0c; 图像处理中的专业术语。是指减少数字图像中噪声的过程&#xff0c;有时候又称为图像去噪。图像的噪声来源相对复杂&#xff0c;搞清楚图像噪声的成因对我们进行…

B+树

B树 B树是对B树的一种变形树&#xff0c;它与B树的差异在于: 非叶结点仅具有索引作用&#xff0c;也就是说&#xff0c;非叶子结点只存储key&#xff0c;不存储value 树的所有叶结点构成一个有序链表&#xff0c;可以按照key排序的次序遍历全部数据 B树存储数据 若参数M选…

使用影刀RPA拆分excel数据

首先&#xff0c;要使程序有一定的兼容性&#xff0c;即增加互动性&#xff0c;认为选择要拆分的文件和拆分的依据列&#xff0c;可以利用影刀中的‘打开选择对话框’和‘打开输入对话框’来实现&#xff0c;这样一来便不用考虑待拆分excel的路径问题获取1中选择的依据拆分列&a…

登录框界面之渗透测试思路总结

前言 大家都知道&#xff0c;渗透的过程中&#xff0c;遇见登录框是很常见的。下面就简单总结一下渗透中遇见登录页面的思路&#xff1a; 首先登录页面可能产生哪些漏洞呢&#xff1f; 1、弱密码与暴力破解 2、万能密码、SQL与XSS&#xff08;注入&#xff09; 3、登录时&…

渗透测试自动化报告脚本-----Nessus报告自动化解析--1-html解析

本专栏内容主要用于渗透测试工程师应对在工作中的自动化操作难题&#xff0c;高效摸鱼专用 解决问题 1、对Nessus导出的html报告进行自动化的提取操作&#xff0c;包括IP地址&#xff0c;漏洞个数&#xff0c;漏洞等级&#xff0c;漏洞描述&#xff0c;CVE编号等 2、由于Nes…

配置文件的优先级及maven打包和参数(port)的修改

1、配置文件的优先级 SpringBoot中支持五种配置格式:优先级&#xff1a;命令行参数(–xxxxxx) > java系统属性(-Dxxx xxx) > application.properties > application.yml > application.yaml 虽然springboot支持多种格式配置文件&#xff0c;但是在项目开发时&…

智能仓储货架的电子标签解决方案

近年来&#xff0c;电商和新零售行业的迅猛增长催生了仓储管理场景和运营模式的变革。企业不断寻求“低成本”和“更可靠”的解决方案&#xff0c;加快了仓储管理从粗放型向精细化转变的步伐。仓储管理的技术变革从机械化走向自动化&#xff0c;仓储数智化成为主流趋势。在这个…

chatgpt赋能python:Python语言冒泡排序-深入了解

Python语言冒泡排序 - 深入了解 冒泡排序是一种基本的排序算法&#xff0c;也是学习排序算法的入门算法之一。在Python中&#xff0c;我们可以很容易地实现冒泡排序。 冒泡排序的原理 冒泡排序的原理很简单&#xff0c;大概分为以下几个步骤&#xff1a; 比较相邻的元素&am…

Jnpf低代码开发平台

一、写在前面 低代码开发平台&#xff0c;一个号称能在几分钟的时间里开发出一套公司内部都可使用的应用系统开发工具。 很多人或许都隐隐听说过低代码&#xff0c;因为低代码不仅远名国外&#xff0c;国内的腾讯、阿里、华为、网易、百度等科技巨头也纷纷入局&#xff0c;足以…

蓝桥杯专题-试题版-【打印十字图】【剪格子】【错误票据】【翻硬币】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…