gpt4 book ai didi

go - 如何使用 "slashUrls"而不是 QueryString。 (无需订购)

转载 作者:数据小太阳 更新时间:2023-10-29 03:28:51 25 4
gpt4 key购买 nike

我正在使用 gorilla-mux 来路由我的 url,但我发现了一个困难:

我的客户更喜欢带斜杠的 url 而不是传统的查询字符串。我的意思是:

域/处理程序/filter1/val1/filter2/val2...

代替

域/处理程序?filter1=val1&filter2=val2...

重要问题:使用查询字符串时,“变量”的顺序并不重要,它们中的任何一个都可能丢失而不会导致路由错误或 NotFound。

当使用查询字符串时,'vars' 的顺序并不重要,我可以错过其中任何一个而不会得到错误的路由此时此刻,我正在编写一个置换算法,该算法创建 url 以使用相同的功能处理它们。

有更好的方法吗?

最佳答案

我为自己的需要写了一个“url生成器”

https://github.com/daniloanp/SlashedQueryUrls

它非常简单和天真,但它对我有用。

我的存储库中有一个很好的用法示例:

package main

import (
"fmt"
"github.com/daniloanp/muxUrlGen"
"github.com/gorilla/mux"
"net/http"
)

func HandleUrlsWithFunc(rtr *mux.Router, urls []string, handler func(w http.ResponseWriter, r *http.Request)) {
for _, url := range urls {
rtr.HandleFunc(url, handler)
}
}

func echoVars(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
fmt.Fprintln(w, r.URL.String(), "\n\n")
for k, i := range mux.Vars(r) {
fmt.Fprintln(w, k, ": ", i)
}
}

func main() {
var url string
var urls []string

rtr := mux.NewRouter()

url = "/handl/v1/{v}/v2/{v'}"
rtr.HandleFunc(url, echoVars)
// The above code works by we cannot missing any var OR Even

// Using "long notation"
urls = muxUrlGen.GetUrlVarsPermutations("/handlLong/v1/{v:[0-9]+}/v2/{v'}", true)
HandleUrlsWithFunc(rtr, urls, echoVars)

// Using "long notation" and Optional vars
urls = muxUrlGen.GetUrlVarsPermutations("/handlLongOptional/v1/{v}?/v2/{v'}?", true)
HandleUrlsWithFunc(rtr, urls, echoVars)

// Using "short notation"
urls = muxUrlGen.GetUrlVarsPermutations("/handlShort/{v1}/{v2}", false)
HandleUrlsWithFunc(rtr, urls, echoVars)

// Using "short notation" and Optional vars
urls = muxUrlGen.GetUrlVarsPermutations("/handlShortOptional/{v1}?/{v2}?", false)
HandleUrlsWithFunc(rtr, urls, echoVars)

http.Handle("/", rtr)
fmt.Println("Server running at http://127.0.0.1:8080")

http.ListenAndServe(":8080", nil)
}

谢谢大家。

关于go - 如何使用 "slashUrls"而不是 QueryString。 (无需订购),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27595633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com