#url #path #templating #path-segment #link #short #engine

golink

支持规范化、路径追加和模板化的短链接扩展引擎

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

Apache-2.0 OR MIT

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