Skip to content

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.

ResponseCaptures

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:

json
{
    "id": 18,
    "nome": "Miyagi",
    "itens": [
        {
            "idObjeto": 1,
            "produto": "Laranja"
        },
        {
            "idObjeto": 2,
            "produto": "Acerola"
        }
    ]
}

Alguns exemplos de capturas e valores abaixo:

Caminho de capturaValor
$.id18
$.nomeMiyagi
$.itens.count()2
$.itens[0]{ "idObjeto": 1, "produto": "Laranja" }
$.itens[0].idObjeto1
$.itens[0].produtoLaranja
$.itens[1].idObjeto2
$.itens[1].produtoAcerola

Se o objeto raíz for um array, a indexação também se aplica:

json
[
    {
        "id" : 186
    },
    {
        "id" : 244
    }
]
Caminho de capturaValor
$.count()2
$[0].id186
$[1].id244
$.first().id186
$.last().id244
$[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:

xml
<A>
  <B>qwerty</B>
  <C>
    <D>uiop</D>
  </C>
</A>

Alguns exemplos de capturas e valores abaixo:

Caminho de capturaValor
/A/Bqwerty
/A/C/Duiop

Exemplo de XML com namespaces e nós com prefixos:

xml
<?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 capturaValor
/env:Envelope/env:Body/xsi:response/wsa:MyVal1Roraima
/env:Envelope/env:Body/xsi:response/xsi:Value/wsa:MyVal2123987456
/*[local-name()='Envelope']/env:Body/xsi:response/wsa:MyVal1Roraima

A ferramenta online xpather.com pode ajudá-lo a debugar a análise e captura de um valor XML.