melhor abordagem para projetar um serviço web de descanso com dados binários a serem consumidos do navegador

Estou desenvolvendo um serviço web json resto que será consumido a partir de um único aplicativo de página da web construído com backbone.js

Esta API permitirá ao consumidor fazer upload de arquivos relacionados a alguma entidade, como relatórios em pdf relacionados a um projeto

Pesquisando e fazendo algumas pesquisas no estouro de pilha eu cheguei com estas possíveis abordagens:

Primeira abordagem: campo de dados codificado em base64

POST: /api/projects/234/reports
{
  author: 'xxxx',
  abstract: 'xxxx',
  filename: 'xxxx',
  filesize: 222,
  content: '<base64 encoded binary data>'
}

Segunda abordagem: pós formulário multipartes:

POST: /api/projects/234/reports
{
  author: 'xxxx',
  abstract: 'xxxx',
}

Como resposta, recebo um ID do relatório e, com isso, vou emitir outro post

POST: /api/projects/234/reports/1/content
enctype=multipart/form-data

e depois basta enviar os dados binários

(Veja isso:https://stackoverflow.com/a/3938816/47633)

Terceira abordagem: publique os dados binários em um recurso separado e salve o href

primeiro eu gero uma chave aleatória no cliente e posto o conteúdo binário lá

POST: /api/files/E4304205-29B7-48EE-A359-74250E19EFC4
enctype=multipart/form-data

e depois

POST: /api/projects/234/reports
{
  author: 'xxxx',
  abstract: 'xxxx',
  filename: 'xxxx',
  filesize: 222,
  href: '/api/files/E4304205-29B7-48EE-A359-74250E19EFC4'
}

(Veja isso:https://stackoverflow.com/a/4032079/47633)

Eu só queria saber se há alguma outra abordagem que eu possa usar, os prós / contras de cada um, e se há alguma maneira estabelecida de lidar com esse tipo de requisitos

o grande problema que eu vejo na primeira abordagem, é que eu tenho que carregar totalmente e codificar base64 o arquivo no cliente

alguns recursos úteis:

Postar dados binários em um aplicativo RESTfulO que é uma boa maneira de transferir dados binários para um serviço HTTP REST API?Como faço para carregar um arquivo com metadados usando um serviço da Web REST?Má ideia transferir grande carga usando serviços da web?https://stackoverflow.com/a/5528267/47633

questionAnswers(3)

yourAnswerToTheQuestion