缘博客
发布日期

Web实战:开发规范与工程搭建

作者
  • 姓名
    社交账号

前后端分离开发

Web 项目早期可以采用前后端混合开发,但随着项目规模增大,会出现前后端代码混杂、分工不明确、难以维护等问题。

现在更常见的是前后端分离开发:前端和后端分别作为独立项目开发、测试和部署,通过 HTTP 接口进行通信。

前端项目
Vue / HTML / CSS / JavaScript
        ↓ HTTP
      API接口
Spring Boot后端
      MySQL

前后端之间最重要的约定就是接口文档。


开发流程

前后端分离项目通常按照以下流程推进:

需求分析
接口设计
前后端并行开发
前端测试 / 后端测试
前后端联调

需求分析

根据原型和需求文档明确:

  • 页面需要展示什么数据
  • 用户能够执行什么操作
  • 后端需要提供哪些接口

接口设计

前后端共同约定:

  • 请求路径
  • 请求方式
  • 请求参数
  • 响应数据格式

接口确定后,前端和后端就可以并行开发。


RESTful风格

REST 全称 REpresentational State Transfer,即表述性状态转换。

REST 是一种软件架构风格,并不是强制标准。

核心思想:

  • URL 用于定位资源
  • HTTP 请求方式描述对资源的操作

传统写法:

GET  /user/getById?id=1
POST /user/saveUser
POST /user/updateUser
GET  /user/deleteUser?id=1

REST 风格:

GET    /users/1
POST   /users
PUT    /users
DELETE /users/1

对应关系:

请求方式常见含义
GET查询
POST新增
PUT修改
DELETE删除

功能模块通常使用复数形式表示一类资源,例如:

/users
/books
/depts

Apifox

前后端并行开发时会遇到两个问题:

  1. 后端接口开发完成后,如何自己发送请求测试接口?
  2. 前端接口尚未完成时,如何拿到模拟数据开发页面?

Apifox 可以用于:

  • API 文档管理
  • API 请求调试
  • Mock 数据
  • API 测试

浏览器地址栏主要用于 GET 请求,而后端还需要测试 POST、PUT、DELETE 等请求,因此通常需要 Apifox、Postman 等接口调试工具。


工程搭建

Tlias 后端工程基于 Spring Boot。

核心依赖包括:

  • Spring Web
  • MyBatis
  • MySQL Driver
  • Lombok

数据库配置示例:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/tlias
    username: root
    password: 1234

mybatis:
  configuration:
    map-underscore-to-camel-case: true

基础代码结构

项目采用三层架构:

controller
service
mapper
database

典型目录:

com.itheima
├── controller
├── service
│   └── impl
├── mapper
├── pojo
└── TliasApplication

部门实体类

@Data
public class Dept {

    private Integer id;

    private String name;

    private LocalDateTime createTime;

    private LocalDateTime updateTime;
}

数据库字段可能是:

id
name
create_time
update_time

Java 属性通常采用驼峰命名。


统一响应结果

如果每一个接口都返回不同的数据结构,前端处理会很麻烦,因此项目中可以统一响应格式。

成功:

{
  "code": 1,
  "msg": "操作成功",
  "data": {}
}

失败:

{
  "code": 0,
  "msg": "操作失败",
  "data": null
}

统一结果类:

@Data
public class Result {

    private Integer code;
    private String msg;
    private Object data;

    public static Result success() {
        Result result = new Result();
        result.setCode(1);
        result.setMsg("操作成功");
        return result;
    }

    public static Result success(Object data) {
        Result result = success();
        result.setData(data);
        return result;
    }

    public static Result error(String msg) {
        Result result = new Result();
        result.setCode(0);
        result.setMsg(msg);
        return result;
    }
}

这样前端无论调用哪个接口,都可以按照统一结构处理响应。


小结

这一阶段完成的核心工作:

前后端分离
统一接口规范
RESTful设计
Apifox调试
Spring Boot工程搭建
三层架构
统一Result响应