Uma API que estou usando às vezes passa de volta uma mensagem de erro como JSON com informações adicionais sobre o motivo da falha da solicitação.
Atualmente, tenho que implementar a transformação do NSData em response.data em um JSONDictionary quando a validação falhar.
Seria conveniente que Alamofire cuidasse disso.
Gostaria de uma forma de sinalizar solicitações individuais e / ou globais para forçar o Alamofire a tentar converter o response.data usando o mesmo tipo de serializador que eu teria usado nos dados de resposta, mesmo se o método de validação falhar.
Acredito que na versão 1.0 ou 2.0 do Alamofire você ainda pode obter um objeto convertido de result.value mesmo se a validação falhar. Seria bom ter essa capacidade novamente, portanto, não estou implementando a mesma lógica que já existe nos ResponseSerializers do Alamofire.
Obrigado pelo seu tempo e espero que considere este pedido.
👍
Obrigado pela solicitação de recurso @tobiasoleary!
Embora eu entenda de onde você vem, não acho que seja bem assim que queremos tentar lidar com esse caso. Se a validação estiver falhando, então a validação é o que deve gerar o erro, fazendo com que seu serializador de resposta não seja executado porque um erro já ocorreu. O que isso significa é que, se você encontrar um erro de validação, deverá extrair a mensagem de erro dos dados do servidor diretamente no encerramento de validação. No momento, isso não é possível no Alamofire 3, a menos que você escreva uma extensão em Request
.
No Alamofire 4, tornamos mais fácil analisar os erros dos dados do servidor, se necessário, adicionando data
ou temporaryURL
e destinationURL
aos respectivos DataRequest
ou DownloadRequest
encerramentos de validação. Mais detalhes podem ser encontrados no guia de migração . Em última análise, o que isso permite que você faça é:
Alamofire.request(urlString)
.validate { request, response, data in
guard let data = data else { return .failure(customError) }
// 1) Validate the response to make sure everything looks good
// 2) If validation fails, you can now parse the error message out of the
// data if necessary and add that to your custom error if you wish.
return .success
}
.response { response in
debugPrint(response)
}
Se você compartilhar exatamente o mesmo serializador de resposta para analisar a mensagem de erro que usa no manipulador de resposta, poderá simplesmente reutilizar o serializador no caso de falha de validação. Em muitos casos, a carga útil para a falha será diferente do sucesso, então você precisará usar uma lógica de análise diferente.
Espero que isso ajude a esclarecer as coisas e a apontar na direção certa.
Saúde. 🍻
@gchaturvedi você tem um exemplo de como obter o erro do servidor, preciso desserializar os dados?
Comentários muito úteis
Obrigado pela solicitação de recurso @tobiasoleary!
Embora eu entenda de onde você vem, não acho que seja bem assim que queremos tentar lidar com esse caso. Se a validação estiver falhando, então a validação é o que deve gerar o erro, fazendo com que seu serializador de resposta não seja executado porque um erro já ocorreu. O que isso significa é que, se você encontrar um erro de validação, deverá extrair a mensagem de erro dos dados do servidor diretamente no encerramento de validação. No momento, isso não é possível no Alamofire 3, a menos que você escreva uma extensão em
Request
.No Alamofire 4, tornamos mais fácil analisar os erros dos dados do servidor, se necessário, adicionando
data
outemporaryURL
edestinationURL
aos respectivosDataRequest
ouDownloadRequest
encerramentos de validação. Mais detalhes podem ser encontrados no guia de migração . Em última análise, o que isso permite que você faça é:Se você compartilhar exatamente o mesmo serializador de resposta para analisar a mensagem de erro que usa no manipulador de resposta, poderá simplesmente reutilizar o serializador no caso de falha de validação. Em muitos casos, a carga útil para a falha será diferente do sucesso, então você precisará usar uma lógica de análise diferente.
Espero que isso ajude a esclarecer as coisas e a apontar na direção certa.
Saúde. 🍻