我在Go中创建了一个API,可以通过ElasticSearch搜索或直接访问Element
,然后ElasticSearch会将一些数据添加到JSON有效负载中,并将其返回给用户。在搜索时,我返回了Elements
的列表,如果用户希望获得更多信息,我希望能够提供指向特定Element
的直接网址。
但是我无法确定应用程序应该如何找出自己的URL。如果它不能,那么URL本身的合理替代方案是什么?
使用net / http软件包和gorilla / mux进行基于网络的事情。
答案 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")