API
API:Application Program Interface,应用程序接口是一组定义、程序及协议的集合,通过 API 接口实现计算机软件之间的相互通信。提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
API规范————RESTful API
RESTful API,REST指的是一组架构约束条件和原则。 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。
统一资源接口
什么操作就用什么接口,使用特定的HTTP方法来对服务器上的资源进行操作。主要 有五种。
- GET,从服务器申请获取资源
- POST,向服务器请求新建资源
- DELETE,删除服务器资源
- PUT,更新服务器资源(提供完整资源)
- PATCH,更新服务器资源(提供修改资源的数据)
无状态
在这种模式下,服务器不保存客户端的状态信息,而是依赖客户端在每次请求中提供必要的状态信息。服务器不需要维护客户端的状态信息,这降低了服务器的负担,使得服务器可以更好地进行水平扩展,处理更多的客户端请求。客户端可以更自由地切换和管理自己的状态,而无需依赖服务器的状态管理。
URI指向资源
URI是用于标识抽象或物理资源的紧凑字符串。它可以用来唯一地标识和定位资源。URI包括URL(统一资源定位符)和URN(统一资源名称)两种形式。提供了一种标准的方式来定位互联网上的资源。URL通常由多个部分组成,包括协议类型(如HTTP、HTTPS)、主机名、端口号和路径等。URN的设计目标是提供一个持久的标识符,即使资源的位置发生变化,标识符仍然有效。
实现用户认证
package main
import (
"encoding/json"
"net/http"
)
type User struct {
Username string `json:"username"`
Password string `json:"password"`
}
func handleLogin(w http.ResponseWriter, r *http.Request) {
// 解析JSON
var user User err :=json.NewDecoder(r.Body).Decode(&user)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest) return
}
// 验证用户名和密码
if user.Username == "root" && user.Password == "123456" {
// 登录成功,返回成功信息
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]string{ "message": "登录成功", }) }
else {
// 登录失败,返回错误信息
http.Error(w, "用户名或密码错误", http.StatusUnauthorized)
}
}
func main() {
http.HandleFunc("/login", handleLogin) err := http.ListenAndServe(":8080", nil)
if err != nil {
panic(err)
}
}
实现过程:
- 引入encoding/json和net/http
- 定义结构体,用于接收用户数据
- 构建验证登录函数
- 开启HTTP
总结
encoding/json 包提供了一组函数和类型,用于将 Go 语言中的数据结构编码为 JSON 格式,以及将 JSON 数据解码为 Go 语言中的数据结构。
net/http 是 Go 语言标准库中的一个包,提供了用于构建 HTTP 客户端和服务器的功能。
这里只是实现了简单的用户验证,后期还可以加上令牌认证、OAuth认证。