# 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_txtstatus_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的条件中添加你的自定义路由。