Alamofire: Solicitação de recurso - sinalize para solicitar que o response.data seja convertido, mesmo se a validação falhar.

Criado em 5 set. 2016  ·  3Comentários  ·  Fonte: Alamofire/Alamofire

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.

feature request response validation

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 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. 🍻

Todos 3 comentários

👍

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?

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Tulleb picture Tulleb  ·  3Comentários

noear picture noear  ·  3Comentários

ghost picture ghost  ·  3Comentários

lvandal picture lvandal  ·  3Comentários

yokesharun picture yokesharun  ·  3Comentários