Exemplos de política Mapear

Exemplos das definições OpenAPI de políticas Map .

Mapeamento um para um

O exemplo a seguir:
  • mapeia parâmetros da consulta da solicitação para um objeto no corpo da mensagem.
  • mapeia uma sequência diretamente para uma sequência única.
  • mapeia um número inteiro diretamente para um número inteiro único.
A definição referenciada, output, define um objeto que contém uma sequência, um nome e um número inteiro, idade.
      - map:
          title: 1-1 map
          inputs:
            input_string:
              schema:
                type: string
              variable: request.parameters.name_in     # the location of the variable, named "name_in" and found in the query parameters of the request
            input_integer:
              schema:
                type: integer
              variable: request.parameters.age_in    # another variable in the query parameters of the request
          outputs:
            output:
              schema:
                $ref: '#/definitions/output'    # a schema definition reference to use for the output. The schema is for the whole of the message body.
              variable: message.body
          actions:
            - set: output.name_out    # in the actions section, variables are referenced by their name within the map policy
              from: input_string      # if a value field is not used, the mapping is direct with the input value used for the output variable
            - set: output.age_out     # because the 'output' variable is itself an object, further references are made to variables that it contains
              from: input_integer

Mapeamento muitos para um

O exemplo a seguir:
  • mapeia parâmetros da consulta da solicitação para um objeto no corpo da mensagem.
  • mapeia duas sequências para uma sequência única concatenando-as.
  • mapeia dois números inteiros para um número inteiro único somando-os.
A definição referenciada, output, define um objeto que contém uma sequência e um número inteiro.
      - map:
          title: many-1 map
          inputs:
            input_string_1:
              schema:
                type: string
              variable: request.parameters.first_name
            input_string_2:
              schema:
                type: string
              variable: request.parameters.last_name
            input_integer_1:
              schema:
                type: integer
              variable: request.parameters.balance_1
            input_integer_2:
              schema:
                type: integer
              variable: request.parameters.balance_2
          outputs:
            output:
              schema:
                $ref: '#/definitions/output'
              variable: message.body
          actions:
            - set: output.full_name
              from:
                - input_string_1
                - input_string_2
               value: |
                 var retValue = undefined;
                 if ($(input_string_1) !== undefined && $(input_string_2) !== undefined) { 
                   retValue = $(input_string_1).toUpperCase() + ' ' + $(input_string_2).toUpperCase()"
                 }
                 retValue;
            - set: output.total_balance
              from:
                - input_integer_1
                - input_integer_2
              value:  |
                var i1 = 0;
                var i2 = 0;
                if ($(input_integer_1) !== undefined) i1 = $(input_integer_1);
                if ($(input_integer_2) !== undefined) i2 = $(input_integer_2);
                i1 + i2;

Uma transformação simples usando o campo de valor

O exemplo a seguir:
  • mapeia um parâmetro da consulta da solicitação para um objeto no corpo da mensagem.
  • mapeia uma sequência que apresenta caracteres minúsculos para uma sequência única que contém somente caracteres maiúsculos.
A definição referenciada, output, define um objeto que contém uma sequência única.
      - map:
          title: Uppercase map
          inputs:
            input_lowercase:
              schema:
                type: string
              variable: request.parameters.name_in
          outputs:
            output_uppercase:
              schema:
                $ref: '#/definitions/output'
              variable: message.body
          actions:
            - set: output_uppercase.name_out
              from: input_lowercase
              value: $(input_lowercase).toUpperCase()    # the input variable is referenced and calls the toUpperCase method to produce a value for the output variable

Mapeando a partir de múltiplos contextos em um novo contexto

O exemplo a seguir:
  • mapeia um número inteiro do cabeçalho da solicitação para um número inteiro em um novo corpo da mensagem.
  • mapeia uma sequência do corpo da mensagem para o corpo de um novo contexto customizado, denominado new_context.
      - map:
          title: Context map
          inputs:
            input_integer:
              schema:
                type: integer
              variable: request.headers.age_in      # the 'age_in' header of the request is used as an input
            input_string:
              schema:
                type: string
              variable: message.body.name_in      # as is the 'name_in' field of the request body
          outputs:
            output_integer:
              schema:
                type: integer
              variable: message.body.age_out
            output_string:
              schema:
                type: string
              variable: new_context.body.name_internal    # the context named 'new_context' is created by the map policy and exists only while the assembly is processed
          actions:
            - set: output_string
              from: input_string
            - set: output_integer
              from: input_integer

Mapeando para uma definição de esquema sequencial

