- Fork 本项目
- 去 Cloudflare Pages 创建一个项目,把你 Fork 的项目设置为存储库
- 设置,绑定里,添加一个 kv 数据库,数据库的名称必须是
kv - 添加环境变量。
- 构建配置(可选,用于构建 web 面板,不构建不影响 API),框架预设选择 Vue,剩下保持默认,然后保存即可。
- 在部署里,重试最新的部署,如果你修改配置前就已经部署了的话。
环境变量如下
| 名称 | 描述 | 例子 |
|---|---|---|
| domain | 你的域名,全小写,不要携带协议头 | b0.by |
| tokens | 是一个数组,里面包含你允许的 token | ["TheTokenHere","iQv1qzkLLrjFdVfThxUMn76Tfu9EAnkXgo9E07F8iZx"] |
tokens 不建议用太奇怪的字符,长度建议 43 位大小写字母数字(因为这样刚好是 128 bit 凑个整)
请求通常包含
| 请求头 | 值 |
|---|---|
| Authorization | Bearer TheTokenHere |
| Content-Type | application/json(建议包含) |
Authorization 在大多数时候都要携带,总是携带目前不会导致错误。
Content-Type 只建议在请求体是 JSON 时携带,但无论是否携带应该都不会导致错误。
| 名字 | 类型 | 描述 | 是否存在 |
|---|---|---|---|
| ok | boolean | 请求是否成功 | 总是 |
| msg | string | 请求相关信息 | 总是 |
| data | string | 请求成功时的响应 | 不一定 |
200 响应
请求成功
400 响应
请求中包含无效的选项字段。
403 响应
Authorization 请求头有误或无权限。
404 响应
没有此短链接
429 响应
触发了速率限制,具体的响应可能由 cloudflare 提供。
1101 响应
你传入的参数爆掉了服务端。这时传回的错误码和内容由 cloudflare 提供,它可能是任何内容。
| 名字 | 描述 |
|---|---|
| Rate limit exceeded | 触发了速率限制 |
| Invalid URL | 无效的 URL |
| Provide either expiration or expirationTtl, not both | 提供 expiration 或 expirationTtl,但不能同时提供 |
| expirationTtl must be at least 60 seconds | expirationTtl 必须至少为 60 秒 |
| Forbidden | 禁止访问 |
| Good | 请求成功 |
| Updated | 短链接已更新 |
| Deleted | 短链接已删除 |
| Not Found | 短链接不存在 |
| Provide either url, expiration or expirationTtl | URL, expiration 和 expirationTtl 都不存在 |
| Provide short | 缺少 short 字段 |
| Provide q | q 没有值 |
| Invalid JSON | 你传的不是 JSON,但应该传 JSON |
| expiration must be greater than the current time | 你来自过去 |
| length must be less than 512 | 你没事吧 |
| Delete a non-exist short link is not permit | 删除了不存在的短链接 |
| No short link is provided | 没有提供短链接字段 |
| Update a non-exist short link is not permit | 不允许更新不存在的短链接 |
GET /api/v1/get?q=short
请求参数
| 名字 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| q | string | 必填:需要获取长链接的短链接 | 无 |
该 API 不会检查 Authorization
该 API 可以不用携带 Content-Type
响应示例
200 响应
{
"ok": true,
"msg": "Good",
"data": {
"url": "http://www.reallylong.link"
}
}| 名字 | 类型 | 描述 |
|---|---|---|
| data.url | string | 长链接 |
GET /api/v1/list?q=nekos.chat&c=nextCursor&all=true
请求参数
| 名字 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| q | string | 可选:长链接中包含的查询字符串 | 无 |
| c | string | 可选:分页游标 | 无 |
| all | boolean | 可选:是否一次性返回全部 | false |
分页游标的值由上一次请求 list 的 data.cursor 提供,用于获取下一页的结果。
当 all 为 true 时,仍然可以指定 cursor,这样它只会返回从你指定的 cursor 之后的条目。
响应示例
200 响应
{
"ok": true,
"msg": "Good",
"data": {
"cursor": "nextCursor",
"list_complete": false,
"links": [
{
"short": {
"key": "123Abc",
"noHttps": "b0.by/123Abc",
"full": "https://b0.by/123Abc"
},
"url": "http://www.reallylong.link",
"expiration": 123456
},
{
"short": {
"key": "456Def",
"noHttps": "b0.by/456Def",
"full": "https://b0.by/456Def"
},
"url": "http://www.anotherlong.link",
"expiration": 654321
}
]
}
}| 名字 | 类型 | 描述 |
|---|---|---|
| data.cursor | string | 分页游标 |
| data.list_complete | boolean | 列表是否完整 |
| data.links[].short.key | string | 短链接键 |
| data.links[].short.noHttps | string | 不含协议头的短链接 |
| data.links[].short.full | string | 完整短链接 |
| data.links[].url | string | 长链接 |
| data.links[].expiration | number | 过期时间戳 |
当长链接大于等于 1022 个字符(ACSII),data.links[].url 将不存在。
如果条目是从奇奇怪怪的地方加进去的,data.links[].expiration 有可能不存在。
当设置了查询字符串时,links 可能是空数组。
当 list_complete 为 true 时,cursor 不存在。
links 数组单次最多返回 1000 条,但无论是不是最后一页,返回的内容都可能少于 1000 条。
当配置了 all=true 时,一定会列出剩下的全部条目,因此,list_complete 一定为 true,cursor 一定不存在。
POST /api/v1/create
请求体
{
"url": "http://www.reallylong.link",
"length": 6,
"number": true,
"capital": true,
"lowercase": true,
"expiration": 123456,
"expirationTtl": 60
}| 名字 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| url | string | 必填:需要缩短的长链接 | 无 |
| length | number | 可选:短链接的长度 | 6 |
| number | boolean | 可选:是否包含数字 | true |
| capital | boolean | 可选:是否包含大写字母 | true |
| lowercase | boolean | 可选:是否包含小写字母 | true |
| expiration | number | 可选:链接的过期时间戳 | 无 |
| expirationTtl | number | 可选:链接的存活时间(秒) | 无 |
当 expiration 和 expirationTtl 同时未指定时,expirationTtl 值为 2592000(30 天)
expiration 和 expirationTtl 不能同时有值
expirationTtl 不得小于 60
url 字段不得省略协议(http:// 或 https://)
服务端返回的短链接长度可能会大于 length 值,在该值小于 3 时很可能发生(因为没有足够的短链接了)
响应示例
200 响应
{
"ok": true,
"msg": "Good",
"data": {
"short": "b0.by/123Abc"
}
}| 名字 | 类型 | 描述 |
|---|---|---|
| data.short | string | 生成的短链接 |
当 lowercase 为 false 并且 capital 为 true 时,返回的域名也会大写。(以便生成的 QR 码使用数字字母模式,而不是二进制模式)
PUT /api/v1/update
请求体
{
"short": "123Abc",
"url": "http://www.newlong.link",
"expiration": 123456,
"expirationTtl": 60
}| 名字 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| short | string | 必填:需要修改的短链接 | 无 |
| url | string | 可选:新的长链接 | 无 |
| expiration | number | 可选:新的过期时间戳 | 无 |
| expirationTtl | number | 可选:新的存活时间(秒) | 无 |
url expiration expirationTtl 至少包含一项。
当 expiration 和 expirationTtl 同时未指定时,expirationTtl 值为 2592000(30 天)
expiration 和 expirationTtl 不能同时有值
expirationTtl 不得小于 60
url 字段不得省略协议(http:// 或 https://)
响应示例
200 响应
只有默认响应的内容
DELETE /api/v1/delete
请求体
{
"short": "123Abc"
}| 名字 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| short | string | 必填:需要删除的短链接 | 无 |
响应示例
200 响应
只有默认响应的内容