API发现自己的URL Golang

时间:2015-02-27 16:59:59

标签: go

我在Go中创建了一个API,可以通过ElasticSearch搜索或直接访问Element,然后ElasticSearch会将一些数据添加到JSON有效负载中,并将其返回给用户。在搜索时,我返回了Elements的列表,如果用户希望获得更多信息,我希望能够提供指向特定Element的直接网址。

但是我无法确定应用程序应该如何找出自己的URL。如果它不能,那么URL本身的合理替代方案是什么?

使用net / http软件包和gorilla / mux进行基于网络的事情。

1 个答案:

答案 0 :(得分:1)

您可以通过按名称查找路线来“反转”大猩猩/多路复用网址,并使用Route.URL生成网址

您需要为自己的路线命名,以便通过Router.Get轻松查找。

r := mux.NewRouter()
r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler).
  Name("article")

一旦你有了路线,就可以通过将参数传递给URL

来建立一个网址
url, err := r.Get("article").URL("category", "technology", "id", "42")
// "/articles/technology/42"

请注意,如果您希望自动插入主机,则需要在路线上定义主机:

r := mux.NewRouter()
r.Host("{subdomain}.domain.com").
  HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler).
  Name("article")

// url.String() will be "http://news.domain.com/articles/technology/42"
url, err := r.Get("article").URL("subdomain", "news",
                                 "category", "technology",
                                 "id", "42")