Exemples de stratégie Map
Exemples de définitions OpenAPI des stratégies Map .
- Mappage un à un
- Mappage plusieurs à un
- Transformation simple à l'aide de la zone de valeur
- Mappage de plusieurs contextes dans un nouveau contexte
- Mappage à une définition de schéma en ligne
- Mappage avec une valeur par défaut
- Mappage d'un tableau dans une valeur unique
- Mappage d'éléments de tableau dans un tableau
- Utilisation des options XML avancées
- Augmentation des paramètres d'analyse de la politique de cartographie
Mappage un à un
L'exemple suivant :
- mappe les paramètres de la requête de la demande à un objet du corps du message.
- mappe une chaîne directement à une chaîne unique.
- mappe une chaîne directement à un entier unique.
output, définit un objet contenant une chaîne,
name, et un entier, age. - 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
Mappage plusieurs à un
L'exemple suivant :
- mappe les paramètres de la requête de la demande à un objet du corps du message.
- mappe deux chaînes à une chaîne unique en les concaténant.
- mappe deux entiers à un entier unique en les additionnant.
output, définit un objet contenant une chaîne
et un entier. - 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;
Transformation simple à l'aide de la zone de valeur
L'exemple suivant :
- mappe un paramètre de la requête de la demande à un objet du corps du message.
- mappe une chaîne contenant des minuscules en une chaîne unique ne contenant que des majuscules.
output, définit un objet contenant une chaîne
unique. - 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
Mappage de plusieurs contextes dans un nouveau contexte
L'exemple suivant :
- mappe un entier de l'en-tête de la demande à un entier d'un nouveau corps de message.
- mappe une chaîne du corps du message au corps d'un nouveau contexte personnalisé, nommé nouveau_contexte.
- 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
Mappage à une définition de schéma en ligne
L'exemple suivant :
- mappe les paramètres des en-têtes de la demande à un objet du corps du message, qui est défini dans la stratégie de mappage.
- mappe une chaîne directement à une chaîne unique.
- mappe une chaîne directement à un entier unique.
- 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
Mappage avec une valeur par défaut
L'exemple suivant :
- mappe une chaîne directement à une chaîne unique.
- fournit une valeur par défaut pour la chaîne de sortie si aucune chaîne d'entrée valide n'est fournie.
- 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
Mappage d'un tableau dans une valeur unique
La stratégie de mappage suivante :
- mappe un tableau d'entiers à un entier unique.
- calcule la somme des entiers dans le tableau.
$(0)représente la sortie cumulée car le mappage évalue toutes les valeurs d'élément de tableau.
- 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
Mappage d'éléments de tableau dans un tableau
La stratégie de mappage suivante :
- mappe un tableau, dont les éléments sont des objets contenant deux entiers, à un tableau, dont les entrées contiennent une zone d'entrée unique.
- mappe un tableau à un matrice de même longueur.
- utilise la différence des valeurs des entiers dans chaque élément de tableau pour créer un entier unique dans chaque élément de tableau.
- 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'
Utilisation des options XML avancées
L'exemple suivant :
- n'inclut pas les éléments vides dans la sortie de la stratégie de mappage
- utilise des espaces de nom explicites plutôt qu'hérités de l'élément parent
- indique que toutes les déclarations d'espace de nom seront placées sur l'élément XML racine
- utilise tous les éléments de tableau plutôt que le premier uniquement
- ignore les références de variable API Connect
- mappe les valeurs de propriété d'entrée avec une valeur nulle au document de sortie
- gère les références de type circulaire de façon optimisée
actions:
- set: output, two
from: input, one
options:
includeEmptyXMLElements: false
namespaceInheritance: false
inlineNamespaces: false
mapArrayFirstElementValue: false
mapResolveApicVariables: false
mapNullValue: true
mapOptimizeSchemaDefinition: true
mapCreateEmptyArray: parent
Augmentation des paramètres d'analyse de la politique de cartographie
Pour augmenter la référence aux paramètres d'analyse, vous pouvez mettre à jour la source YAML avec les paramètres d'analyse souhaités. Dans l'exemple suivant, vous pouvez mettre à jour la source YAML avec les paramètres d'analyse nécessaires.
- 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
Pour plus d'informations, voir Création de paramètres d'analyse.