前端和后端是怎么配合工作的(Go后端视角)

很多初学者学 Gin 的时候,经常会有一个疑问:

txt 复制代码
前端到底是怎么和后端通信的?

为什么我写一个接口,前端就能拿到数据?

JSON 到底是怎么传过去的?

实际上:

txt 复制代码
前端负责展示页面

后端负责提供数据

两者通过 HTTP + JSON 通信

一、最简单的理解

假设你在淘宝搜索:

txt 复制代码
机械键盘

你看到的是:

txt 复制代码
商品图片
商品名称
商品价格

这些内容不是前端自己写死的。

而是:

txt 复制代码
前端向后端要数据

后端返回数据

前端渲染页面

整个过程:

txt 复制代码
前端
 ↓
发请求
 ↓
后端
 ↓
查数据库
 ↓
返回数据
 ↓
前端展示

二、前后端职责

前端负责

页面展示

例如:

html 复制代码
<h1>机械键盘</h1>

<p>199元</p>

用户交互:

txt 复制代码
点击按钮

输入账号

提交表单

常见技术:

txt 复制代码
HTML

CSS

JavaScript

Vue

React

后端负责

业务逻辑

例如:

txt 复制代码
登录

注册

订单

支付

权限

数据库操作:

txt 复制代码
MySQL

Redis

常见技术:

txt 复制代码
Go

Java

Python

Node.js

三、两者如何通信

通过:

txt 复制代码
HTTP协议

例如:

前端:

js 复制代码
fetch("/login")

实际上就是:

txt 复制代码
给服务器发送HTTP请求

请求:

http 复制代码
POST /login HTTP/1.1

后端收到:

go 复制代码
r.POST("/login", Login)

执行:

go 复制代码
func Login(c *gin.Context) {

}

四、最完整的一次请求

用户登录:


前端页面:

html 复制代码
<input>
<input>

<button>登录</button>

用户输入:

txt 复制代码
账号:admin

密码:123456

点击登录。


前端JS:

js 复制代码
fetch("/login",{
    method:"POST",
    body:JSON.stringify({
        username:"admin",
        password:"123456"
    })
})

发送:

json 复制代码
{
    "username":"admin",
    "password":"123456"
}

服务器收到:

go 复制代码
func Login(c *gin.Context) {

    var req struct {
        Username string `json:"username"`
        Password string `json:"password"`
    }

    c.ShouldBindJSON(&req)

}

此时:

go 复制代码
req.Username

等于:

txt 复制代码
admin

此时:

go 复制代码
req.Password

等于:

txt 复制代码
123456

五、后端开始处理

例如:

go 复制代码
db.Where("username=?", req.Username)

查询数据库。

发现:

txt 复制代码
账号存在
密码正确

返回结果:

go 复制代码
c.JSON(200, gin.H{
    "msg":"登录成功",
})

返回:

json 复制代码
{
    "msg":"登录成功"
}

六、前端收到数据

前端:

js 复制代码
const res = await fetch(...)

const data = await res.json()

console.log(data)

得到:

js 复制代码
{
    msg:"登录成功"
}

前端更新页面:

html 复制代码
欢迎回来:admin

整个过程:

txt 复制代码
用户点击登录
        ↓
前端收集数据
        ↓
JSON.stringify
        ↓
HTTP请求
        ↓
Gin接口
        ↓
ShouldBindJSON
        ↓
数据库查询
        ↓
c.JSON返回
        ↓
HTTP响应
        ↓
res.json()
        ↓
页面更新

七、什么是接口(API)

例如:

go 复制代码
r.POST("/login", Login)

r.POST("/register", Register)

r.GET("/user/info", UserInfo)

这些:

txt 复制代码
/login

/register

/user/info

就叫:

txt 复制代码
接口(API)

接口本质:

txt 复制代码
一个URL

对应一个处理函数

例如:

go 复制代码
r.GET("/user", GetUser)

访问:

txt 复制代码
/user

执行:

go 复制代码
GetUser()

八、为什么要用JSON

因为:

txt 复制代码
前端是JavaScript

后端是Go

语言不同。

需要一种双方都认识的数据格式。

于是:

txt 复制代码
JSON

出现了。


前端:

js 复制代码
{
    name:"张三",
    age:18
}

发送:

json 复制代码
{
    "name":"张三",
    "age":18
}

后端:

go 复制代码
type User struct {
    Name string `json:"name"`
    Age int `json:"age"`
}

自动转换。


九、真实项目架构

例如外卖项目:

txt 复制代码
Vue前端
     ↓
Axios请求
     ↓
Gin接口
     ↓
Service业务层
     ↓
Gorm
     ↓
MySQL

完整流程:

txt 复制代码
用户
 ↓
Vue
 ↓
Axios
 ↓
Gin
 ↓
Service
 ↓
Gorm
 ↓
MySQL
 ↓
返回JSON
 ↓
Vue渲染

十、你现在学习Gin时最应该理解的

每次看到:

go 复制代码
func Login(c *gin.Context)

脑子里就要出现:

txt 复制代码
前端发请求
 ↓
Gin收到请求
 ↓
c获取数据
 ↓
处理业务
 ↓
c.JSON返回结果
 ↓
前端展示

因为:

txt 复制代码
Gin本质就是一个接收请求
和返回响应的框架

一句话总结

前端负责页面,后端负责数据。

用户操作页面后,前端通过 HTTP 请求把 JSON 发给 Gin,Gin 使用 ShouldBindJSON 接收数据,处理业务并查询数据库,然后通过 c.JSON 返回结果,前端再根据返回的 JSON 更新页面。

txt 复制代码
前端
 ↓
HTTP请求
 ↓
Gin接口
 ↓
数据库
 ↓
Gin返回JSON
 ↓
前端渲染页面
相关推荐
星辰_mya44 分钟前
ThreadLocal之微服务链路追踪
java·开发语言·前端
w_t_y_y1 小时前
vue父子组件通信(一)父子调用和通信(2)VUE3
前端·javascript·vue.js
只会写bug的靓仔1 小时前
我把 Electron+Go 的 LOL 战绩工具重写成 Tauri+Rust,安装包从 128 MB 砍到 5 MB
golang·rust·electron
Demon1_Coder1 小时前
Day1-SpringAI-1.0.0版本
java·开发语言·前端
ZC跨境爬虫1 小时前
跟着 MDN 学CSS day_42:等分轨道、层叠放置与混合布局
前端·javascript·css·ui·html
Cheney95011 小时前
Vue 项目字体文件打包后 fonts 文件夹“消失”?原因分析与解决方案
前端·javascript·vue.js
问心无愧05131 小时前
ctf show web入门68,69
android·前端·笔记
jingling5551 小时前
Flutter | 从基本跳转到路由守卫
服务器·前端·网络·flutter·前端框架
神奇的代码在哪里1 小时前
【单机离线版】大学考试题库复习工具:前端离线Excel解析 + localStorage持久化 + Playwright
前端·html·ai编程·题库复习·刷题软件·大学考试