4 个版本 (破坏性更新)
0.6.0 | 2022年12月28日 |
---|---|
0.5.0 | 2022年12月27日 |
0.2.0 | 2022年12月14日 |
0.1.0 | 2022年12月14日 |
#5 in #path-segment
17KB
284 行
戈林克
戈林克包是一个用于解析短链接服务的 URL 的引擎。你提供一个要扩展的链接和一个将短 URL 映射到长 URL 的函数,这个包将
-
规范化你的输入以忽略大小写和连字符:`http://go/My-Service` 和 `http://go/myservice` 被视为映射函数的相同输入
-
将二级路径追加到解析的 URL 中:如果你的映射函数对于给定的短链接 `foo` 返回 `http://example.com`,那么对 `http://go/foo/bar/baz` 的请求将解析为 `http://example.com/foo/bar/baz`
-
当适用时应用模板:使用简单的模板语言,你可以强大地在你 URL 中放置剩余的路径段,并在没有剩余的路径段时提供回退值。例如,如果你的映射函数对于给定的短链接 `prs` 返回以下 URL
https://github.com/pulls?q=is:open+is:pr+review-requested:{{ if path }}{ path }{{ else }}@me{{ endif }}+archived:false
那么对 `http://go/prs` 的请求将返回所有你被分配的 Github PR 的 URL
https://github.com/pulls?q=is:open+is:pr+review-requested:@me+archived:false
并且对 `http://go/prs/jameslittle230` 的请求将返回我(@jameslittle230)被分配的 Github PR 的 URL
https://github.com/pulls?q=is:open+is:pr+review-requested:jameslittle230+archived:false
此解析器执行 Tailscale 的戈林克项目 中描述的所有功能
此包不提供网络服务或创建短链接的接口;它只提供将短 URL 解析为长 URL 的算法。
使用方法
戈林克包不关心你如何存储或检索给定短 URL 的长 URL;你可以将它们存储在内存中、数据库中或磁盘上,只要它们可以从你传递到 `resolve` 函数的闭包中检索到即可
fn lookup(input: &str) -> Option<String> {
if input == "foo" {
return Some("http://example.com".to_string());
}
None
}
let resolved = golink::resolve("http://go/foo", &lookup)
match computed {
Ok(GolinkResolution::RedirectRequest(url)) => {
// Redirect to `url`
}
Ok(GolinkResolution::MetadataRequest(key)) => {
// `key` is the original shortlink.
// Return JSON that displays metadata/analytics about `key`
}
Err(e) => {
// Return a 400 error to the user, with a message based on `e`
}
}
依赖关系
~2.2–3.5MB
~93K SLoC