2010-10-27 18 views
14

Estoy trabajando en una aplicación web RESTful (Django + Piston). La solicitud POST envía datos codificados con Json a la aplicación web. Esto funciona bien para todas las tablas de base de datos solo de texto, pero también tengo una tabla que almacena archivos de texto y binarios. ¿Cuál es la mejor forma de publicar texto y datos binarios en una aplicación RESTful?Publicar datos binarios en una aplicación RESTful

Respuesta

16

Puede codificar Base64 y enviarlo como una cadena en un mensaje JSON, o puede POSTAR o PONER el binario como un recurso separado y hacer referencia a él por ID o URL en el mensaje JSON. El último enfoque es un tipo de canal de datos fuera de banda que es bastante común en los protocolos basados ​​en XML (por ejemplo, chat de voz usando XMPP).

Incluso podría fácilmente soportar un modelo híbrido, según el cual:

  1. Una pequeña imagen se envía como {"base64":"OGZmNjJmOWNhYzFlODE0NDBjYmYzNjhjYz..."};
  2. Una imagen grande se carga como referencia, {"ref":"http://myserver.com/bits/E4304205-29B7-48EE-A359-74250E19EFC4"}.

Para evitar el doble POST necesario para binarios referenciados externamente, puede diseñar algún protocolo que permita combinar cosas JSON y binarias en una sola transferencia. Pero es poco probable que la ganancia incremental recompense adecuadamente ese nivel de esfuerzo.

Finalmente, desde una perspectiva de diseño, adhiérase a la solución simple hasta que se convierta en un problema.

+0

Así que, si no quiero codificar el binario en una cadena, necesito dos solicitudes POST desde el lado del cliente, a la derecha. Primero una aplicación/json con los campos de texto y una multipart/form-data para enviar el binario junto con el ID de los datos a los que pertenece. ¿Es esto correcto? – pinky0x51

+0

@ pinky0x51: Sí. He modificado mi respuesta para cubrir este problema. –

+0

@ pinky0x51 puede usar publicaciones de varias partes desde el principio enviando json como una parte y archivo binario como otros – kqr

Cuestiones relacionadas