2010-10-27 10 views
14

Sto lavorando a un'applicazione web RESTful (Django + Piston). La richiesta POST invia i dati codificati con Json all'applicazione web. Funziona bene per tutte le mie tabelle di database di solo testo, ma ho anche una tabella che memorizza i file di testo e binari. Qual è il modo migliore per inviare testo e dati binari a un'applicazione RESTful?Inviare dati binari a un'applicazione RESTful

risposta

16

È possibile utilizzare Base64 per codificarlo e inviarlo come stringa in un messaggio JSON oppure è possibile POST o PUT il file binario come risorsa separata e fare riferimento ad esso tramite ID o URL nel messaggio JSON. Quest'ultimo approccio è una sorta di canale dati fuori banda che è abbastanza comune nei protocolli basati su XML (ad esempio, la chat vocale con XMPP).

Si potrebbe anche abbastanza facilmente sostenere un modello ibrido, in cui:

  1. Una piccola immagine viene inviata come {"base64":"OGZmNjJmOWNhYzFlODE0NDBjYmYzNjhjYz..."};
  2. Un'immagine grande viene caricata come riferimento, {"ref":"http://myserver.com/bits/E4304205-29B7-48EE-A359-74250E19EFC4"}.

Per evitare la doppia-POST necessaria per i binari con riferimenti esterni, si potrebbe progettare un protocollo che permette di JSON e roba binario da miscelare in un singolo trasferimento. Ma è improbabile che il guadagno incrementale ricompensi adeguatamente questo livello di impegno.

Infine, dal punto di vista del design, attenersi alla soluzione semplice fino a quando non diventa un problema.

+0

Quindi, se non voglio codificare il binario in una stringa, ho bisogno di due richieste POST dal lato client, giusto. Prima un'applicazione/json con i campi di testo e poi una multipart/form-data per inviare il binario insieme all'ID dei dati a cui appartiene. È corretto? – pinky0x51

+0

@ pinky0x51: Sì. Ho modificato la mia risposta per coprire questo problema. –

+0

@ pinky0x51 potresti usare il post multiparte sin dall'inizio mandando json come una parte e il file binario come altro – kqr