Open jussaragranja opened 3 years ago
Um path param (parâmetro enviado através do "caminho" absoluto da própria URL de requisição) é, por natureza, string (assim como a URL como um todo).
Como não há locations identificadas com strings que não possam ser representadas em forma de um inteiro, qualquer conteúdo passado no path param {id} que não possa ser interpretado como inteiro (ex: 123A
), pode apenas retornar que não há cobrança para aquele id (PayloadLocationNaoEncontrado
).
Opcionalmente, pode-se tratar como um erro "de requisição" e responder que a URL não atende ao schema predefinido (PayloadLocationConsultaInvalida
).
sendo, neste caso em particular, este o erro:
Obs: comentário colaborativo, não sou do BACEN.
Obrigada pela explicação @renatofrota, porém, você saberia me informar o porque de não ser queryParam? visto que o identificador sempre é salvo como inteiro, por isso o questionamento desse campo na requisição estar como String.
E mais uma coisa o retorno abaixo é do próprio Bacen certo?
{ "type": "https://pix.bcb.gov.br/api/v2/error/ErroInternoDoServidor", "title": "Erro Interno", "status": 500, "detail": "Condição inesperada ao processar requisição.", "correlationId": "2897852e-484882" }
Caso sim, o exemplo de erro citado por você não está sendo retornado quando enviamos caracteres nesse campo.
Erro 500 representa um erro interno qualquer do PSP (Prestador de Serviços de Pagamento) que está te oferecendo a API, que não pode processar sua transação no momento por alguma condição e que pode ou não ser relacionada à sua consulta em particular.
Se a conta tem um bloqueio, falta alguma validação, excedeu algum limite, etc. Veja logo no início da página: https://bacen.github.io/pix-api/
Quem poderá te responder o motivo específico do erro 500 é só o seu PSP.
-edit-
Se não for um bloqueio na conta mas uma indisponibilidade de algum sistema interno que impeça a recuperação da informação desejada ou execução do procedimento solicitado (de forma que o request em momento posterior volte a funcionar sem qualquer intervenção da sua parte), o mais correto seria o erro retornado pelo PSP ser 503 (ServicoIndisponivel
), sempre que possível.
Quanto ao motivo de não ser query param: é mais natural que, em o elemento location tendo um identificador único (location <> id é uma relação 1:1) que ele seja um path param e não um query param.
Acho que não fui clara o suficiente, estou testando o endpoint em si, e quando envio caracteres (ex.: letras) no parâmetro ID que é String (como você disse, é String porque é PathParam), mas quando envio as letras é retornado esse erro interno pelo bacen. porém, não vejo problema em mudar para queryParam com o tipo Integer, visto que no cadastro do location, apenas é cadastrado o tipo Integer.
E o erro 500 que anexei anteriormente é da api pix do bacen, estou enviando letras no campo identificador String, e o erro não é o que você citou em sua primeira resposta, e sim um erro interno sem nenhum tipo de tratamento.
Acho que não fui clara o suficiente, estou testando o endpoint em si, e quando envio caracteres (ex.: letras) no parâmetro ID que é String (como você disse, é String porque é PathParam), mas quando envio as letras é retornado esse erro interno pelo bacen. porém, não vejo problema em mudar para queryParam com o tipo Integer, visto que no cadastro do location, apenas é cadastrado o tipo Integer.
E o erro 500 que anexei anteriormente é da api pix do bacen, estou enviando letras no campo identificador String, e o erro não é o que você citou em sua primeira resposta, e sim um erro interno sem nenhum tipo de tratamento.
Se você está passando um conteúdo com letras (string que não pode ser convertida em inteiro) no local do {id}, significa que, de qualquer forma, você não iria receber de volta um location válido (já que só existem locations cujo {id} é inteiro). Então se retorna 400 ou 403 (que seria mais correto) ou 500, não é tão relevante assim para o seu propósito de identificar onde está o erro (afinal, você já sabe onde está o erro).
Além disso, a especificação da API (feita pelo BACEN) está certa. Quem está retornando o erro (o seu PSP) é que não está seguindo à risca. Então isso você deve reportar pro seu PSP - pois esse repositório é do BACEN e eles não tem o que mudar na especificação da API neste caso.
Em tempo, dúvida similar a respeito de path params serem String (e a validação do formato ser feita no processamento) foi levantada anteriormente aqui: https://github.com/bacen/pix-api/issues/264
Concordo com o ninrod. O path da URL é String por natureza. Não faz sentido listar que deve ser passado um int pois qualquer sistema sempre vai receber a URL requisitada em formato de String. Na prática, o path param {id} é uma string com regex ^\d+$
- só aceita números mas não deixa de ser uma string.
@jussaragranja , o @renatofrota foi bastante preciso em suas colocações, não vejo muito o que eu poderia acrescentar à questão.
Para o endpoint de consultar o location por ID o identificador do resquest é setado como String, porém, seu retorno é um Integer. (IMAGEM NO LINK ABAIXO) Caso seja enviado uma String o response é um erro interno, sem tratamento, e não há nenhum exemplo de tratamento de erros nas especificações para esse caso. Como o identificador do location sempre é numérico (endpoint POST salva apenas identificadores numéricos) o identificador nesse request do GET deveria ser também.
IMAGEM: PayloadLocation