Ce document fournit des informations et des ressources utiles pour vous aider à développer des applications SAP à l'aide de l'édition SAP BTP du SDK ABAP pour Google Cloud.
Ce document est destiné aux développeurs SAP ABAP.
Pour obtenir la liste complète des bibliothèques clientes fournies par l'édition édition SAP BTP du SDK ABAP pour Google Cloud, consultez la page Bibliothèques clientes du SDK ABAP pour Google Cloud.
Fenêtre d'interaction unique
Chaque API Google Cloud activée dans le SDK ABAP pour Google Cloud est représentée par une classe ABAP contenue dans le package /GOOG/CLIENT
. Une classe ABAP comprend plusieurs méthodes publiques, qui correspondent chacune à une méthode API Google Cloud. Chaque méthode publique inclut en outre des paramètres IMPORTING
et EXPORTING
. Une classe ABAP contient également des types de données personnalisés, qui peuvent être utilisés pour créer et mapper les paramètres IMPORTING
et EXPORTING
. Ces types de données personnalisés sont mappés aux définitions de schéma d'API.
Pour chaque interaction avec une API Google Cloud cible, sa classe ABAP correspondante sert de point d'interaction unique. Nous appelons ce concept fenêtre d'interaction unique. Celle-ci protège toutes les complexités sous-jacentes liées à l'interaction avec une API Google Cloud et présente une interface simplifiée. Cette interface simplifiée vous permet de vous concentrer sur les solutions d'entreprise développées à l'aide du SDK, sans vous soucier des fonctionnalités sous-jacentes du SDK.
Flux d'interaction
Pour appeler une méthode API, vous disposez du flux d'interaction suivant :
- Se connecter à une API
- Créer une requête d'entrée à l'aide des types ABAP
- Appeler une méthode API
- Analyser les erreurs et les exceptions
- Lire la réponse à l'aide des types ABAP
Bouchon de client API
Une classe de bouchon de client API comprend généralement les sections suivantes :
- Types ABAP mappés aux schémas d'API vous permettant de créer une requête d'entrée et d'analyser la réponse
- Constantes et attributs pour une utilisation interne ou externe
- Méthodes API pour interagir avec les ressources d'API
Fonctionnalités
Le SDK ABAP pour Google Cloud inclut les fonctionnalités suivantes :
- Communication HTTP : le SDK établit une connexion HTTP avec les points de terminaison de l'API.
- Marshalling des requêtes : le SDK convertit les données de type ABAP en charge utile JSON, qui est envoyée en tant que corps de la requête.
- Gestion des erreurs et des exceptions : le SDK gère les codes et les messages d'erreur renvoyés par l'API et génère des exceptions, le cas échéant.
- Annulation du marshalling de la réponse : le SDK reconvertit la charge utile JSON dans le corps de la réponse en types ABAP correspondants.
- Journalisation locale des erreurs : le SDK consigne les messages d'erreur à l'aide du framework de journalisation.
Conception d'API et Google API Explorer
Les API publiées par Google suivent une conception orientée ressources. Pour en savoir plus sur la conception des API Google, consultez le guide de conception d'API.
Le SDK ABAP pour Google Cloud permet l'intégration avec les API REST publiées par Google.
Google API Explorer est un outil qui vous permet d'essayer les méthodes API Google Cloud, sans écrire de code. Vous pouvez utiliser cet outil pour examiner les API et les paramètres d'entrée requis que vous souhaitez transmettre à leurs méthodes ABAP correspondantes.
Constructions de code
Décrit les constructions de code qui vous permettent de créer vos programmes ABAP à l'aide du SDK ABAP pour Google Cloud.
Constructeur
Vous devez d'abord instancier la classe d'API que vous souhaitez utiliser. Le constructeur de chaque classe d'API aurait un modèle similaire, comme indiqué dans l'exemple suivant :
METHODS constructor IMPORTING !iv_key_name TYPE /goog/keyname OPTIONAL "Google Cloud Key Name !iv_log_obj TYPE balobj_d OPTIONAL "Application log: Object name !iv_log_subobj TYPE balsubobj OPTIONAL. "Application log: Subobject RAISING /goog/cx_sdk . "Exception Classes
Paramètres d'importation
Le tableau suivant décrit les paramètres d'importation d'un constructeur de méthode :
Nom du paramètre | Type | Obligatoire/Facultatif | Description |
---|---|---|---|
iv_key_name |
/GOOG/KEYNAME |
Obligatoire | Spécifiez la clé client de la configuration que vous utilisez pour établir une connexion à Google Cloud. Pour en savoir plus sur la configuration des clés client, consultez la page Authentification. |
iv_log_object |
balobj_d |
Facultatif | Spécifiez l'objet journal de l'application dont vous vous servez pour stocker les erreurs générées par le SDK. Pour obtenir des informations sur la configuration de la journalisation, consultez la section Journalisation des applications. |
iv_log_subobject |
balsubobj |
Facultatif | Spécifiez le sous-objet de journal d'application utilisé pour stocker les erreurs générées par le SDK. Pour obtenir des informations sur la configuration de la journalisation, consultez la section Journalisation des applications. |
Méthode API
Dans la conception des API Google Cloud orientée ressource, une méthode API est une action pouvant être effectuée sur une ressource publiée par l'API.
Par exemple, si Topics
est une ressource publiée par l'API Pub/Sub, topics.get
est une méthode API représentant une action sur la ressource Topics
permettant d'obtenir la configuration d'un sujet.
Pour mapper une méthode de classe ABAP à une méthode API, vous pouvez consulter la description de la méthode au format : <resource>.<method_verb>
.
Par exemple, la description d'une méthode Pub/Sub est pubsub.projects.topics.get
.
projects.topics
: nom de la ressource.get
: action de la méthode.
Le nom d'un mappage de méthode ABAP à une action d'API est au format : <method_verb>_<resource>
.
Par exemple, le nom d'une méthode ABAP pour Pub/Sub est GET_TOPICS
.
GET
: action de la méthode.TOPICS
: nom de la ressource.
Une méthode ABAP comprend les sections suivantes qui correspondent aux méthodes de l'API REST :
Paramètres d'importation
Une méthode API peut inclure les paramètres d'importation suivants. Ces paramètres sont facultatifs. Vous pouvez les transmettre en fonction des exigences d'une méthode API que vous devez utiliser.
Nom du paramètre | Type | Catégorie | Description |
---|---|---|---|
( |
Chaîne | Paramètres de requête | Les paramètres de requête sont ajoutés au point de terminaison de l'API après ( Ils permettent de définir le tri, la pagination ou le filtrage. Il peut y avoir de |
( |
Chaîne | Paramètres de chemin d'accès | Les paramètres de chemin d'accès font partie du point de terminaison. Ils sont utilisés pour pointer vers des ressources d'API REST spécifiques. Il peut y avoir de |
( |
TY_CODE (type de classe) |
Paramètres de la structure d'entrée | Les données transmises en tant que corps de la requête peuvent être mappées à l'aide de la structure d'entrée. L'API REST accepte la charge utile JSON en tant que corps de requête. Il s'agit d'un paramètre entièrement typé qui est converti en charge utile JSON pour la classe d'API. Le développeur n'est pas tenu d'utiliser JSON. Vous pouvez consulter les types de classes disponibles pour comprendre les types ABAP nécessaires au mappage des données. Par exemple, le type Une méthode ne peut comporter qu'un seul paramètre de corps de requête. Certaines méthodes ne comportent pas de corps de requête. |
Paramètres d'exportation
Une méthode API accepte les paramètres d'exportation suivants :
Nom du paramètre | Type | Catégorie | Description |
---|---|---|---|
es_raw |
données | Sortie brute |
Ce paramètre contient la réponse JSON (erreur ou réussite) renvoyée par la méthode API. Mappez ce paramètre à une variable de type chaîne pour recevoir la chaîne de réponse JSON. Si la réponse est d'un autre type (par exemple, xstring) pour le résultat du fichier dans Utilisez ce paramètre pour les scénarios de dépannage ou d'API avancés. |
es_output |
TY_CODE (type de classe) | Structure de sortie |
La réponse JSON est désérialisée dans la structure ABAP et renvoyée à l'aide de ce paramètre d'exportation typé. Vous pouvez l'utiliser en tant que moyen principal pour lire les réponses de l'API à l'aide des constructions ABAP. |
ev_ret_code |
I (entier) | Code renvoyé |
Code renvoyé que vous pouvez utiliser pour vérifier si la méthode API a pu remplir sa fonction. Pour en savoir plus, consultez la section Codes, erreurs et exceptions renvoyés par l'API. |
ev_err_text |
Chaîne | Texte de l'erreur |
Si l'appel de méthode a échoué, ce paramètre contient le message d'erreur que vous utilisez pour connaître la raison de l'échec. Pour en savoir plus, consultez la section Codes, erreurs et exceptions renvoyés par l'API. |
ev_err_resp |
|
Réponse d'erreur |
Ce paramètre fournit des informations supplémentaires sur l'erreur. Pour en savoir plus, consultez la section Codes, erreurs et exceptions renvoyés par l'API. |
Type de classe
Les API Google Cloud utilisent JSON comme format principal pour l'échange de données. Le SDK ABAP pour Google Cloud fournit des types ABAP qui correspondent au schéma JSON attendu par les API Google Cloud.
Ces types ABAP et les types de tables associés sont disponibles en tant que types de classes dans chaque classe d'API fournie par le SDK.
L'exemple suivant présente le type de classe de l'API Pub/Sub /GOOG/CL_PUBSUB_V1
.
La description du type de classe TY_041
sous /GOOG/CL_PUBSUB_V1
est mappée à la ressource REST Topic
, qui est transmise en tant que charge utile JSON à la méthode CREATE_TOPICS
.
Les commentaires ABAP Doc
sont ajoutés à toutes les classes de l'API cliente.
Lorsque vous utilisez des outils de développement ABAP pour SAP NetWeaver (ADT) pour le développement, ces commentaires décrivent les types de classes.
Codes, erreurs et exceptions renvoyés par l'API
Si une erreur se produit lorsque la méthode API de la classe ABAP est appelée, le SDK ABAP pour Google Cloud transmet les informations liées à l'erreur au programme appelant à l'aide des paramètres d'exportation du SDK ou en générant des exceptions.
Code et erreurs renvoyés par l'API
Les API Google Cloud utilisent un modèle d'erreur qui offre une expérience cohérente dans les différentes API. Lorsqu'une méthode d'API Google Cloud est appelée à partir du SDK, les paramètres suivants contiennent le code et les messages renvoyés par l'API :
ev_ret_code
: code renvoyé ou code d'erreur dans la réponse.ev_error_text
: message d'erreur dans la réponse, le cas échéant.es_raw
: réponse d'erreur brute si un appel de méthode API a échoué.
Pour vérifier l'état d'un appel d'API, utilisez la méthode IS_SUCCESS
. Vous pouvez utiliser la valeur de ev_ret_code
pour déterminer si un appel d'API a réussi ou non. En général, lorsque ev_ret_code = 2XX
, l'appel de méthode est considéré comme ayant réussi. Pour toutes les autres valeurs, l'appel de méthode est considéré comme ayant échoué.
IF lo_client->is_success( ev_ret_code ).
"Success: Implement custom code
ELSE
"Handle the HTTP error status code
ENDIF.
Pour certaines API Google Maps Platform, si vous appelez une API avec des entrées non valides, l'API renvoie un code d'état HTTP positif 2XX
avec un message d'erreur et un état d'erreur au lieu d'un code d'état d'erreur HTTP (4XX
ou 5XX
). Ce message d'erreur et l'état d'erreur dans la réponse de l'API peuvent vous aider à résoudre le problème et à corriger les entrées non valides.
Pour ces API Google Maps Platform, en plus du code de retour ev_ret_code
, vérifiez le message d'erreur et l'état d'erreur renvoyés dans la réponse de l'API en appelant la méthode IS_STATUS_OK
après l'appel d'API. L'extrait de code suivant montre comment utiliser la méthode IS_STATUS_OK
:
IF lo_client->is_status_ok( ).
"Success: Implement custom code
ELSE
"Handle the HTTP error status code
ENDIF.
Le paramètre es_err_resp
fournit des informations supplémentaires sur l'erreur.
Le tableau suivant explique les champs du paramètre es_err_resp
.
Champ | Valeur |
---|---|
es_err_resp-error_description |
Message d'erreur reçu de l'API. Cette valeur est identique au paramètre ev_error_text . |
es_err_resp-error |
Description de l'état HTTP renvoyée par le client HTTP SAP. |
Gérer les erreurs renvoyées par les API Google Cloud
Suivez les instructions ci-dessous pour gérer les erreurs renvoyées par les API Google Cloud :
Codes d'erreur courants : pour obtenir des informations sur les erreurs courantes renvoyées par les API Google Cloud et leur cause, consultez la section Codes d'erreur.
Capturer l'erreur détaillée : pour collecter des informations détaillées sur l'erreur renvoyée avec le SDK ABAP pour Google Cloud, utilisez le paramètre d'exportation
es_raw
des méthodes de la classe du SDK, et mappez ce paramètre sur une variable de typeString
Cette variable contient une réponse JSON contenant des messages d'erreur détaillés et les violations spécifiques rencontrées par les API.Afficher l'erreur détaillée : utilisez l'une des méthodes suivantes pour afficher des informations détaillées sur l'erreur renvoyée :
- Debugger : permet d'afficher le contenu de la variable contenant la réponse JSON dans l'outil de débogage ABAP, pour une analyse plus approfondie.
IUG SAP : utilisez la classe ABAP
cl_demo_output=>display( lv_response )
pour obtenir une représentation visuelle de l'erreur dans un programme de rapport. Si vous utilisez les méthodes d'API dans un programme de rapport et que l'exécution du programme est en mode de premier plan, utilisez la classe ABAPcl_demo_output=>display_json( lv_response )
.L'extrait de code suivant montre comment afficher la réponse de l'API en cas d'erreur :
DATA lv_response TYPE string, TRY. lo_translate = NEW #( iv_key_name = 'DEMO_TRANSLATE' ). lo_translate->translate_translations EXPORTING is_input = ls_input IMPORTING es_raw = lv_response es_output = ls_output ev_ret_code = lv_ret_code ev_err_text = lv_err_text es_err_resp = ls_err_resp. IF lo_translate->is_error( lv_ret_code ) = abap_true. " Display API response in case of an error cl_demo_output=>display_json( lv_response ). ENDIF. CATCH /goog/cx_sdk INTO lo_exception. lv_err_text = lo_exception->get_text( ). ENDTRY.
Documentation spécifique aux API : certaines API Google Cloud fournissent des informations détaillées sur les erreurs et des conseils de dépannage dans leur documentation individuelle. Pour résoudre une erreur liée à une API, consultez la documentation spécifique à cette API, par exemple celle de Pub/Sub, de Document AI ou de Cloud Storage.
Exceptions
Lorsqu'une erreur inattendue se produit lors d'un appel de méthode API (par exemple, configuration du SDK incorrecte ou échec de communication HTTP), le SDK génère une exception de classe de type /GOOG/CX_SDK
. Vous devez intercepter cette exception dans votre code et rédiger une logique appropriée de gestion des erreurs.
Vous pouvez obtenir le message d'erreur en appelant la méthode get_text
de la classe d'exception. Le message d'erreur renvoyé par la classe d'exception est au format suivant :
/GOOG/MSG : Return_Code - Error_Message
La cause de l'erreur et la procédure de résolution dépendent de la valeur de Return_Code
.
Valeur de Return_Code |
Cause de l'erreur | Solution |
---|---|---|
461 |
Le SDK ABAP pour Google Cloud utilise un code de retour spécial, 461 , pour indiquer qu'une étape d'installation et de configuration spécifique n'a pas été effectuée ou a été effectuée de manière incorrecte. Le message d'erreur Error_Message correspondant fournit plus de détails sur l'erreur. |
Vous devez examiner attentivement les instructions d'installation et de configuration du SDK, et vous assurer de bien les suivre. |
Toute autre valeur | Ce code renvoyé est la dernière erreur HTTP de la classe du client HTTP SAP standard. Cette erreur signifie que le gestionnaire de communication Internet SAP a rencontré un problème de communication lors de l'appel d'une méthode d'API REST Google. | Vous devez examiner attentivement votre réseau, votre pare-feu et les paramètres du gestionnaire de communication Internet SAP, et vous assurer que les configurations autorisent les appels HTTP vers les API Google Cloud. |
Pour connaître les messages d'erreur types déclenchés dans le SDK ABAP pour Google Cloud et savoir comment les résoudre, consultez le guide de dépannage.
Journalisation
L'édition SAP BTP du SDK ABAP pour Google Cloud vous permet de consigner les messages d'erreur à l'aide d'un framework de journalisation intégré. L'objet /GOOG/LOG_OBJECT
et le sous-objet /GOOG/LOG_SUBOBJECT
de journal sont envoyés avec le SDK que vous pouvez utiliser pour créer la configuration de journal par défaut. Pour en savoir plus sur la création de la configuration de journal par défaut, consultez la section Configurer la journalisation.
Vous pouvez afficher les journaux d'application à l'aide de l'application Google SDK : afficher les journaux d'application. Pour en savoir plus, consultez la section Afficher les journaux.
Mappage des types de données
Le tableau suivant fournit la liste complète des valeurs type
et format
compatibles avec le service de découverte des API Google, ainsi que le type de données ABAP correspondant.
Pour en savoir plus sur les valeurs type
et format
acceptées par le service de découverte des API Google, consultez la page Récapitulatif des types et des formats.
Valeur du type | Valeur du format | Type de données ABAP | Signification |
---|---|---|---|
tous | TYPE REF TO DATA | La propriété peut être associée à n'importe quel type. Définie par la spécification du schéma JSON. | |
tableau | TABLE TYPE WITH NON UNIQUE KEYS | Tableau de valeurs JavaScript. La propriété des éléments indique le schéma des valeurs du tableau. Défini par la spécification du schéma JSON. | |
booléen | ABAP_BOOLEAN | Valeur booléenne ("true" ou "false"). Définie par la spécification du schéma JSON. | |
entier | int32 | INT4 | Entier signé de 32 bits Sa valeur minimale est -2 147 483 648 et sa valeur maximale est 2 147 483 647 (incluse). |
entier | uint32 | INT4 | Entier non signé de 32 bits. Sa valeur minimale est 0 et sa valeur maximale est 4 294 967 295 (incluse). |
nombre | double | /GOOG/NUM_DOUBLE (chaîne) |
Format à virgule flottante IEEE 754 64 bits à double précision. |
nombre | float | /GOOG/NUM_FLOAT (chaîne) |
Format à virgule flottante IEEE 754 32 bits à double précision. |
objet | TYPES | Objet JavaScript. Défini par la spécification du schéma JSON. | |
chaîne | STRING | Chaîne arbitraire. Définie par la spécification du schéma JSON. | |
chaîne | octet | STRING | Chaîne d'octets complétée et encodée en base64 avec une syntaxe sûre pour les URL et les noms de fichiers (parfois appelée "adapté au Web" ou "base64url"). Définie par la norme RFC 4648. |
chaîne | date | STRING | Date RFC 3339 au format AAAA-MM-JJ. Définie dans la spécification du schéma JSON. |
chaîne | date-time | STRING | Code temporel au format UTC RFC 3339. Il est au format "aaaa-MM-jjTHH:mm:ss.SSSZ". La partie correspondant aux millisecondes (".SSS") est facultative. Défini dans la spécification du schéma JSON. |
chaîne | google-datetime | STRING | Code temporel au format UTC RFC 3339. Il est au format "aaaa-MM-jjTHH:mm:ss.SSSZ". La partie correspondant aux millisecondes (".SSS") est facultative. |
chaîne | google-duration | STRING | Une chaîne se termine par le suffixe "s" (indiquant les secondes) et est précédée du nombre de secondes, avec des nanosecondes exprimées sous forme de fractions de secondes. Le point est toujours utilisé comme séparateur décimal, et non une virgule. |
chaîne | google-fieldmask | STRING | Chaîne dans laquelle les noms de champs sont séparés par une virgule. Les noms des champs sont représentés selon les conventions de nommage en "lower camel case". |
chaîne | int64 | STRING | Entier signé de 64 bits Sa valeur minimale est -9 223 372 036 854 775 808 et sa valeur maximale est 9 223 372 036 854 775 807 (incluse). |
chaîne | uint64 | STRING | Entier non signé de 64 bits. Sa valeur minimale est 0 et sa valeur maximale est (2^64)-1 (incluse). |
Sérialisation et désérialisation des requêtes et réponses d'API
Par défaut, l'édition SAP BTP du SDK ABAP pour Google Cloud se charge du marshaling et du démarshaling des requêtes et des réponses d'API. Chaque classe ABAP d'une API Google Cloud comporte des types ABAP intégrés pour former l'entrée et la sortie des méthodes. Pour mettre en œuvre une transformation personnalisée de la requête et de la réponse, vous pouvez utiliser l'emplacement d'amélioration avec les définitions SAP BAdI (Business Add In) fournies avec le SDK.
Mettre en œuvre une transformation personnalisée
Le spot d'amélioration /GOOG/ES_TRANSFORM_JSON
, fourni avec le SDK, inclut les définitions BAdI suivantes :
/GOOG/BADI_SERIALIZE_JSON
: pour mettre en œuvre une logique de sérialisation personnalisée/GOOG/BADI_DESERIALIZE_JSON
: pour mettre en œuvre une logique de désérialisation personnalisée
Vous pouvez écrire une logique de transformation spécifique dans les implémentations de ces BAdI.
Les interfaces de ces BAdI utilisent IV_METHOD_NAME
comme paramètre d'importation.
Vous utilisez ce paramètre pour séparer la logique de transformation pour chaque API et méthode d'API à l'aide de blocs IF….ENDIF
. Dans votre bloc d'implémentation, définissez le paramètre d'exportation EV_HANDLED
sur X
.
Pour mettre en œuvre une transformation personnalisée, procédez comme suit :
Pour
/GOOG/BADI_SERIALIZE_JSON
, créez une implémentation d'amélioration :- Pour transformer des requêtes API, créez une implémentation pour la définition BAdI
/GOOG/BADI_SERIALIZE_JSON
avec une classe d'implémentation. - Pour transformer les réponses de l'API, créez une implémentation pour la définition BAdI
/GOOG/BADI_DESERIALIZE_JSON
avec une classe d'implémentation.
- Pour transformer des requêtes API, créez une implémentation pour la définition BAdI
Déterminez l'ID de la méthode d'API pour laquelle vous devez écrire la transformation. L'ID de méthode est la concaténation des éléments suivants :
- Valeur de la constante d'attribut de classe
C_SERVICE_NAME
- Caractère
#
- Description de la méthode de classe API pour laquelle vous devez mettre en œuvre la transformation
Par exemple, pour écrire des transformations pour la publication de messages dans un sujet Pub/Sub, l'ID de la méthode serait le suivant :
pubsub:v1#pubsub.projects.topics.publish
- Valeur de la constante d'attribut de classe
Dans l'implémentation de la méthode de la définition BAdI :
- Pour l'ID de la méthode, écrivez votre transformation personnalisée sous un bloc
IF….ENDIF block
. Définissez le paramètre d'exportation
EV_HANDLED
surX
.Si
EV_HANDLED
n'est pas défini surX
, la logique de marshaling et de démarshaling par défaut du SDK est appliquée.
- Pour l'ID de la méthode, écrivez votre transformation personnalisée sous un bloc
Marquez l'élément
API State
de la classe de mise en œuvre surUse System-Internally (Contract C1)
. La logique de transformation personnalisée est appelée lors de l'exécution. La logique de sérialisation et de désérialisation par défaut fournie avec le SDK est ignorée.
Espace de noms
L'ensemble du code fourni par Google est placé sous l'espace de noms réservé /GOOG/
.
Obtenir de l'aide
Procédez comme suit si vous avez besoin d'aide pour résoudre les problèmes liés au SDK ABAP pour Google Cloud :
Consultez le guide de dépannage du SDK ABAP pour Google Cloud.
Posez vos questions concernant le SDK ABAP pour Google Cloud et discutez de celui-ci avec la communauté sur les forums Cloud.
Recueillez toutes les informations de diagnostic disponibles et contactez Cloud Customer Care. Pour savoir comment contacter le service client, consultez la page Obtenir de l'aide pour SAP sur Google Cloud.