jaki jest właściwy sposób wysyłania pliku z usługi internetowej REST do klienta?

Właśnie zacząłem rozwijać usługi REST, ale natknąłem się na trudną sytuację: wysyłanie plików z mojej usługi REST do mojego klienta. Do tej pory zrozumiałem, jak wysyłać proste typy danych (ciągi znaków, liczby całkowite itp.), Ale wysyłanie pliku to inna sprawa, ponieważ jest tak wiele formatów plików, których nie wiem nawet, gdzie powinienem zacząć. Moja usługa REST jest tworzona na Javie i używam Jersey, przesyłam wszystkie dane w formacie JSON.

Czytałem o kodowaniu base64, niektórzy mówią, że jest to dobra technika, inni twierdzą, że nie z powodu problemów z rozmiarem plików. Jaki jest właściwy sposób? Tak wygląda prosta klasa zasobów w moim projekcie:

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;
    }
}

Zgaduję, że kod do wysłania pliku będzie wyglądał następująco:

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;
    }
}

Jakiego rodzaju adnotacji powinienem używać? Widziałem, jak niektórzy ludzie polecają@GET za pomocą@Produces({application/x-octet-stream}), czy to właściwy sposób? Przesyłane przeze mnie pliki są specyficzne, więc klient nie musi przeglądać plików. Czy ktoś może mnie poprowadzić w jaki sposób mam wysłać plik? Czy powinienem go zakodować za pomocą base64, aby wysłać go jako obiekt JSON? lub kodowanie nie jest konieczne, aby wysłać go jako obiekt JSON? Dziękujemy za pomoc, jaką możesz udzielić.

questionAnswers(4)

yourAnswerToTheQuestion