短链接服务 API 横评:2026 年开发者到底能拿到什么
- api
- developers
- link-shortener
本页内容
每一家短链接服务卖的都是同一段演示:粘贴一个长 URL,得到一个短的。它们之间的差别要到三周之后才显形——那时一个队列工作进程每小时创建一万条链接,一个 Webhook 处理器正在悄无声息地丢掉重试,还有人在问上个月的点击数据为什么没法和 CRM 对上。这份对比讲的是那个阶段,而不是那段演示。
下面要讲的是:决定一套 API 能否扛住生产环境的那几条维度,这个品类里的主要厂商在每一条上各自实际提供了什么,以及针对 LinkProfit API 的可运行示例。竞品的行为在这里用文字描述,而不是用编造的代码示例:请求的形状会变,而一段已经跑不通的复制代码,比一句解释这个端点做什么的话更糟糕。
对某些买家来说,API 就是产品本身
短链接服务的客户分两类。一类登录控制台,手工创建链接,然后看图表。另一类根本不打开控制台:链接由他们自己的软件、替他们自己的用户创建,点击数据流进他们自己的数仓。对第二类客户来说,控制台是调试工具,API 才是产品的全部。
这道分野解释了这个品类里绝大多数的失望,也正因如此,把短链接能力嵌入 SaaS 产品和采购一件市场工具,本来就是两笔不同的买卖。为第一类买家做优化的厂商,会把 API 当成定价页上的一个勾选项:它存在,文档很薄,被锁在更高的档位后面,而且只覆盖链接创建,不覆盖域名、数据分析和 Webhook。如果你要把短链接能力嵌进一款产品,这道缺口就是「按时上线」和「推倒重来」之间的差别。
真正重要的那几条维度
认证与密钥作用域
起步线是一把 bearer 令牌。真正拉开各家实现差距的,是一把泄露的令牌能干什么。一把覆盖整个账户、能删掉每一条链接的密钥就是一份负债,尤其当你的集成其实只需要创建链接的时候。要找的是:作用域限定在工作区而不是账户上的密钥;权限挂在密钥本身、而不是挂在创建它的那个人身上;以哈希形式存储、创建时只展示一次;以及可以各自独立轮换——这样你就能给每个服务发一把密钥,吊销其中一把也不至于造成停摆。
速率限制,以及撞到上限时的行为
有两个数字要紧,而它们很少被同时公布:可持续的限额,以及越线之后会发生什么。一套行为端正的 API 会返回 429,告诉你什么时候重试,并在每个响应上暴露剩余额度,于是客户端能在开始失败之前自行降速。一套在高压下返回笼统 500、或者悄悄丢掉写入的 API,则逼着你围绕猜测去搭一个过于保守的限流器。
时间窗的形状和数量级同样要紧。平均吞吐相同的情况下,一个按秒设定的上限和一个按分钟滑动的窗口,面对突发型负载的表现完全不同——而多数集成产生的恰恰是突发型负载:一场营销活动发布,九十秒内创建五千条链接,剩下一整天队列都闲着。
批量操作
一次一个 HTTP 请求地创建链接,在几百条的量级上没问题,到几十万条就变成折磨。一个接收整批、并逐条返回结果的批量端点——包括把部分失败连同出错条目的下标一起报出来——能把一个通宵的任务压缩成几分钟。要核对的细节是失败语义:一个无效 URL 会不会导致整批被拒,以及重试一批已经部分生效的数据会不会产生重复。
通过 API 拿到数据分析
几乎每一家厂商都会在控制台里展示点击图表。能让你按需要的粒度用程序把同样的数字拉出来的,就少得多了,而按套餐设定的限制恰恰藏在这里。要问三样东西:聚合汇总、粒度可选的时间序列,以及按国家、城市、设备、浏览器、来源和营销活动参数等维度的拆分。然后再问保留期、导出条数上限,以及计入你套餐额度的事件是不是 API 会返回的同一批事件。这背后的度量问题,尤其是机器人过滤和独立访客计数,在我们的链接点击跟踪指南里有专门讲解。
Rebrandly 是说明这件事为什么要紧的最清晰例子。它的跳转不限量,但数据分析本身被当作互动数据计量,截至 2026 年 8 月,各档位分别是每月 100、10,000、25,000 和 150,000 个事件。一条照常跳转、却停止上报的链接,是一种具体的故障形态,选型之前就该把它算进成本里。
Webhook 与投递保证
靠轮询去发现状态变化,正是集成变慢变贵的方式。Webhook 取代了它,而它的质量归结为四条属性:哪些事件会触发、载荷是否签名、重试计划长什么样,以及重试耗尽之后会怎样。签名校验应当针对原始请求体,并带上时间戳以防重放。重试应当摊在几个小时而不是几分钟里,这样一个发布窗口就不会让你丢掉事件。而且当某个端点被标记为失败时,厂商应当告诉你,而不是悄悄把事件丢掉。
SDK、规范与文档
一个官方 SDK 能省下一天的工作量;一份机器可读的 OpenAPI 规范,则能在 SDK 没有覆盖的任何语言里省下同样这一天,并且随着 API 演进一直省下去。截至 2026 年 8 月,Short.io 提供四个 SDK,是这个品类里官方覆盖面最广的一家。而公开发布的规范是更经久的资产,因为它能生成客户端、mock 和契约测试。
错误、分页与版本策略
三条并不光鲜、却决定维护成本的属性。错误应当机器可读,带一个与人读消息分开的稳定错误码,这样你的重试逻辑就按错误码分支,而不是靠字符串匹配。分页应当基于游标;在一张持续有写入的表上做偏移分页,注定会漏行也会重复行。版本应当明确写在路径里,一旦发布就冻结,破坏性变更放到后继版本里发布。
各家厂商各自提供了什么
| 厂商 | API 可用范围 | 公布的速率限制 | 官方 SDK | 值得注意的限制 | | --- | --- | --- | --- | --- | | Short.io | 所有套餐,含免费档 | 每秒 50 次请求,额外容量按包出售 | 四个 | 没有白标控制台,多团队仅限 Enterprise | | Dub | 核心产品,代码库开源 | 未以标称数字公布 | 有 | 合作伙伴白标位于 300 USD 档位 | | Rebrandly | 付费档位,功能按套餐分层 | 未以标称数字公布 | 有 | 数据分析按互动事件计量 | | Replug | 仅 Agency 套餐,每月 99 USD | 未公布 | 无 | 无法在更低档位上评估 API | | Shlink,自建部署 | 完整,开源 | 由你自行配置 | 社区维护 | 单租户假设,没有计费 | | LinkProfit | Growth 套餐及以上 | 每把工作区密钥每分钟 600 次请求 | 由规范生成的客户端 | 第一版使用共享 API 主机名 |
以上所有套餐与价格信息,均以 2026 年 8 月为准。
Short.io:走量的标尺
Short.io 是这个品类里在价格和吞吐上最激进的一家。它的 API 每个套餐都能用,公布的限制无论档位一律是每秒 50 次请求,额外容量按每秒 50 次请求一包出售,每包每月 50 USD。它提供四个 SDK 和一个像样的开发者文档站,自定义域名连同自动签发的证书从免费档起就已包含。
它的限制在产品的别处,而不在 API 上:它所谓的白标指的是链接上的品牌,而不是一个可换品牌的控制台;多团队支持被圈在 Enterprise 档位里;再营销 pixel 也只覆盖两个平台。如果你需要这些东西,请看我们的 Short.io 替代方案对比。
Dub:API 优先的参照系
Dub 是这个品类在设计和开发者体验上的标杆,有一个开源的内核,产品也是按 API 优先而不是控制台优先建起来的。如果你想找一个「什么叫做得好」的样板,在动手写自己的集成需求之前,先去读一遍他们的文档。
有两点值得澄清,因为这套命名很容易让人误会。Dub Partners 是提供给 Dub 自家客户的联盟计划基础设施,而不是转售 Dub 本身的途径;截至 2026 年 8 月,它的白标化位于每月 300 USD 的 Advanced 档位。Dub 自家的联盟方案是一年内按成交额支付 30%,那是推荐分成安排,而不是分销模式。
Rebrandly 与 Replug:把 API 当作升单手段
两家都把开发者访问权锁在更高档位后面,只是方式不同。截至 2026 年 8 月,Replug 的 API 只在每月 99 USD、年付 79 USD 的 Agency 套餐上提供,这意味着你没法用低成本评估这套集成。Rebrandly 的分层是一项功能一道门,而不是一堵墙:deep link 只出现在 Growth 档位,再营销 pixel 从 Professional 起提供,而上文说的互动数据上限,无论哪个档位都作用在数据分析上。
两种做法都不算稀奇,只要你本来就在门槛之上,也都行得通。对选型来说,要点在于预算上的诚实:你为了 API 而必须选的那个档位,才是你实际要买的档位,而不是你一开始看的那张对比表上的那个。
自建部署与开源
如果你的需求是一个不涉及计费、只有一个租户的内部短链接工具,Shlink 是最强的选择:MIT 许可证,PHP 编写,货真价实的 API 优先,客户端生态也成熟。等你试着拿它去服务别人,它的那些预设就会显形。slug 在整个实例范围内全局唯一,而不是按域名划定;API 密钥的角色机制离真正的租户隔离差得很远;QR 生成功能在第 5 版被移除。Kutt 通过一个定制目录支持换品牌,但节奏已经明显放缓,2026 年全年只有 16 次提交,也没有团队、Webhook 和多租户。YOURLS 从设计上就只支持一个管理员和一个域名。
LinkProfit
我们的设计瞄准的是开头说的第二类买家。密钥按工作区或按合作伙伴签发,带有明确的作用域,只展示一次,并以 SHA-256 哈希形式存储。默认限制是工作区密钥每分钟 600 次请求,合作伙伴密钥 1,200 次,以滑动窗口实施,每个响应都带 X-RateLimit-Limit、X-RateLimit-Remaining 和 X-RateLimit-Reset,返回 429 时还会带上 Retry-After。批量创建每次调用最多接收 100 条链接。数据分析是一等公民,而不是控制台专属:汇总、时间序列、维度拆分,以及最多 100,000 行的流式 CSV 导出。Webhook 带签名,并在大约十二小时内重试五次。规范由校验请求所用的同一批 schema 生成,因此文档不可能与实现脱节。
API 访问权从 Growth 套餐开始提供,这也正是解锁自定义控制台域名的那个档位;完整拆解在定价页面上。第一版里那条如实承认的限制:API 由一个共享主机名提供,因此白标合作伙伴在给客户的文档里把它写成自家的 API,但它并不住在自己的域名上。这是路线图上的一项,而不是一件被藏起来的事。
对接 LinkProfit API 实战
创建一条链接
curl -X POST https://api.linkprofit.com/v1/links \
-H "Authorization: Bearer lp_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/spring-collection",
"slug": "spring",
"domain_id": "dom_7Kq2f9",
"expires_at": "2026-10-01T00:00:00Z"
}'
批量写入
批量端点每次调用最多接收 100 条链接,并逐条返回结果,因此部分失败会指出出问题的那一条,而不是把整批拒掉。
const response = await fetch('https://api.linkprofit.com/v1/links/bulk', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.LINKPROFIT_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
links: batch.map((row) => ({ url: row.destination, slug: row.code, domain_id: domainId })),
}),
});
if (response.status === 429) {
const waitSeconds = Number(response.headers.get('retry-after') ?? '1');
await new Promise((resolve) => setTimeout(resolve, waitSeconds * 1000));
}
把数据分析读回来
拆分接口接收一个维度参数,这让接口面保持小而可预期,而不是每张图表都加一个端点。
curl -G https://api.linkprofit.com/v1/analytics/breakdown \
-H "Authorization: Bearer lp_live_xxxxxxxxxxxxxxxx" \
-d dimension=city \
-d date_from=2026-07-01 \
-d date_to=2026-07-31
可用的维度覆盖国家、城市、设备、浏览器、操作系统、来源,以及三个主要的营销活动参数,足以在你自己的报表里复现控制台上的数字。
校验一个 Webhook
事件会带上 X-LinkProfit-Signature,格式为 t=timestamp,v1=hex。被签名的载荷是时间戳、一个点,再加上原始请求体,因此校验必须发生在任何可能重新序列化它的 JSON 解析之前。
import { createHmac, timingSafeEqual } from 'node:crypto';
export function isValidSignature(rawBody, header, secret) {
const fields = new Map(header.split(',').map((pair) => pair.split('=')));
const timestamp = Number(fields.get('t'));
// Reject anything outside a five minute window to limit replay.
if (!Number.isFinite(timestamp) || Math.abs(Date.now() / 1000 - timestamp) > 300) return false;
const expected = createHmac('sha256', secret).update(`${timestamp}.${rawBody}`).digest('hex');
const received = Buffer.from(fields.get('v1') ?? '', 'hex');
const computed = Buffer.from(expected, 'hex');
return received.length === computed.length && timingSafeEqual(received, computed);
}
投递失败会在一分钟、五分钟、三十分钟、两小时和十二小时之后各重试一次。最后一次尝试之后,该端点会被标记为失败并给账户所有者发邮件,于是一个坏掉的处理器以通知的形式浮出水面,而不是变成一个月后才被发现的数据缺口。
用一个下午评估一套 API
- 在包含 API 访问权的最便宜套餐上创建一把密钥,并记下这个套餐是不是你本来也会买的那个。
- 创建、读取、更新并删除一条链接,检查响应里是否带有速率限制头部。
- 故意超出限额,确认你拿到的是带重试提示的 429,而不是一个笼统的失败。
- 发一个包含一条无效 URL 的批量请求,看看部分失败是怎么上报的。
- 拉一份上个月按城市的拆分,把总数和控制台上的对一遍。
- 用一个能抓取请求的端点注册 Webhook,触发一次事件,校验签名,然后把端点下线,观察它的重试计划。
- 索取 OpenAPI 文档,并用它生成一个客户端。
- 读一遍版本策略,以及最近十二个月的更新日志。
第三、第四和第六步是多数选型会跳过的,而它们恰恰是能预测这套集成在凌晨两点表现如何的那几步。
这个品类里有一个货真价实的参考实现 Dub,有一个货真价实的走量选项 Short.io,还有一长串把 API 当作升单手段而非设计目标的产品。我们自己的做法——带作用域的密钥、公开的限额配上诚实的响应头部、把数据分析和域名做成一等资源,以及由校验 schema 生成的规范——记录在 API 功能页上,快速上手、分页、错误码和 Webhook 指南则在文档里。
大家常问的问题
哪家短链接服务公布的速率限制最高?
截至 2026 年 8 月,主流品类里最高的标称数字来自 Short.io:每个套餐都给到每秒 50 次请求,免费档也不例外,额外容量按每秒 50 次请求一包出售,每包每月 50 USD。不过这些标称数字并不能直接互相比较,因为各家计量所用的时间窗并不一样。一个按秒设定的上限,会拒掉一次按分钟滑动窗口本来能吸收的突发流量,所以请拿这个限制去对照你自己真实的流量形状,而不是去对照另一家厂商的数字。
我到底需不需要 API,还是 CSV 导入就够了?
一次性迁移用 CSV 完全够用。当创建链接的触发方不再是坐在控制台前的人,你才真正需要 API:一套给每位收件人生成一条链接的营销活动工具,一款替用户缩短 URL 的产品,一个自动发帖的排期程序。判断标志是,体量随着你的客户数增长,而不是随着你的市场团队人数增长;再加上任何需要把点击数据读回自家报表的诉求。
为什么有些厂商把 API 放在自家最贵的套餐后面?
因为 API 访问权与体量、与代理商用法高度相关,所以它是一根很好用的升单杠杆。截至 2026 年 8 月,Replug 只在每月 99 USD、年付 79 USD 的 Agency 套餐上提供 API。对开发者来说,实际后果是评估成本很高:你没法先在便宜的档位上试通集成再决定要不要投入——这正是把 API 在入门套餐就开放的厂商列进候选名单的正当理由。
怎么处理 Webhook 重试才不会产生重复?
按至少投递一次来设计,让你的处理器具备幂等性。把载荷里的事件标识存下来,每次收到先查一遍是否已经处理过,再决定要不要真的干活。签名要在解析之前针对原始请求体校验,时间戳落在几分钟容差窗口之外的事件一律拒绝,并且尽快返回 2xx,把耗时的活儿丢进队列而不是同步做完——因为在发送方看来,一个慢的处理器和一个坏掉的处理器长得一模一样。
开源的短链接程序算得上商业 API 的替代品吗?
如果只是单租户的内部工具,算。Shlink 是其中最强的选择,采用 MIT 许可证,而且是货真价实的 API 优先。限制会在你开始服务别人的时候显形:slug 在整个实例范围内全局唯一,而不是按域名划定;API 密钥的角色机制离真正的多租户隔离还差得远;QR 生成功能在第 5 版被移除;完全没有计费能力;维护也压在一位维护者身上。Kutt 和 YOURLS 离多租户用法更远。
API 的版本策略能说明厂商的什么问题?
比多数功能清单说明的都多。一家把版本冻结、破坏性变更只在新路径下发布的厂商,等于在告诉你:你的集成有一段明确的生命周期。而一家 API 不带版本、更新日志里满是字段改名的厂商,等于在告诉你:维护成本归你。请追问它的弃用政策是什么,后继版本发布之后旧版本还会继续服务多久,以及有没有一份可以直接拿来生成客户端的机器可读规范。