Sto progettando un'API REST basata su HTTP.
Diciamo che ho un'entità chiamata Entity
che ha un sacco di proprietà. Alcune delle sue proprietà sono file. Diciamo che Entity
ha le seguenti proprietà:
name: string
description: string
photos: array of photos
videos: array of videos
L'API è progettata per essere utilizzata dai dispositivi mobili e dovrebbe funzionare bene in condizioni di connessione lenta o instabile. Il fatto è che l'oggetto non dovrebbe essere considerato completo fino a quando non carico tutte le risorse del client.
Quale è il modo migliore per costruire un nuovo oggetto?
Per ora ho trovato la seguente soluzione. Aggiungi flag di readiness isReady
, inserisci prima i dati dell'oggetto di base all'interno di single json:
POST /entities/ {name: "somename", description: "description", isReady: false}
obtain id of newly created 'entityId'
Quindi carica le risorse una alla volta:
POST /entities/{entityId}/photos/ <photo data>
POST /entities/{entityId}/videos/ <video data>
Quindi aggiorna il flag di preparazione dell'oggetto
PUT /entities/{entityId}/ {isReady: true}
La seconda soluzione che viene in mente è creare endpoint separati per foto, video. Quindi potrò pubblicare prima foto e video e quindi creare Entity
con riferimenti alle risorse.
POST /photos <photo data>
obtain ids
POST /videos <video data>
obtain ids
POST /entities/ {name: "somename", description: "description", photos: ids[], videos:ids[]}
La domanda con la seconda soluzione: va bene che la risorsa venga referenziata di più URIs
?
/entities/photos/{photoId}
/photos/{photoId}
La prima soluzione è corretta? Il secondo non sarebbe complicato?
Grazie in anticipo