Captura de respostas
Muitas vezes queremos reaproveitar em outras requisições um valor obtido em uma resposta. Exemplos:
- Uma chamada HTTP recebe um token de autenticação e esse token deve ser usado em outras chamadas.
- Uma resposta contém ids que devem ser obtidos e informados em outras requisições.
Podemos fazer isso no Pororoca através de capturas.
Uma captura pega um valor de uma resposta HTTP e o salva em uma variável no ambiente atual. Se não houver um ambiente ativo, então a variável será salva nas variáveis da coleção.
Se não for possível capturar o valor na resposta, o valor da variável permanece como estava.
Captura de cabeçalhos
Baseia-se no nome do header cujo valor será capturado.
Captura de corpo JSON
É aplicada quando a resposta tiver um Content-Type JSON.
A sintaxe de captura é parecida com a de outras linguagens: $
significa raíz (objeto ou array inicial), .myProp
significa campo acessado, [0]
significa item número 1
do array acessado.
Considere o JSON a seguir:
{
"id": 18,
"nome": "Miyagi",
"itens": [
{
"idObjeto": 1,
"produto": "Laranja"
},
{
"idObjeto": 2,
"produto": "Acerola"
}
]
}
Alguns exemplos de capturas e valores abaixo:
Caminho de captura | Valor |
---|---|
$.id | 18 |
$.nome | Miyagi |
$.itens.count() | 2 |
$.itens[0] | { "idObjeto": 1, "produto": "Laranja" } |
$.itens[0].idObjeto | 1 |
$.itens[0].produto | Laranja |
$.itens[1].idObjeto | 2 |
$.itens[1].produto | Acerola |
Se o objeto raíz for um array, a indexação também se aplica:
[
{
"id" : 186
},
{
"id" : 244
}
]
Caminho de captura | Valor |
---|---|
$.count() | 2 |
$[0].id | 186 |
$[1].id | 244 |
$.first().id | 186 |
$.last().id | 244 |
$[0] | { "id": 186 } |
$[1] | { "id": 244 } |
Captura de corpo XML
É aplicada quando a resposta tiver um Content-Type XML.
A sintaxe usada é a XPath 1.0.
Considere o XML a seguir:
<A>
<B>qwerty</B>
<C>
<D>uiop</D>
</C>
</A>
Alguns exemplos de capturas e valores abaixo:
Caminho de captura | Valor |
---|---|
/A/B | qwerty |
/A/C/D | uiop |
Exemplo de XML com namespaces e nós com prefixos:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing">
<env:Body>
<xsi:response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<wsa:MyVal1>Roraima</wsa:MyVal1>
<xsi:Value>
<wsa:MyVal2>123987456</wsa:MyVal2>
</xsi:Value>
</xsi:response>
</env:Body>
</env:Envelope>
Se o XML tiver nós com nomes com prefixos de namespaces, a captura pode ser um pouco mais complicada e em alguns casos, a função XPath local-name()
pode ajudar ao ignorar prefixos.
Exemplos de capturas e valores abaixo:
Caminho de captura | Valor |
---|---|
/env:Envelope/env:Body/xsi:response/wsa:MyVal1 | Roraima |
/env:Envelope/env:Body/xsi:response/xsi:Value/wsa:MyVal2 | 123987456 |
/*[local-name()='Envelope']/env:Body/xsi:response/wsa:MyVal1 | Roraima |
A ferramenta online xpather.com pode ajudá-lo a debugar a análise e captura de um valor XML.