import { useState } from "react"; import { Check, Copy } from "lucide-react"; const ORIGIN = typeof window !== "undefined" ? window.location.origin : "https://goods.tangshasha.com"; const BASE = `${ORIGIN}/api/v1`; function CopyBtn({ text }: { text: string }) { const [done, setDone] = useState(false); return ( ); } function Code({ children }: { children: string }) { return (
        {children}
      
); } function Method({ m }: { m: string }) { const color = m === "GET" ? "bg-sky-100 text-sky-700" : "bg-brand-100 text-brand-700"; return {m}; } type Param = { name: string; required?: boolean; desc: string }; function Endpoint({ method, path, title, desc, params, example, response, }: { method: string; path: string; title: string; desc: string; params?: Param[]; example: string; response: string; }) { return (
{path}
{title}

{desc}

{params && params.length > 0 && ( {params.map((p) => ( ))}
参数 必填 说明
{p.name} {p.required ? "是" : "否"} {p.desc}
)}
请求示例
{example}
返回示例
{response}
); } export default function ApiDocs({ onRegister }: { onRegister?: () => void }) { return (

API 调用说明

天工商品档案公共仓提供公开、只读、免鉴权的商品事实 REST API,任何人都可直接调用, 用于按条码/名称查询商品的客观资料(品牌、品类、净含量、产地、配料、营养成分、Nutri-Score、 厂商建议零售价快照等)。返回均为 JSON(UTF-8)。本服务不含任何购买/交易接口。

基础地址:{BASE}
  • 无需 API Key / Token 即可直接 GET;匿名调用按来源 IP 累计共 1000 次, 用满后需 领取更高配额密钥(见下文「鉴权与配额」)。
  • 分页参数 page(默认 1)、 size(默认 20,最大 100)。
  • 未找到资源返回 404,错误体形如 {` {"error":{"code","message","request_id"}}`}
  • 请合理控制调用频率;商品数据遵循各来源许可,引用时请注明天工商品档案公共仓及原始来源。

鉴权与配额

API 默认匿名可用:无需任何凭证即可调用,但按来源 IP 计一个 累计总配额(共 1000 次),用满后返回 403(错误码 quota_exhausted), 需 自助领取更高配额的 API Key。注册得到的密钥拥有更高的每分钟频率与累计调用配额,请求时通过请求头携带:

{`# 二选一 curl -H "X-API-Key: og_live_xxxxxxxx" ${BASE}/products/search?q=牛奶 curl -H "Authorization: Bearer og_live_xxxxxxxx" ${BASE}/products/search?q=牛奶`}

同时采用每分钟固定窗口频率限制与累计总配额两层控制。每个响应都会回写以下响应头,便于客户端自适应:

响应头 含义
X-RateLimit-Limit 当前窗口允许的最大请求数
X-RateLimit-Remaining 当前窗口剩余可用次数
X-RateLimit-Reset 窗口重置的 Unix 时间戳(秒)
Retry-After 超额时返回,建议等待的秒数
X-Quota-Limit 累计总配额上限
X-Quota-Used 已累计使用的调用次数
X-Quota-Remaining 累计配额剩余可用次数

每分钟超额返回 429 Too Many Requests(错误码 rate_limited);累计配额用尽返回 403(错误码 quota_exhausted); 无效或已吊销的 Key 返回 401(错误码 invalid_api_key)。

" }, { "gtin": "5449000000996", "name": "已收录商品", "status": "exists", "reason": "该条码商品已收录" } ] }`} />
数据可能存在误差或滞后,按「现状」提供,不构成医疗/购买建议。商品资料版权归各原始来源所有, 请遵循其许可(如 OpenFoodFacts 的 ODbL)。
); }