Acabo de comenzar a desarrollar servicios REST, pero me he encontrado con una situación difícil: enviar archivos desde mi servicio REST a mi cliente. Hasta ahora he aprendido a enviar tipos de datos simples (cadenas, números enteros, etc.), pero enviar un archivo es un asunto diferente, ya que hay tantos formatos de archivo que no sé ni por dónde debería empezar. Mi servicio REST está hecho en Java y estoy usando Jersey, estoy enviando todos los datos usando el formato JSON.
He leído acerca de la codificación base64, algunas personas dicen que es una buena técnica, otras dicen que no lo es por problemas de tamaño de archivo. ¿Cuál es la manera correcta? Así es como se ve una clase de recurso simple en mi proyecto:
import java.sql.SQLException;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.UriInfo;
import com.mx.ipn.escom.testerRest.dao.TemaDao;
import com.mx.ipn.escom.testerRest.modelo.Tema;
@Path("/temas")
public class TemaResource {
@GET
@Produces({MediaType.APPLICATION_JSON})
public List<Tema> getTemas() throws SQLException{
TemaDao temaDao = new TemaDao();
List<Tema> temas=temaDao.getTemas();
temaDao.terminarSesion();
return temas;
}
}
Supongo que el código para enviar un archivo sería algo como:
import java.sql.SQLException;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@Path("/resourceFiles")
public class FileResource {
@GET
@Produces({application/x-octet-stream})
public File getFiles() throws SQLException{ //I'm not really sure what kind of data type I should return
// Code for encoding the file or just send it in a data stream, I really don't know what should be done here
return file;
}
}
¿Qué tipo de anotaciones debo utilizar? He visto a algunas personas recomendar su @GET
uso @Produces({application/x-octet-stream})
, ¿es esa la forma correcta? Los archivos que estoy enviando son específicos, por lo que el cliente no necesita navegar por los archivos. ¿Alguien puede guiarme sobre cómo se supone que debo enviar el archivo? ¿Debo codificarlo usando base64 para enviarlo como un objeto JSON? ¿O la codificación no es necesaria para enviarlo como un objeto JSON? Gracias por cualquier ayuda que pueda brindar.
java.io.File
ruta real (o ruta de archivo) en su servidor o los datos provienen de alguna otra fuente, como una base de datos, servicio web, llamada de método que devuelve unInputStream
?