El mejor enfoque para diseñar un servicio web de descanso con datos binarios para ser consumidos desde el navegador
Estoy desarrollando un servicio web json rest que se consumirá desde una aplicación de página web única creada con backbone.js
Esta API permitirá que el consumidor cargue archivos relacionados con alguna entidad, como informes en pdf relacionados con un proyecto
Buscando en Google y haciendo algunas investigaciones en el desbordamiento de pila vine con estos posibles enfoques:
Primer enfoque: campo de datos codificados en base64
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
filename: 'xxxx',
filesize: 222,
content: '<base64 encoded binary data>'
}
Segundo acercamiento: post multiparte formulario:
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
}
como respuesta obtendré un ID de informe, y con eso emitiré otra publicación
POST: /api/projects/234/reports/1/content
enctype=multipart/form-data
y luego simplemente enviar los datos binarios
(Echa un vistazo a esto:https://stackoverflow.com/a/3938816/47633)
Tercer enfoque: publique los datos binarios en un recurso separado y guarde el href
primero genero una clave aleatoria en el cliente y publico el contenido binario allí
POST: /api/files/E4304205-29B7-48EE-A359-74250E19EFC4
enctype=multipart/form-data
y entonces
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
filename: 'xxxx',
filesize: 222,
href: '/api/files/E4304205-29B7-48EE-A359-74250E19EFC4'
}
(mira esto:https://stackoverflow.com/a/4032079/47633)
Solo quería saber si hay algún otro enfoque que pueda usar, las ventajas y desventajas de cada uno, y si hay alguna manera establecida de lidiar con este tipo de requisitos.
La gran desventaja que veo del primer enfoque es que tengo que cargar completamente y codificar en base64 el archivo en el cliente.
algunos recursos útiles:
Publicar datos binarios en una aplicación RESTful¿Cuál es una buena manera de transferir datos binarios a un servicio de API REST HTTP?¿Cómo subo un archivo con metadatos usando un servicio web REST?¿Mala idea de transferir una gran carga útil utilizando servicios web?https://stackoverflow.com/a/5528267/47633