Skip to content

O conceito Promise

Vinícius Pozzebon edited this page Sep 16, 2017 · 6 revisions

Para que o processo de upload na StorageAPI não degrade o desempenho do front-end, adotamos o conceito de Promise (promessa), onde o front-end, ao disparar um pedido de "upload", recebe da StorageAPI um identificador de "promessa" que já identifica, minimamente, se os arquivos submetidos foram aceitos para processamento.

Com esse identificador da promessa, o front-end pode consultar periodicamente se o "status" da promessa mudou e se o lote de arquivos enviados já foi processado no todo ou em parte.

Estrutura de uma Promise:

{
   "success":true,
   "data":{
      "StorageAPI":{
         "send_id":"abcd123",
         "timestamp_start":121212333,
         "timestamp_end":null,
         "send_status_code":206,
         "files":[
            {
               "file_id":"{hash}",
               "name":"DOC0025.jpg",
               "sha1":"38c34f6453ab1cef08d42618438e6380fac3ed13",
               "timestamp_start":123123123,
               "timestamp_end":null,
               "status_code":202,
               "url":null,
               "width":null,
               "height":null,
               "upload_tipo_cod":[
                  0
               ]
            },
            {
               "file_id":"{hash}",
               "name":"DOC0026.jpg",
               "sha1":"asdasd6453ab1cef08d42618438e6380fac3ed13",
               "timestamp_start":123123123,
               "timestamp_end":321321321,
               "status_code":201,
               "url":"https://s3.amazonaws.com/{hash}.jpg",
               "width":970,
               "height":615,
               "upload_tipo_cod":[
                  0
               ]
            },
            {
               "file_id":"{hash}",
               "name":"DOC0027.jpg",
               "sha1":"asdasd6453ab1cef08d42618438e6380fac3ed13",
               "timestamp_start":123123123,
               "timestamp_end":321321321,
               "status_code":415,
               "url":null,
               "width":null,
               "height":null,
               "upload_tipo_cod":[
                  0
               ]
            }
         ]
      }
   }
}

Explicando as posições chave:

  • send_id: identifica a promise;
  • timestamp_start: momento em que a promise foi iniciada no back-end;
  • timestamp_end: momento em que o back-end concluiu a promise;

A posição "send_status_code" retorna o status code que identifica se o lote foi aceito para processamento ou não:

  • 200, caso o lote todo já tenha sido processado;
  • 206, caso algum dos arquivos do lote ainda esteja sendo processado;
  • 40*, em caso de erros de requisição do front-end;
  • 50*, em caso de erro interno no back-end;

Individualmente, cada arquivo remetido também retorna um status code que identifica se o arquivo foi processado com sucesso, se está aguardando processamento ou se foi recusado pela API.

  • 201, em caso de sucesso;
  • 202, caso tenha sido aceito para processamento;
  • 40*, caso o front-end tenha submetido uma requisição inconsistente;
  • 415, caso o formato de arquivo remetido não seja suportado;
  • 50*, caso durante o processamento do arquivo, o back-end tenha encontrado uma exceção não tratada;