跳到正文
LinkProfit

客户端库

LinkProfit 官方的 Node、Python 和 PHP 客户端库:重试、幂等和分页遵循同一套约定,另附各语言的快速上手示例。

更新于 2026年8月14日

REST API 就是普通的 HTTP 和 JSON,用一个 fetch 调用去访问它完全够用。客户端库存在的意义,在于那些没人愿意写第二遍的部分:正确地重试一个被限流的请求、让重试的创建操作保持安全,以及顺着游标把一个列表翻到底。

三个库,一套约定:

| 语言 | 包名 | 源码位置 | | --- | --- | --- | | Node.js / TypeScript | @linkprofit/sdk | packages/sdk-node | | Python | linkprofit | sdk/python | | PHP | linkprofit/linkprofit-php | sdk/php |

安装

这些包还没有发布到 npm、PyPI 或 Packagist。 发布要等各个仓库账号就绪;代码本身已经完整,今天就可以从仓库的本地副本安装,而一旦账号到位,下面的命令就会变成一行 npm install @linkprofit/sdk(其他语言同理)。

Node,从本地副本安装:

npm install /path/to/linkprofit/packages/sdk-node

Python,从本地副本安装:

pip install /path/to/linkprofit/sdk/python

PHP,在 composer.json 中通过 Composer 的 path 仓库安装:

{
  "repositories": [
    { "type": "path", "path": "/path/to/linkprofit/sdk/php" }
  ],
  "require": {
    "linkprofit/linkprofit-php": "*"
  }
}

三个库一致的行为

这些库刻意写得平淡,也刻意写得彼此相像。行为只需要理解一次,在每种语言里都成立。

身份认证。 你传入一个工作区密钥(lp_live_…),客户端会在每个请求上设置 Authorization 请求头。基础 URL 是一个可选项,因此同一份代码在测试中可以指向本地实例。权限与轮换详见身份认证

尊重服务端的重试。 429 和临时性的 5xx 会带退避地重试,Retry-After 会被遵循而不是靠猜——窗口何时释放,服务端本来就知道。尝试次数有上限,而那些本身就有问题的请求(validation_failedconflictnot_found)绝不会被重试:重复发送一个错误的请求,只会白白消耗限流配额。

幂等的写操作。 每一次写调用都会带上 Idempotency-Key,因此网络超时后的重试返回的是已保存的响应,而不会再创建一条链接。当重试可能来自另一个进程或稍后的一次运行时,你也可以自己提供幂等键——订单 id、任务 id 都可以。幂等键会保存 24 小时;同一个幂等键搭配不同的请求体会返回 409

把游标分页变成迭代器。 列表端点采用游标分页,客户端把它们暴露成迭代器:你直接遍历链接,当前一页取完时客户端自动取下一页,游标变为 null 时停止。不必自己算页码,也不会因为差一错误而悄悄漏掉一条记录。

错误即异常。 失败会抛出该语言中自然的错误类型,其中带有 API 的 code、给人看的消息,以及校验失败时逐字段的 details。请按错误码分支处理,而不是按消息文本——错误码才是写进文档的约定

Node 客户端的请求与响应类型,由参考文档所渲染的同一份 OpenAPI 文档生成——该文档发布在 /openapi.json——因此类型不可能与线上运行的 API 产生偏差。Python 和 PHP 客户端则由人手对照同一份文档实现,各自采用本语言的惯用写法。

快速上手

每个包都附带一份 README,列出它的完整接口;下面的片段展示的是三个库共有的形态——用密钥构造客户端,调用对应的资源分组,拿回一个有类型的对象。

Node

import { LinkProfit } from "@linkprofit/sdk";

const client = new LinkProfit({ apiKey: process.env.LINKPROFIT_API_KEY });

const created = await client.createLink({
  url: "https://example.com/summer-sale",
  title: "Summer sale",
});

console.log(created.data.short_url);

Python

import os

from linkprofit import LinkProfit

client = LinkProfit(os.environ["LINKPROFIT_API_KEY"])

created = client.create_link(
    {"url": "https://example.com/summer-sale", "title": "Summer sale"}
)

print(created["data"]["short_url"])

PHP

<?php

require __DIR__ . '/vendor/autoload.php';

use LinkProfit\LinkProfit;

$client = new LinkProfit(getenv('LINKPROFIT_API_KEY'));

$created = $client->createLink([
    'url' => 'https://example.com/summer-sale',
    'title' => 'Summer sale',
]);

echo $created['data']['short_url'];

我该用哪一个

  • Node / TypeScript —— 接口最完整,因为它的类型直接来自 OpenAPI 文档。JavaScript 后端、serverless 函数或构建脚本的自然之选。
  • Python —— 用于报表和数据工作:把分析数据拉进 notebook、定时任务或某个看板的数据源。
  • PHP —— 面向 CMS 那一侧的世界。比如一个 WordPress 插件,或者一个在内容发布时顺手缩短链接的 Laravel 服务。
  • 一个都不用 —— 如果你的语言不在其中,API 本来就是普通的 HTTP。快速上手curl 为主,而这些库做的每一件事(重试、幂等、游标)都是写进文档的行为,五十行代码就能自己实现。

无论你选哪一个,API 参考都是端点、字段和错误码的完整清单——这些库只是它之上的便利封装,绝不是另一套 API。

延伸阅读

  • 速率限制 —— 重试逻辑所处的那份配额。
  • Webhook —— 让事件被推送过来,而不是靠轮询去拿。
  • MCP 服务器 —— 在 AI 助手里执行同样的操作。