JSON APIs

  • Versão de lançamento: Zurich
  • Atualizado 13 de mar. de 2026
  • 3 min. de leitura
  • As JSON APIs podem ser usadas depois de chamar getAsJsonContent() no objeto request ou em uma propriedade ParameterValue.

    Ao usar JSON APIs para gravar sua regra de criptografia, você pode seguir um formato geral:
    1. Chame getAsJsonContent() no objeto request. Isso retorna um objeto iterável da classe JsonNode subjacente.
    2. Chame iterator() ou getIterator(cadeia de caracteres "xPath") no objeto JsonNode. Isso retorna um objeto JsonNodeIterator que pode ser usado para iterar nós no objeto "JSON".
    3. Chame o método hasNext() no objeto JsonNodeIterator para determinar se outro elemento está disponível.
    4. Chame next() no objeto JsonNodeIterator para retornar o próximo elemento "JSON". Você não pode chamar next() sem primeiro chamar hasNext().
    5. Chame valueFor(cadeia de caracteres "tableName", cadeia de caracteres "fieldName") no elemento "JSON". Este método informa ao proxy que o valor desse elemento é mapeado para o campo especificado na tabela especificada. Dessa forma, o proxy verifica se o campo deve ou não ser criptografado.
      Nota:
      Para determinar se você deseja chamar valueFor(cadeia de caracteres "tableName", cadeia de caracteres "fieldName") em um elemento "JSON", você pode usar o método getName() para retornar o nome do elemento.

    Mapeamento para um campo-tabela conhecido na instância

    Neste exemplo, a carga JSON é processada na instância para inserir registros na tabela de incidentes. O campo de descrição preenche "short_description" no incidente.

    {
        data: {
            records: [
                {
                    "name": "Test Record 1",
                    "description": "Test Record 1 Description",
                    "tag": "security"
                }, 
                {
                    "name": "Test Record 1",
                    "description": "Test Record 1 Description",
                    "tag": "security"
                }],
            "query": "assigned_to=3D4860165813e63a00d00abd322244b092^category=vulnerability"
        },
        "source": "10.11.13.14"
    }

    A seguinte regra pode ser aplicada:

    function sampleJsonAction1() {
        var jsonContent = request.getAsJsonContent();
        // This loop iterates over all description elements in the records array
        var jsonNodeIterator = jsonContent.getIterator(’/data/records/description’);    
        while (jsonNodeIterator.hasNext()) {
            var jsonNode = jsonNodeIterator.next();
            jsonNode.valueFor('incident', 'short_decription');
        }
    }
    

    Esta ação itera por meio de nós description e solicita que o servidor proxy criptografe os valores e os insira em "incident.short_description" na instância.

    Nota:
    Esta regra encontra todos os nós description dentro da carga JSON. Se houver apenas uma ocorrência de um nó para criptografar, a regra ainda usará a estrutura "xPath" e "iterador". No entanto, ele itera apenas uma vez no loop.

    Mapeamento para um campo-tabela desconhecido na instância

    Neste exemplo, a regra itera sobre os records, mas não tem certeza de quais nós esperar. O único conhecido é que para cada objeto em records, os nós correspondem aos nomes das colunas especificadas no parâmetro de URL da tabela.

    A regra também especifica que, se a tabela for incidente, os dados no nó description devem ser criptografados e armazenados no campo "short_description" na instância.

    function sampleJsonAction2() {
        var jsonContent = request.getAsJsonContent();
        var tableName = request.urlParam.table;
        // This first iterator will iterate over all record elements
        var jsonNodeIterator = jsonContent.getIterator('data/records');
        while (jsonNodeIterator.hasNext()) {
                encryptFieldsInRecord(jsonNodeIterator.next());
        }
    }
    function encryptFieldsInRecord(jsonNode) {
        //this time we want to iterate over all nodes
        var fieldIterator = jsonNode.iterator();
        while (fieldIterator.hasNext()) {
                var field = fieldIterator.next();
                var fieldname = childElement.getName();
                if (fieldName == 'description') {
                    field.valueFor(tableName, 'short_description');
                } else {
                    field.valueFor(tableName, fieldName);
                }
        }
    }

    Na função encryptFieldsInRecord(), o método valueFor() é chamado em uma tabela e em um campo que são atribuídos dinamicamente com base na solicitação. Mesmo que os nomes da tabela e do campo possam mudar, a regra solicita que o proxy verifique se o campo na tabela deve ser criptografado com base nas configurações de criptografia definidas.

    Se o campo não estiver configurado para criptografia ou se o nome do nó não corresponder a um campo na tabela, o proxy ignorará esse nó. Se o nome do nó corresponder a um campo marcado para criptografia, o proxy criptografará o valor.

    Uso de uma consulta codificada

    function sampleJsonAction3() {
        var jsonContent = request.getAsJsonContent();
        var tableName = request.urlParam.table;
        // This first iterator will iterate over all record elements
        var jsonNodeIterator = jsonContent.getIterator('data');
        while (jsonNodeIterator.hasNext()) {
            var jsonNode = jsonNodeIterator.next();
            if (jsonNode.getName() == 'records')
                encryptRecors(jsonNodeIterator.next());
            else if (jsonNode.getName() == 'query')
                jsonNode.encodedQueryFor(tableName);
        }
    }
    function encryptRecords(jsonNode) {
        //we iterate over all fields in the node
        var recordIterator = jsonNode.iterator();
        while (recordIterator.hasNext()) {
            encryptFieldsInRecord(recordIterator.next());
        }
    }
    function encryptFieldsInRecord(jsonNode) {
        //this time we want to iterate over all nodes
        var fieldIterator = jsonNode.iterator();
        while (fieldIterator.hasNext()) {
                var field = fieldIterator.next();
                var fieldname = childElement.getName();
                field.valueFor(tableName, fieldName);
        }
    }

    Neste exemplo, a regra itera sobre data. Ao encontrar records, ele executa a mesma lógica do segundo exemplo, iterando sobre os campos em cada nó. Quando encontra o nó query, ele chama encodedQueryFor() para criptografar valores que devem ser criptografados na consulta.