Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problema no tratamento de erros da API #2

Open
felipou opened this issue Apr 13, 2015 · 4 comments
Open

Problema no tratamento de erros da API #2

felipou opened this issue Apr 13, 2015 · 4 comments

Comments

@felipou
Copy link

felipou commented Apr 13, 2015

O código de tratamento de erros na resposta da API procura por um atributo error, mas a documentação (e minha experiência com a API) diz que os erros virão em um atributo errors:

      if (response.error) {
        var err;
        if (res.statusCode === 401) {
          err = new Error.IuguAuthenticationError(response.error);
        } else {
          err = Error.IuguError.generate(response.error);
        }
        return callback.call(self, err, null);
      }

Fiz um teste básico com o seguinte código, verificando tanto por um error quanto por um errors, e funcionou corretamente:

      if (response.error || response.errors) {
        var err = response.error || response.errors;
        if (res.statusCode === 401) {
          err = new Error.IuguAuthenticationError(err);
        } else {
          err = Error.IuguError.generate(err);
        }
        return callback.call(self, err, null);
      }

Não fiz um pull request pois não pude testar corretamente e extensivamente esse código, então achei melhor reportar aqui. Espero ter ajudado :)

@felipou
Copy link
Author

felipou commented Apr 14, 2015

Acabei de ter um problema com esse tentativa de solução que enviei: uma resposta contendo um atributo errors cujo valor era um objeto vazio ({}). Tive que modificar da seguinte maneira (já está ficando feio o código, mas é uma solução paliativa pra mim, sugiro pensarem em alguma forma melhor de fazer isso):

      if (response.error || ( response.errors &&
            Object.keys( response.errors ).length > 0 ) ) {
        var err = response.error || response.errors;
        if (res.statusCode === 401) {
          err = new Error.IuguAuthenticationError(err);
        } else {
          err = Error.IuguError.generate(err);
        }
        return callback.call(self, err, null);
      }

@claytonsilva
Copy link

na verdade não ficou feio @felipou .. veja pelo stack overflow questão sobre tratamentos de objetos vazios:

http://stackoverflow.com/questions/4994201/is-object-empty

Talvez é questão de fazer uma função genéria isEmpty e aplicá-la para ficar mais "elegante"

@lspecian
Copy link
Contributor

lspecian commented Dec 1, 2015

@felipou você pode enviar um exemplo da chamada que retorna errors? Obrigado.

@felipou
Copy link
Author

felipou commented Dec 1, 2015

curl https://api.iugu.com/v1/invoices/ASDF

Acabei de testar com um token de teste. O corpo do retorno foi: {"errors":"Invoice Not Found"}

Mas faz muito tempo que encontrei esse problema, e acredito que foi em outros endpoints. Mas esse foi o primeiro que testei aqui agora pra tentar achar esse tipo de retorno.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants