Vous êtes ici :
Mappage de type média dans les enregistrements de service externe
Vous pouvez enregistrer des spécifications avec les directives consumes, produces ou des directives de type de média de contenu OpenAPI 3.0 non prises en charge, en mappant les types de média avec des types de média pris en charge. Spécifiez un mappage depuis le menu déroulant de l'écran d'inscription, ou indiquez le mappage avec un code en utilisant l'API de métadonnées.
Mappage des types de média lors de l'enregistrement
Si vous tentez d'inscrire un schéma qui inclut un type de média non pris en charge, vous êtes invité à fournir un mappage dans la page Associer des opérations à des types de média pris en charge.
Pour associer des opérations à un type de média pris en charge :
- Notez le premier type de média non pris en charge à gauche.
- Mappez le type de média non pris en charge avec un type de média pris en charge, en le sélectionnant dans le menu déroulant à droite.
- Si la liste contient d’autres types de média non pris en charge, faites défiler la liste et sélectionnez un mappage pour chaque type de média non pris en charge répertorié.
- Cliquez sur Suivant.
Poursuivez l'inscription en sélectionnant des opérations, comme indiqué à l'étape 10 de la rubrique Inscription d'un service externe.
Mappage de types de média avec l'API de métadonnées
Pour mapper manuellement un type de média, le type non pris en charge doit être mappé avec un type pris en charge dans le champ serviceBinding du fichier de métadonnées ExternalServiceRegistration.
Pour découvrir la méthode manuelle de mappage de types de média, consultez cet exemple Banque Acme.
La banque Acme spécifie un service OpenAPI 2.0 pour son service de cote de solvabilité. Elle définit son propre type de média pour gérer la charge utile compatible JSON : application/x-acme-json :
{
"swagger":"2.0",
"info":{
"description":"A service for checking credit for an account.",
"version":"1.0.0",
"title":"Credit Decision"
},
"host":"<ACME's host>",
"paths":{
"/account/credit-rating":{
"get":{
"operationId":"getCreditRating",
"summary":"Evaluates credit rating for offered payment terms.",
"consumes":[
"application/x-acme-json"
],
"produces":[
"application/x-acme-json"
],
"parameters":[{
"description":"Account",
"in":"body",
"name":"body",
"required":true,
"schema":{
"$ref":"#/definitions/Account"
}
}],
"responses":{
"200":{
"description": "Credit rating",
"schema":{
"$ref":"#/definitions/CreditRating"
}
}
}
}
}
},
"definitions":{
"Account":{
"type":"object",
"properties":{
"accountId":{
"type":"string"
},
"accountHolder":{
"type":"string"
}
}
},
"CreditRating":{
"type":"object",
"properties":{
"creditRating":{
"type":"string"
}
}
}
}
} Pour mapper le type de média BankService avec le type de média application/json pris en charge, ouvrez un terminal de ligne de commande. Créez un répertoire dans lequel récupérer les métadonnées du service externe.
> mkdir BankService
> cd BankServiceCréez le package.xml manifest pour les métadonnées de service externe que votre BankService doit récupérer depuis votre organisation :
> touch package.xmlModifiez le package.xml :
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>BankService</members>
<name>ExternalServiceRegistration</name>
</types>
<version>53.0</version>
</Package>Récupérez les métadonnées du service externe avec la commande Salesforce CLI après l'authentification réussie à votre organisation :
> sf project retrieve start --target-metadata-dir . --manifest package.xmlDécompressez le package zip avec les métadonnées, puis accédez au répertoire avec le service externe :
> unzip unpackaged.zip
> cd unpackaged/externalServiceRegistrationsModifiez les liaisons de service dans le fichier de métadonnées d'inscription du service externe BankService.externalServiceRegistration. Ne coupez pas la section <serviceBinding> (en caractères gras) par des sauts de ligne afin de ne pas rompre la désérialisation.
<?xml version="1.0" encoding="UTF-8"?>
<ExternalServiceRegistration xmlns="http://soap.sforce.com/2006/04/metadata">
<label>MediaTypeMap</label>
<namedCredential>BankServiceEndpoint</namedCredential>
<operations>
<active>true</active>
<name>getcreditrating</name>
</operations>
<registrationProviderType>Custom</registrationProviderType>
<schema>{
...
}
</schema>
<schemaType>OpenApi</schemaType>
<serviceBinding>{"compatibleMediaTypes"
:{"application/x-acme-json"
:"application/x-acme-json"}}</serviceBinding>
<status>Complete</status>
</ExternalServiceRegistration>La liaison du service spécifie au format JSON les types de médias non pris en charge définis par cette inscription du service externe :
{"compatibleMediaTypes":{
"application/x-acme-json":"application/x-acme-json"
}}Mappez le type de média non pris en charge avec le type de média pris en charge pour la sérialisation de la charge utile du service externe :
{"compatibleMediaTypes":{
"application/x-acme-json":"application/json"
}}Les métadonnées mises à jour de l’exemple d'inscription du service externe de cote de solvabilité respectent le mappage du type de média avec le type de média pris en charge lorsqu’il est déployé dans un package :
<?xml version="1.0" encoding="UTF-8"?>
<ExternalServiceRegistration xmlns="http://soap.sforce.com/2006/04/metadata">
<label>MediaTypeMap</label>
<namedCredential>BankService</namedCredential>
<operations>
<active>true</active>
<name>getcreditrating</name>
</operations>
<registrationProviderType>Custom</registrationProviderType>
<schema>{
...
}
</schema>
<schemaType>OpenApi</schemaType>
<serviceBinding>{"compatibleMediaTypes"
:{"application/x-acme-json"
:"application/json"}}</serviceBinding>
<status>Complete</status>
</ExternalServiceRegistration>Ne coupez pas la section <serviceBinding> par des sauts de ligne afin de ne pas rompre la désérialisation.
Enregistrez le fichier de métadonnées d’enregistrement du service externe modifié et déployez-le :
> cd ../..
> sf project deploy start --metadata-dir unpackagedPour plus d'informations, consultez :

