Não passe os bytes pela sua API. Faça o cliente pedir uma URL de upload pré-assinada, subir direto para o armazenamento de objetos com multipart upload para arquivos grandes, e depois avisar o seu serviço, que verifica o objeto e registra os metadados. Valide tipo de conteúdo e limites de tamanho no nível da política, escaneie de forma assíncrona antes de o arquivo ficar utilizável, e gere URLs assinadas de vida curta para download em vez de tornar os objetos públicos.
Por que os entrevistadores perguntam isso
É uma pergunta de design que traz muita coisa de uma vez: streaming versus buffering, escolha de armazenamento, segurança e processamento assíncrono. O entrevistador quer que você evite o design ingênuo em que uma thread de requisição segura dois gigabytes, e que pense em validação e retomada. As perguntas seguintes sobre segurança, escopo da URL pré-assinada e conteúdo de arquivo não confiável, separam engenheiros cuidadosos de quem só fez funcionar.
Como estruturar sua resposta
- Mantenha os bytes fora da sua aplicação: direto para armazenamento de objetos.
- Descreva o fluxo: pré-assinatura, multipart upload, callback de conclusão.
- Cubra validação, varredura de vírus e como o arquivo se torna utilizável.
- Trate downloads com URLs assinadas de vida curta e checagem de acesso.
Exemplo de resposta
A primeira decisão é que o arquivo nunca passa pela minha API, porque dois gigabytes através de um handler de requisição prende um worker, custa banda duas vezes e quebra no momento em que uma conexão cai. Então o cliente pede ao meu serviço uma URL de upload pré-assinada, com escopo apertado para uma chave, um tipo de conteúdo e uma expiração curta, e sobe direto para o armazenamento de objetos. Para arquivos desse tamanho eu uso multipart upload, o que me dá retomada, já que uma parte que falhou é repetida em vez do arquivo inteiro. Quando o upload termina o cliente avisa, ou melhor, o armazenamento emite um evento, e meu serviço verifica que o objeto existe e bate com o tamanho esperado antes de gravar os metadados. O arquivo começa num estado pendente e só fica utilizável depois do processamento assíncrono: varredura, checagem do tipo de conteúdo real a partir dos bytes em vez de confiar na extensão, e geração de miniaturas. Downloads passam por uma URL assinada de vida curta emitida após uma checagem de autorização, nunca por um bucket público, que é de onde vem um número surpreendente de vazamentos de dados.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Como você impede que alguém use uma URL pré-assinada para subir outra coisa?
- Como você trataria um cliente que some no meio do upload?
- Como você suportaria uploads retomáveis numa conexão móvel instável?
Mais perguntas para Desenvolvedor Backend
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas