🏷️ 标签:Go HTTP RESTful API Web开发 后端实训 📝 适用人群:Go 初学者、Web 开发入门、课程实训、毕业设计 💡 核心亮点:理论易懂、实战可跑、完全符合课程实训报告格式
一、前言
在现代 Web 开发中,HTTP 协议 是前后端交互的基础,RESTful API 是目前最主流的接口设计规范。 Go 语言内置强大的 net/http 标准库,可以不依赖任何框架,快速开发高性能 RESTful API。
本文是标准实训教程,包含:
- HTTP 协议核心知识点
- RESTful API 设计规范
- Go 原生实现 RESTful API(完整 CRUD)
- 请求处理、参数获取、JSON 响应、路由规范
- 实训总结与作业
内容适合课程实验、实训报告、CSDN 技术博客发布。
二、HTTP 协议概述
2.1 什么是 HTTP
HTTP(HyperText Transfer Protocol)超文本传输协议,是一种无状态、应用层协议,基于 TCP 传输。
2.2 HTTP 特点
- 基于请求 / 响应模型
- 无状态(每次请求独立)
- 可靠传输(基于 TCP)
- 通用、可扩展
2.3 HTTP 请求结构
- 请求行(方法、URL、协议)
- 请求头
- 空行
- 请求体
2.4 HTTP 响应结构
- 状态行
- 响应头
- 空行
- 响应体
2.5 HTTP 常用请求方法(RESTful 核心)
| 方法 | 作用 | 幂等 |
|---|---|---|
| GET | 查询资源 | 是 |
| POST | 新增资源 | 否 |
| PUT | 全量更新 | 是 |
| PATCH | 部分更新 | 否 |
| DELETE | 删除资源 | 是 |
2.6 HTTP 常用状态码
- 200 成功
- 201 创建成功
- 400 参数错误
- 401 未授权
- 403 禁止访问
- 404 资源不存在
- 500 服务器错误
三、RESTful API 设计规范
RESTful 是一种接口设计风格 ,核心是用 URL 表示资源,用 HTTP 方法表示操作。
3.1 核心原则
- 用名词复数表示资源
- /users
- /orders
- /products
- 用 HTTP 方法表示行为
- GET 查询
- POST 新增
- PUT 更新
- DELETE 删除
- 用状态码表示结果
- 用 JSON 做数据交互
- 版本控制:/v1/users
3.2 标准 RESTful 接口示例
| 接口 | 作用 |
|---|---|
| GET /users | 查询所有用户 |
| GET /users/1 | 查询单个用户 |
| POST /users | 新增用户 |
| PUT /users/1 | 更新用户 |
| DELETE /users/1 | 删除用户 |
四、Go 原生 HTTP 开发 API 基础
Go 内置 net/http,开箱即用,性能极高。
4.1 最简单 HTTP 服务
package main
import "net/http"
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello Go HTTP"))
})
http.ListenAndServe(":8080", nil)
}
4.2 获取请求信息
// 请求方法
r.Method
// 请求URL
r.URL.Path
// 请求头
r.Header.Get("Content-Type")
// 获取GET参数
r.URL.Query().Get("name")
4.3 返回 JSON 数据(RESTful 必备)
import "encoding/json"
func hello(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
data := map[string]string{
"msg": "success",
}
json.NewEncoder(w).Encode(data)
}
五、RESTful API 实训实战(用户 CRUD)
我们使用 Go 原生标准库,实现一套完整的用户管理 CRUD 接口。
5.1 项目结构
go-rest-api/
├── main.go # 入口 + 路由
├── handler
│ └── user.go # 接口处理
├── model
│ └── user.go # 数据模型
5.2 模型定义(model/user.go)
package model
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
// 模拟数据库
var Users = []User{
{ID: 1, Name: "张三", Age: 20},
{ID: 2, Name: "李四", Age: 22},
}
5.3 用户接口实现(handler/user.go)
package handler
import (
"encoding/json"
"net/http"
"strconv"
"go-rest-api/model"
)
// 获取所有用户 GET /users
func GetUsers(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(model.Users)
}
// 获取单个用户 GET /users/1
func GetUser(w http.ResponseWriter, r *http.Request) {
idStr := r.URL.Path[len("/users/"):]
id, _ := strconv.Atoi(idStr)
for _, u := range model.Users {
if u.ID == id {
json.NewEncoder(w).Encode(u)
return
}
}
http.Error(w, "not found", 404)
}
// 新增用户 POST /users
func AddUser(w http.ResponseWriter, r *http.Request) {
var u model.User
json.NewDecoder(r.Body).Decode(&u)
u.ID = len(model.Users) + 1
model.Users = append(model.Users, u)
w.WriteHeader(201)
json.NewEncoder(w).Encode(u)
}
// 更新用户 PUT /users/1
func UpdateUser(w http.ResponseWriter, r *http.Request) {
idStr := r.URL.Path[len("/users/"):]
id, _ := strconv.Atoi(idStr)
for i := range model.Users {
if model.Users[i].ID == id {
json.NewDecoder(r.Body).Decode(&model.Users[i])
json.NewEncoder(w).Encode(model.Users[i])
return
}
}
http.Error(w, "not found", 404)
}
// 删除用户 DELETE /users/1
func DeleteUser(w http.ResponseWriter, r *http.Request) {
idStr := r.URL.Path[len("/users/"):]
id, _ := strconv.Atoi(idStr)
for i, u := range model.Users {
if u.ID == id {
model.Users = append(model.Users[:i], model.Users[i+1:]...)
w.WriteHeader(204)
return
}
}
http.Error(w, "not found", 404)
}
5.4 路由与入口(main.go)
package main
import (
"net/http"
"go-rest-api/handler"
)
func main() {
http.HandleFunc("GET /users", handler.GetUsers)
http.HandleFunc("GET /users/{id}", handler.GetUser)
http.HandleFunc("POST /users", handler.AddUser)
http.HandleFunc("PUT /users/{id}", handler.UpdateUser)
http.HandleFunc("DELETE /users/{id}", handler.DeleteUser)
http.ListenAndServe(":8080", nil)
}
六、接口测试(实训报告必备)
| 接口 | 方法 | 功能 |
|---|---|---|
| http://127.0.0.1:8080/users | GET | 获取所有 |
| http://127.0.0.1:8080/users/1 | GET | 获取单个 |
| http://127.0.0.1:8080/users | POST | 新增 |
| http://127.0.0.1:8080/users/1 | PUT | 更新 |
| http://127.0.0.1:8080/users/1 | DELETE | 删除 |
POST 示例请求体:
{
"name": "王五",
"age": 23
}
七、实训总结
本次实训学习了:
- HTTP 协议的请求响应、方法、状态码
- RESTful API 设计规范(资源 + 方法)
- Go 标准库 net/http 开发 Web 服务
- 实现 用户 CRUD RESTful API
- JSON 数据交互、路由、参数处理
Go 原生 HTTP 简洁、高效、无依赖,非常适合快速开发 RESTful API。
版权声明
本文为 Go 语言 HTTP 与 RESTful API 实训教程,适合课程实验、学习报告、CSDN 发布,禁止未经授权转载、抄袭、搬运。