将我的服务开放给用户 | 青训营

82 阅读2分钟

开放的API

开放API允许第三方开发者通过对你的服务进行访问和交互,从而构建基于你的服务的应用程序、工具或集成解决方案。以下是开放API的原理和相关考虑:

定义和文档化API: 首先,你需要定义清晰的API接口,包括请求和响应的数据格式、允许访问的功能和操作等。然后,编写详细的API文档,描述API的使用方式、参数、认证授权等信息,go语言的gorm很好地充当这个角色,获取认证等等。

身份验证和访问控制: 为了确保安全性和控制访问权限,你可以实施身份验证和访问控制机制。这可以包括使用API密钥、令牌或OAuth等方式来验证第三方应用程序的身份,并限制其对敏感数据或功能的访问权限。 比如使用jwt令牌验证。可以使用token验证用户登录的有效性,保证一定的安全。

func Authentication() gin.HandlerFunc {
    return func(c *gin.Context) {
        // tokenString := c.GetHeader("Authorization")
        tokenString := c.Query("token")

        userID, err := utils.ValidateToken(tokenString)
        if err != nil {
            c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid token"})
            c.Abort()  // 验证不通过,阻止API处理函数继续执行
            return
        }

这里的token充当第一层防护来验证用户有效性


func GenerateJWTToken(username string) (string, error) {
	// 设置令牌过期时间为一小时后
	expirationTime := time.Now().Add(1 * time.Hour)

	// 创建JWT令牌的声明
	claims := jwt.MapClaims{
		"username": username,
		"exp":      expirationTime.Unix(),
	}

JWT(JSON Web Token)是一种用于在网络应用间传递信息的开放标准(RFC 7519)。它基于JSON格式,由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。JWT令牌可以用于身份验证和授权,常用于Web应用程序和API之间的安全通信。

这里的jwt也作为token的一类,来做安全防御用途。在头部,载荷声明后,开始使用算法来签名。类似于ssh密钥这里使用rsa算法得出一长串token

token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
	// 使用秘钥签名令牌   
	signedToken, err := token.SignedString([]byte("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnP89SqYXhyoSyG1NaIiPD99OX/lf3+M1lvcedK/316o09oBG60slF8UYKWrQCAQy+uYHAgS7MI7+Dcb5IxJ3bDuu4yx/YbnB+yaF8Gq34LPL0z3hNTeAjkfZ6vZlrQt7Ybj/3xifGPjrnc28B2qjGyyV3K8uLrVuSUegOjrWBA6qVEUkTEImnQdVrUcZ8WbGLO9k9izkZ5xF5ZwCfsLJF1Artc5wtDKlKc72bt66FDmgCjWjjFIOBGyKHEUTxN84uuh/KDdC7fi6it4cyWrgFP7UXDM0y/ltIWArh9tSByh2pTij0paChYYy9ktozI/vLrDTSFr3ExjPyI5yFB+oh"))

提供合适的数据交互方式: 选择适当的数据交互方式,如RESTful API或GraphQL等,以满足不同开发者的需求和技术栈。构造API可以使用单元测试功能,部署构建虚拟环境sqlmock来验证功能的完备性。