DupeForums API
通过访问令牌调用接口,完成资源上传与查询。令牌在「个人设置 → API 令牌」生成与管理。
基础信息
| 接口根地址 | https://dupeforums.net/api/v1 |
|---|---|
| 数据格式 | 请求与响应均为 JSON(UTF-8);上传资源支持 multipart/form-data。 |
| 鉴权头 | Authorization: Bearer <token> |
所有需要鉴权的接口都必须带 Authorization 头;未携带或令牌无效时返回 401。
鉴权方式
推荐使用个人访问令牌(PAT):权限可限定、可设有效期、可随时撤销,泄露后影响可控。
- 登录网站,进入「个人设置 → API 令牌」。
- 填写备注名,勾选权限范围(read / upload / delete / all)与有效期,点击生成。
- 复制只显示一次的令牌明文,在请求头中以 Bearer 方式携带。
curl -H "Authorization: Bearer <your_token>" https://dupeforums.net/api/v1/me
权限范围
| 范围 | 说明 |
|---|---|
read | 读取用户信息、分类列表与自己的资源状态。 |
upload | 上传并创建资源(需要创作者权限)。 |
delete | 删除自己上传的、尚无购买记录的资源。 |
all | 拥有以上全部权限,请谨慎使用。 |
关于账号密码登录
/api/v1/login 端点默认关闭(需服务端显式开启)。因为它要求客户端保存账号密码原文,一旦泄露等同于账号失守;建议仅在本地脚本中临时使用,长期集成请改用访问令牌。
接口列表
POST/api/v1/login—用账号密码换取令牌(默认关闭)。参数 identifier 为用户名或邮箱,password 为密码。
GET/api/v1/meread返回当前令牌对应的用户信息。
GET/api/v1/categoriesread返回全部分类,用于获取上传资源所需的 category_id。
POST/api/v1/resourcesupload创建资源。支持 JSON(含 file.download_url,由服务端拉取资源包)或 multipart(file 字段直接上传)。创建后为待审核状态。
GET/api/v1/resources/{id}read查询资源状态(仅本人或管理员)。
POST/api/v1/resources/{id}/deletedelete删除(软删)自己上传的、尚无购买记录的资源;仅草稿/待审核/已驳回状态可删。
POST/api/v1/logout—撤销当前请求所用的令牌。
上传资源
资源包有两种给法:JSON 中提供 file.download_url 由服务器下载,或用 multipart/form-data 的 file 字段直接上传(两者同时提供时以上传的文件为准)。图标同理:icon 传图片直链,或用 cover_image 字段上传。
字段说明
| 字段 | 必填 | 说明 |
|---|---|---|
title | 是 | 资源标题,最长 128 字符。 |
tagline | 否 | 一句话简介,最长 255 字符。 |
description_html | 是 | 资源详细描述,支持 HTML。 |
icon | 否 | 图标图片直链,由服务端下载后保存。 |
version | 否 | 版本号,默认 1.0.0。 |
file.download_url | 二选一 | 资源包直链,由服务端下载;需该地址对服务器可达。 |
file.name | 否 | 原始文件名,用于推导扩展名(zip/rar/7z/gz/tar/jar)。 |
file (multipart) | 二选一 | 资源包文件本体,multipart 上传。 |
category_id | 否 | 分类 ID;缺省时使用站点默认分类,可先调用分类接口获取。 |
price / is_free | 否 | 定价。缺省按免费处理;付费需 price > 0 且 is_free=0,currency 支持 gold(金锭)或 iron(铁锭)。 |
tags | 否 | 标签,数组或英文逗号分隔的字符串。 |
mc_edition / mc_version / mc_platform | 否 | Minecraft 版本信息;mc_edition 为 java 或 bedrock,mc_version / mc_platform 为数组。 |
请求示例
{
"title": "Iris - Dimension Engine",
"tagline": "A Beautiful, Incredibly fast world generator.",
"description_html": "<div class=\"bbWrapper\">…</div>",
"icon": "https://example.com/icons/725.jpg",
"version": "4.3.0",
"file": {
"name": "Iris-4.3.0.jar",
"download_url": "https://example.com/files/725/Iris-4.3.0.jar",
"content_type": "application/octet-stream",
"sha256": "3446…09f7",
"size": 5683335
},
"id": "725",
"url": "https://example.com/resources/iris.725/",
"category_id": 8,
"price": 50,
"currency": "iron",
"is_free": 0,
"tags": "world,generator"
}
curl -X POST https://dupeforums.net/api/v1/resources \ -H "Authorization: Bearer <your_token>" \ -H "Content-Type: application/json" \ --data-binary @payload.json
curl -X POST https://dupeforums.net/api/v1/resources \ -H "Authorization: Bearer <your_token>" \ -F "title=My Plugin" \ --form-string "description_html=<p>desc</p>" \ -F "category_id=6" -F "is_free=1" \ -F "file=@MyPlugin.jar"
成功时返回 code=0 与新建资源的信息(含 id、slug、status、url)。资源创建后为待审核状态,审核通过后才会在站内公开。
错误码
| 状态码 | 含义 |
|---|---|
401 | 未携带令牌,或令牌无效、已过期、已撤销。 |
403 | 令牌缺少所需权限、账号没有创作者权限,或该功能已关闭。 |
404 | 资源或接口不存在。 |
409 | 当前状态不允许该操作(例如资源已有购买记录,不能删除)。 |
422 | 参数校验失败(缺少必填项、分类不存在、文件类型或大小不符合要求)。 |
429 | 请求过于频繁(登录尝试或发布冷却)。 |
500 | 服务器内部错误。 |
{ "code": 401, "message": "未登录或令牌无效/已过期,请先调用 POST /api/v1/login 获取令牌", "data": null }
频率限制
创建资源有 60 秒冷却(与网页端共用);账号密码登录时,同一 IP 5 分钟内最多 10 次尝试,同一账号连续失败 5 次锁定 15 分钟。