Я щойно почав розробляти REST-сервіси, але зіткнувся зі складною ситуацією: надсилаючи файли з мого сервісу REST моєму клієнту. До цих пір я зрозумів, як надсилати прості типи даних (рядки, цілі числа тощо), але надсилання файлу - це інша справа, оскільки існує стільки форматів файлів, що я не знаю, з чого я повинен починати. Моя послуга REST створена на Java, і я використовую Джерсі, я надсилаю всі дані у форматі JSON.
Я читав про кодування base64, деякі кажуть, що це хороша техніка, інші кажуть, що це не через проблеми з розміром файлу. Який правильний спосіб? Ось як виглядає простий клас ресурсів у моєму проекті:
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;
}
}
Я здогадуюсь, код для надсилання файлу був би таким:
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;
}
}
Які анотації я повинен використовувати? Я бачив, як деякі люди рекомендують @GET
використовувати @Produces({application/x-octet-stream})
, чи це правильний спосіб? Файли, які я надсилаю, є конкретними, тому клієнту не потрібно переглядати файли. Хтось може мене вказувати, як я повинен надіслати файл? Чи повинен я кодувати його за допомогою64, щоб надіслати його як об'єкт JSON? чи кодування не потрібно, щоб надсилати його як об'єкт JSON? Дякуємо за будь-яку допомогу, яку ви можете надати.
java.io.File
(або шлях до файлу) на вашому сервері чи дані, які надходять з якогось іншого джерела, наприклад, бази даних, веб-служби, методу повернення дзвінкаInputStream
?