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

96 阅读2分钟

构建API接口

在Go语言中,构建API的过程应该是:创建路由处理请求响应。以下将使用net/http包的函数,来演示:

image.png

打开浏览器后,在地址栏输入:localhost:8888/就会看到“hello world”。

分析

什么是URL

这是一个URL示例:https://www.example.com:8080/articles?pa… 在这个示例中:

  • 协议是https
  • 主机名是www.example.com(有时,这里也会放IP地址)。表示了服务器的域名或地址。
  • 端口是8080。
  • 路径是/articles。表示了资源在服务器上的具体路径
  • 查询的参数是page=2和category=tech。
  • 片段表示是section-3。

设置路由

在主函数中,我们首先使用http.HandleFunc来设置路由,将特定的路径,即URL映射到需要处理的函数,即图中的Handler函数。那么,什么是设置路由呢?举个例子,当你正在开发一个博客网站,你希望不同的URL上显示了不同的页面,而页面对应的功能也不一样。为此,你需要将URL路径映射到相应的处理函数,来实现你的功能。

处理函数

现在,我们来分析处理函数Handler。它有两个参数w http.ResponseWriterr *http.Request,分别用于写入响应和代表接收到请求。函数内部,我们打印了“hello world”。这里有人可能会问,为什么不是用fmt.Printf,而是用fmt.Fprintf呢?虽然这两者都是格式化打印,但前者的作用是打印到标准输出(终端),而后者是将内容写入到指定的输出流(文件、网络连接、缓冲区等)。

启动服务器并监听端口

http.ListenAndServe函数用于启动一个http服务器,并监听填入的端口。图中我们填入的是8888端口,实际“:”前可以填IP地址,这里我没填,意味着IP地址不受限制,任何IP都可以访问。至于第二个参数为什么填nil,这是因为填入nil后,我们将使用默认的路由器,这个路由器会使用http.DefaultServeMux,将请求映射到http.HandleFunc中的处理函数。

用户认证

下面,我将使用JWT(Json Web Token)来实现用户认证。首先我们需要在终端中输入go get github.com/dgrijalva/jwt-go

获取token

image.png

解析token

image.png

集成

让我们来分析一下实现的逻辑。首先注册一个路由,对外提供让我们获得Token,然后我们需要创建一个中间件来验证客户的Token是否正确,如果正确则可以在收保护的路由中继续使用。