O exemplo a seguir:
  • mapeia parâmetros dos cabeçalhos da solicitação para um objeto no corpo da mensagem, que é definido na política de mapa.
  • mapeia uma sequência diretamente para uma sequência única.
  • mapeia um número inteiro diretamente para um número inteiro único.
      - map:
          title: Inline schema map
          inputs:
            input_integer:
              schema:
                type: integer
              variable: request.headers.age_in
            input_string:
              schema:
                type: string
              variable: request.headers.name_in
          outputs:
            output:
              schema:                    # instead of a simple type or a reference to a definition, an inline YAML definition is used
                type: object
                properties:
                  name_out:
                    type: string
                    name: name_out
                  age_out:
                    type: integer
                    format: int32
                    name: age_out
                title: output
              variable: message.body
          actions:
            - set: output.age_out
              from: input_integer
            - set: output.name_out
              from: input_string

Mapeando com um valor padrão

O exemplo a seguir:
  • mapeia uma sequência diretamente para uma sequência única.
  • fornece um valor padrão para a sequência de saída se uma sequência de entrada válida não for fornecida.
      - map:
          title: Default Map
          inputs:
            input_string:
              schema:
                type: string
              variable: request.headers.name_in
          outputs:
            output_string:
              schema:
                type: string
              variable: message.body.name_out
          actions:
            - set: output_string
              from: input_string
              default: John Smith            # the default field is specified in the same way as a value, in this case providing a fixed value 

Mapeando uma matriz para um valor único

A política de mapa a seguir:
  • mapeia uma matriz única de números inteiros para um número inteiro único.
  • soma os números inteiros na matriz.
  • $(0) representa a saída acumulada porque o mapa avalia todos os valores de elemento de matriz.
      - map:
          title: Summation map
          inputs:
            input:
              schema:
                $ref: '#/definitions/balance_array_in'
              variable: request.body
          outputs:
            output:
              schema:
                type: integer
              variable: message.body.total_balance_out    # instead of using a full schema definition of the message body, a single variable in the message body is specified
          actions:
            - set: output
              from: input
              foreach: input      # the foreach field specifies that each value of the array 'input' is to be iterated over
              value: $(0)+$(input) # the $(0) reference is the accumulated value of the 'output' variable

Mapeando elementos de matriz para uma matriz

A política de mapa a seguir:
  • mapeia uma matriz, cujos elementos são objetos que contêm dois números inteiros, para uma matriz, cujas entradas contêm um campo de número inteiro único.
  • mapeia uma matriz para uma matriz do mesmo comprimento.
  • tome a diferença dos valores dos números inteiros em cada elemento de matriz para criar um número inteiro único em cada elemento de matriz.
      - map:
          title: Array summation
          inputs:
            input:
              schema:
                $ref: '#/definitions/balance_and_credit_array'
              variable: request.body
          outputs:
            output_array:
              schema:
                type: array
              variable: message.body
          actions:
            - create: output_array
              from: input
              foreach: input
              actions:
                - set: total_balance_out
                  from:                          # inside the actions section, variables inside the array elements being iterated over are used
                    - integer_in_1
                    - integer_in_2
                  value: $(integer_in_1)-$(integer_in_2)      # the difference of the variables is taken for each array entry of 'input'

Usando as opções XML avançadas

O exemplo a seguir:
  • não inclui elementos vazios na saída da política de mapa.
  • usa namespaces explícitos, em vez de herdar namespaces do elemento-pai
  • indica que todas as declarações de namespace serão colocadas no elemento XML raiz
  • usa todos os elementos de matriz em vez de somente o primeiro
  • ignora referências de variáveis API Connect
  • mapeia valores de propriedade de entrada com um valor nulo para o documento de saída
  • manipula referências de tipos circulares de maneira otimizada

        actions:
            - set: output, two
              from: input, one
        options:
            includeEmptyXMLElements: false
            namespaceInheritance: false
            inlineNamespaces: false
            mapArrayFirstElementValue: false
            mapResolveApicVariables: false
            mapNullValue: true
            mapOptimizeSchemaDefinition: true
            mapCreateEmptyArray: parent

Aumentar as configurações de análise da política do Map

Para aumentar a referência de configurações de análise, você pode atualizar o arquivo YAML de origem com as configurações de análise desejadas. Seguindo o exemplo a seguir, você pode atualizar o arquivo YAML com as configurações de análise necessárias.


        - map:
          version: 2.1.0
          title: map
          inputs: {}
          outputs: {}
          actions: []
          parse-settings-reference:
            parse-settings:
              document_type: detect
              max_doc_size: 8388608
              max_nesting_depth: 512
              max_width: 8192
              max_name_length: 256
              max_value_length: 8192
              max_unique_names: 1024
              max_unique_prefixes: 1024
              max_unique_namespaces: 1024
              max_number_length: 128
          options:
            mapEmulateV4EmptyJSONObject: false
            mapEmulateV4DefaultRequiredProps: true
            mapEnablePostProcessingJSON: false
            mapReferenceLimit: 1

Para obter mais informações, consulte “Criação de configurações de análise ”.