收货照片

收货时拍下的照片,以十五分钟后过期的签名 URL 提供。

员工会给收到的东西拍照——一张标签、一个破损的托盘、一支抵着展示柜的探针。那些 照片就是 isCompliant 背后的证据,而这个端点把它们交给你。

它需要在路径里那家餐厅上同时持有 deliveries:readdelivery-images:read。 只有前者的密钥在这里得到 403,而收货记录本身照常返回。

列出一条收货记录的照片

GET /v1/restaurants/{restaurantId}/deliveries/{deliveryId}/images
{
  "data": [
    {
      "id": "b4d81f0ac2e7",
      "contentType": "image/jpeg",
      "byteLength": 902450,
      "uploadedAt": "1787932860000",
      "url": "https://…/restaurants/restaurant-1/deliveries/8f2c…/b4d81f0ac2e7.jpg?X-Amz-Signature=…",
      "urlExpiresAt": "1787933760000"
    }
  ]
}

这里没有分页:一条收货记录最多带二十张照片,它们在一次响应里全部返回。

字段类型含义
idstring这张照片在该条收货记录内的稳定标识符。
contentTypestringimage/jpegimage/pngimage/webp。别的都进不到这个 API 里来。
byteLengthinteger对象的精确大小,最大 10 MB。
uploadedAtstring照片上传完成的时间,以字符串表示的 Unix 毫秒时间戳。
urlstring一个指向字节内容的签名直链。
urlExpiresAtstring这个 URL 何时失效,以字符串表示的 Unix 毫秒时间戳。

这些 URL 是有意做成短命的

url 是一个预签名链接,有效期十五分钟,而且同一次响应里的每个 URL 共享同一个 过期时间,所以你可以把这一页当作一个整体来处理。它自带授权,因此取回字节内容不 需要 Authorization 请求头——这也意味着这个链接本身就是一份持有即可用的凭据。

这决定了你该怎么使用它:

  • 现在就取,或者晚些再取一次。 趁响应还新鲜时把字节下载下来;不要把 URL 存 起来,明天再去访问它。再调用一次这个端点就能拿到新的链接——它很便宜,而且会 重新检查授权,这正是重点所在。
  • 绝不要把这个 URL 放到它的用途结束之后还留着的地方。 不要放进邮件,不要放进 工单,不要放进一个 TTL 很长的客户端缓存。在这十五分钟里,任何拿到它的人都能读 那张照片。
  • 如果你自己的产品里需要这张照片,存字节,不要存链接。id 一起存着,这样 你能判断自己是不是已经有它了。

只有已经上传完的照片会出现

一张照片在设备开始上传时就被登记,但只有在字节真正落地并通过校验之后才会在这里 可见。一张还在路上的照片——一部在上传中途离开了这栋楼的手机——是缺席,而不是坏掉。

这就是为什么收货记录上的 imageCount 有可能短暂地多于这个端点返回的数量。要知道 此刻存在什么,以这个端点为准;如果数量对你很重要,稍后再读一次那条收货记录。

把它们取下来

curl "https://api.backresto.com/v1/restaurants/$RESTAURANT_ID/deliveries/$DELIVERY_ID/images" \
  -H "Authorization: Bearer $BACKRESTO_PARTNER_API_KEY" \
  | jq -r '.data[] | "\(.id) \(.url)"' \
  | while read -r id url; do
      curl -sS "$url" -o "$id.jpg"
    done

第一次调用带 Authorization 请求头,第二次不带:URL 里的签名才是授权这次下载的 东西。

最后更新于 2026-09-09。