【问题标题】:API Discovering its own URL GolangAPI 发现自己的 URL Golang
【发布时间】:2015-02-28 04:58:48
【问题描述】:

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

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

将 net/http 包和 gorilla/mux 用于基于网络的事物。

【问题讨论】:

    标签: go


    【解决方案1】:

    您可以通过按名称查找路由并使用 Route.URL 生成 url 来“反转” gorilla/mux url

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

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

    一旦你有了路由,你就可以通过将参数传递给 URL 来构建一个 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")
    

    【讨论】:

    • 谢谢,这是很好的信息。虽然看起来我无法在不定义主机是什么的情况下获得主机,但我发现这对于我正在尝试做的事情有点草率。
    猜你喜欢
    • 2016-05-06
    • 2017-07-09
    • 2016-05-08
    • 2019-03-18
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    相关资源
    最近更新 更多