Uma API RESTful deve poder retornar arquivos ou apenas um local

12

Isso me intrigou por um tempo.

Por exemplo, temos uma API REST que fornece conteúdo básico para um sistema, consumindo e produzindo JSON. Nesse nó de extremidade, ele produz um URL para uma imagem e uma descrição e é encontrado assim: // localhost / myApi / pictures / 1

{
    id: 1,
    description: "This is a pretty picture of a daisy",
    URL: <OUR URL>
}

Agora, o OUR_URL deve apontar para um local na API, por exemplo, // localhost / myApi / files / pictures / 1 que retorna um JPG (o aplicativo atrás da API lê o conteúdo físico do arquivo e o transmite de volta ao cliente ) Obviamente, isso é diferente do restante da API que está produzindo respostas JSON e haverá sobrecarga na leitura e no streaming do arquivo real.

Como alternativa, OUR_URL deve apontar para um URL fora do escopo do serviço REST, para //localhost/files/pictures/1.jpg onde ele lê o arquivo diretamente.

Então a questão é:

Uma API RESTful deve retornar arquivos ou apenas um local?

Crazy Dino
fonte
1
Você percebe que a descrição geral do que é REST equivale a "clientes fazem solicitações para uma URL e o servidor retorna coisas", certo? A idéia é que o REST seja muito pouco definido e possa ser adaptado a praticamente qualquer esquema de recuperação baseado em URL.

Respostas:

17

Um serviço RESTful deve fornecer recursos para os usuários da API. Os recursos podem ter vários formatos, que variam de JSON ou XML a JPEG e HTML.

Não existe nem um requisito, ou mesmo expectativa, de que uma única API sirva apenas recursos de um único formato. Não há nada errado em servir um documento JSON no URI /myApi/pictures/1e um arquivo JPEG do URI /myApi/files/pictures/1.
Em um caso mais extremo, é ainda possível veicular a descrição JSON e o arquivo JPEG da mesma URL, dependendo do formato solicitado pelo solicitante.

Bart van Ingen Schenau
fonte
7

Um problema que você terá ao retornar URIs é que um servidor de arquivos antigo simples não pode fazer segurança. Portanto, se você precisar fazer algum tipo de limitação sobre quem pode acessar um arquivo, precisará devolvê-lo diretamente na API REST (ou não, se o usuário não tiver direitos, o arquivo será não no estado correto etc.).

Caso contrário, retornar o URI antigo comum e permitir que ele vá para uma CDN dedicada traz muitos benefícios em relação ao provisionamento, simplicidade e escalabilidade - assumindo que é tudo o que você precisa fazer.

Telastyn
fonte
O aspecto auth é um ponto muito bom, algo que eu nunca havia considerado.
Crazy Dino