如何将我的服务开放给用户|豆包Mars Code AI刷题

112 阅读3分钟

构建API接口

1.什么是API

API是应用程序编程接口的缩写,是一些预先定义的函数,或指软件系统不同组成部分衔接的约定,用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问原码,或理解内部工作机制的细节。API本身是抽象的,它仅定义了一个界面,而不涉及应用程序在实际实现过程中的具体操作。其主要目的是让应用程式开发人员得以呼叫一组例程功能,而无须考虑其底层的原始码为何、或理解其内部工作机制的细节。

2.构建基础API

我们需要使用GO标准库中的net/http包处理请求和响应

package main
 
import (
    "fmt"
    "log"
    "net/http"
)
 
func helloHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello!")
}
 
func main() {
    http.HandleFunc("/", helloHandler)
    http.ListenAndServe(":8080", nil)
}
 

这时,我们可以在本地运行local host:8080,可以看到hello!的界面,我们便成功构建基础的API。

用户认证

用户认证是确认用户身份的过程,确保只有合法用户可以访问你的服务。在API开放给公众使用时,用户认证尤为重要,防止未经授权的访问和滥用。

常见的用户认证方式 基本认证:用户通过在请求头中提供用户名和密码进行认证。但是这种方式不够安全,因为密码是明文传输的,容易被截获。 Bearer令牌认证:用户在请求头中使用令牌来认证。令牌通常是由服务器签发的加密字符串,比较安全,不需要传输密码。 OAuth认证:OAuth是一个用于授权的开放标准,允许用户授权第三方应用访问他们的资源。这是常见的社交媒体登录方式。

如何实现用户认证

package main  
  
import (  
"crypto/hmac"  
"crypto/sha256"  
"encoding/hex"  
"fmt"  
"net/http"  
)  
  
// 定义用户结构体  
type User struct {  
ID uint `json:"id"`  
APIKey string `json:"api_key"`  
}  
  
// 生成API密钥  
func generateAPIKey(userID uint) string {  
// 在这里实现生成API密钥的逻辑,可以根据用户ID或其他信息生成唯一的API密钥  
// 这里只是简单地将用户ID转换为字符串作为示例  
apiKey := fmt.Sprintf("%d", userID)  
return apiKey  
}  
  
// 验证API密钥  
func verifyAPIKey(user *User, apiKey string) bool {  
generatedAPIKey := generateAPIKey(user.ID)  
return apiKey == generatedAPIKey  
}  
  
// 处理请求并验证API密钥  
func handleRequest(w http.ResponseWriter, r *http.Request) {  
userID := r.FormValue("user_id") // 从请求中获取用户ID  
user := &User{ID: uint(userID)} // 创建用户结构体实例  
apiKey := r.FormValue("api_key") // 从请求中获取API密钥  
if verifyAPIKey(user, apiKey) {  
fmt.Fprintln(w, "API Key验证成功")  
} else {  
fmt.Fprintln(w, "API Key验证失败")  
}  
}  
  
func main() {  
http.HandleFunc("/api/verify", handleRequest) // 设置请求处理程序  
http.ListenAndServe(":8080", nil) // 启动服务器,监听端口8080  
}
上述代码中,我们首先定义了一个User结构体,其中包含用户ID和API密钥字段。
然后,我们实现了generateAPIKey函数来根据用户ID生成唯一的API密钥。
接下来,我们实现了verifyAPIKey函数来验证给定的API密钥是否与用户ID生成的API密钥匹配。
最后,我们使用http.HandleFunc函数将处理程序绑定到/api/verify路径上,并使用http.ListenAndServe函数启动服务器。
当客户端发送带有用户ID和API密钥的GET请求到/api/verify路径时,服务器将验证API密钥的有效性并返回相应的结果。

pixiv.gif