2009-10-02 14 views
36

Estamos ampliando nuestra API HTTP REST para permitir a los clientes cargar imágenes (a los fines de esta pregunta, asumiendo datos binarios). Hasta ahora solo hemos permitido cadenas simples en nuestros parámetros API. ¿Cuál es una buena forma de permitirles cargar datos binarios? ¿Sería solicitar la forma codificada en base64? ¿La URL se volverá demasiado larga para que la maneje el servidor web?¿Cuál es una buena forma de transferir datos binarios a un servicio HTTP REST API?

¿Alguna sugerencia/mejores prácticas?

+0

Es posible que desee echar un vistazo a http://stackoverflow.com/questions/1500744 –

+1

¿Por qué está utilizando los parámetros de URI? Todo lo que necesita de ellos se puede encapsular en sus encabezados de solicitud HTTP. – Gandalf

Respuesta

34

Simplemente envíe los datos binarios tal como están en un cuerpo POST, pero con el encabezado Content-Type apropiado (por ejemplo, imagen/jpeg) - Creo que esta es la forma más "RESTful".

(En general, como regla general al diseñar servicios REST, cuanto más trabaje con el protocolo HTTP tal como está en lugar de tratar de superponer algo innecesario y complejo como base64, mejor. HTTP es el último protocolo RESTful, y Content-Types permiten diferentes "Representaciones" en "REpresentational State Transfer")

Otra posibilidad a tener en cuenta es aceptar URLs de imagen en lugar de archivos físicos reales. Esto hace que sea más difícil para las aplicaciones independientes que p. lea la imagen de la unidad del usuario, pero haga que sea más fácil para las aplicaciones tipo mashup donde la imagen puede ser devuelta como una URL de otro servicio.

Puede permitir ambas opciones, por supuesto.

+1

¿Qué tipo de contenido deberíamos usar para los datos binarios personalizados que no son imágenes jpeg? – Pacerier

+1

@Pacerier echa un vistazo a http://en.wikipedia.org/wiki/Internet_media_type –

+0

¿debería agregar el encabezado Content-Length en la respuesta cuando las personas intentan recuperar la imagen? – Cmag

Cuestiones relacionadas