# API V1
Chevereto API v1 (也被称为Bridge API) 允许以访客身份上传图片到你的网站。之所以称为 bridge API,是因为和 Chevereto 2.X 的 API 差不多,是向未来 API v2 的过渡。
API v1 没有速率限制,但会受到你的管理面板中设置的(Flood upload)洪泛上传限制的影响。正因为如此,你应该只将这个 API 用于你自己的应用程序或脚本。
# API 密钥
API v1 使用单一的 API 密钥,您可以在 仪表盘>设置> API 中设置该密钥。
# API 调用
# 请求方法
API v1 的调用可以使用 POST 或 GET 请求方法来完成,但由于 GET 请求受到URL最大允许长度的限制,你应该首选 POST 请求方法。
# 请求URL
http://mysite.com/api/1/<action>/
# 参数说明
- key : API v1 的密钥,可以在你的管理员仪表板设置中设置。
- action : 你想做什么 [value: upload]。
- source : 一个图像URL或一个base64 (opens new window)编码的图像字符串。您也可以在请求中使用FILES["source"]。
- format : 设置返回格式 [value:json(默认值),redirect,txt]。
# 调用示例
GET http://mysite.com/api/1/upload/?key=12345&source=http://somewebsite/someimage.jpg&format=json
注意:上传本地文件时一定要使用POST。Url编码可能会因为编码字符或仅仅因为GET请求的URL请求长度限制而改变base64源。
# API 响应
API v1 的响应将根据 format 参数而有所不同:
- json : 以JSON格式显示所有上传的图像信息。[默认]
- txt : 以文本/普通格式返回图像直接 URL。
- redirect : 重定向到图片浏览者的URL。
当使用JSON时,响应将有头部状态代码,让你很容易注意到请求是否正常。它还将输出 status_txt
和 status_code
属性。
# 响应示例(JSON)
{
"status_code": 200,
"success": {
"message": "image uploaded",
"code": 200
},
"image": {
"name": "example",
"extension": "png",
"size": 53237,
"width": 1151,
"height": 898,
"date": "2014-06-04 15:32:33",
"date_gmt": "2014-06-04 19:32:33",
"storage_id": null,
"description": null,
"nsfw": "0",
"md5": "c684350d722c956c362ab70299735830",
"storage": "datefolder",
"original_filename": "example.png",
"original_exifdata": null,
"views": "0",
"id_encoded": "L",
"filename": "example.png",
"ratio": 1.2817371937639,
"size_formatted": "52 KB",
"mime": "image/png",
"bits": 8,
"channels": null,
"url": "http://127.0.0.1/images/2014/06/04/example.png",
"url_viewer": "http://127.0.0.1/image/L",
"thumb": {
"filename": "example.th.png",
"name": "example.th",
"width": 160,
"height": 160,
"ratio": 1,
"size": 17848,
"size_formatted": "17.4 KB",
"mime": "image/png",
"extension": "png",
"bits": 8,
"channels": null,
"url": "http://127.0.0.1/images/2014/06/04/example.th.png"
},
"medium": {
"filename": "example.md.png",
"name": "example.md",
"width": 500,
"height": 390,
"ratio": 1.2820512820513,
"size": 104448,
"size_formatted": "102 KB",
"mime": "image/png",
"extension": "png",
"bits": 8,
"channels": null,
"url": "http://127.0.0.1/images/2014/06/04/example.md.png"
},
"views_label": "views",
"display_url": "http://127.0.0.1/images/2014/06/04/example.md.png",
"how_long_ago": "moments ago"
},
"status_txt": "OK"
}
# 响应示例 (txt)
http://127.0.0.1/images/2014/06/04/example.png
# 上传到用户解决办法
API V1 没有办法上传指定用户,但你可以覆盖默认的 API。将默认的app/routes/route.api.php
文件复制到 app/routes/overrides/route.api.php
文件夹。
更改这里:
CHV\Image::uploadToWebsite($source);
为此 (将 juanito 替换为目标 用户名 或 user_id ):
// 这会将图片上传到 'juanito' 的账户
CHV\Image::uploadToWebsite($source, 'juanito');
这样一来,/api
路由(来源于 app/routes/overrides/route.api.php
)将以该用户的名义上传图片。
# 使用不同的API密钥
如果您想在这个新的自定义API 中使用不同的 API密钥,只需更改以下内容:
!G\timing_safe_compare(CHV\getSetting('api_v1_key'), $_REQUEST['key'])
对此,请执行以下操作:
!G\timing_safe_compare('NowThisIsAnotherAPIKEY!', $_REQUEST['key'])
# 多个API
只要你在 app/loader.php
中进行一些编辑,你就可以拥有多个 API。由于这个文件处理了一些预路由,你需要在所有提到 api
的条件中添加你的自定义路由。