Fotografías de entrega
Las fotos tomadas en la recepción, servidas como URL firmadas que caducan en quince minutos.
El personal fotografía lo que recibe: una etiqueta, un palé dañado, una sonda
apoyada en un expositor. Esas fotos son la prueba que hay detrás de
isCompliant, y este endpoint se las entrega.
Necesita ambos, deliveries:read y delivery-images:read, sobre el
restaurante que aparece en la ruta. Una clave que solo tenga el primero responde
403 aquí, mientras que la entrega en sí responde con normalidad.
Listar las fotografías de una entrega
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"
}
]
}
No hay paginación: una entrega tiene como máximo veinte fotografías, y vuelven en una sola respuesta.
| Campo | Tipo | Significado |
|---|---|---|
id | string | Identificador estable de la foto dentro de la entrega. |
contentType | string | image/jpeg, image/png o image/webp. Nada más llega a esta API. |
byteLength | integer | Tamaño exacto del objeto, hasta 10 MB. |
uploadedAt | string | Cuándo terminó de subirse la foto, milisegundos desde la época Unix como cadena. |
url | string | Una URL firmada y directa a los bytes. |
urlExpiresAt | string | Cuándo deja de funcionar esa URL, milisegundos desde la época Unix como cadena. |
Las URL son de vida corta a propósito
url es un enlace prefirmado válido durante quince minutos, y todas las URL
de una misma respuesta comparten la misma caducidad, así que puede tratar la
página como una unidad. Lleva su propia autorización, de modo que descargar los
bytes no requiere cabecera Authorization, lo que también significa que el
enlace es en sí mismo una credencial al portador.
Eso condiciona cómo debe usarlo:
- Descárguelas ahora, o vuelva a pedirlas luego. Descargue los bytes mientras la respuesta es reciente; no guarde la URL para seguirla mañana. Llame otra vez al endpoint para obtener enlaces nuevos: es barato, y vuelve a comprobar la concesión, que es de lo que se trata.
- Nunca ponga la URL donde sobreviva a su propósito. Ni en un correo, ni en un ticket, ni en una caché de cliente con un TTL largo. Durante quince minutos, cualquiera que la tenga puede ver esa foto.
- Guarde los bytes, no el enlace, si necesita la foto en su propio producto.
Conserve el
idjunto a ellos para poder saber si ya la tiene.
Solo aparecen las fotos ya subidas
Una fotografía se registra cuando el dispositivo empieza la subida y solo se hace visible aquí una vez que los bytes han llegado de verdad y se han verificado. Una foto todavía en tránsito —un teléfono que salió del edificio a mitad de la subida— está ausente, no rota.
Por eso imageCount en la entrega puede superar brevemente lo que devuelve este
endpoint. Fíese de este endpoint para lo que existe ahora, y vuelva a leer la
entrega más tarde si el recuento le importa.
Descargarlas
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
La cabecera Authorization en la primera llamada, y ninguna en la segunda: la
firma de la URL es lo que autoriza la descarga.