Publié le :

Test de création et exécution d'un service web SAS Viya

Ce code est également disponible en : Deutsch English Español
En attente de validation
Attention : Ce code nécessite des droits administrateur.
Le script commence par définir dynamiquement le code d'un service web qui lit `sashelp.class` et utilise les fonctions `%webout` pour produire un résultat JSON. Ce code est ensuite déployé comme un service web nommé 'testsvc' via la macro `%mv_createwebservice`. Un jobflow est initié avec `%mv_jobflow` pour exécuter ce service, avec une gestion de la concurrence et la sortie des logs. Après exécution, l'URI du résultat du service est extraite des métadonnées du jobflow. La macro `%mv_getjobresult` est utilisée pour récupérer les données réelles du service via cette URI. Enfin, le script valide que les données récupérées correspondent au contenu attendu de `sashelp.class` en utilisant une assertion sur le nombre d'observations du dataset résultant, via la macro `%mp_assertdsobs`.
Analyse des données

Type : MIXTE


La source de données principale est le dataset interne SAS `sashelp.class`. Le script crée également plusieurs datasets de travail temporaires (`work.inputjobs`, `work.results`, `myweblib.test`, `work.out`, `work.test_results`) et manipule des filerefs temporaires (`testref`, `myjoblog`, `myweb`) pour le stockage intermédiaire du code du service, des logs du jobflow et des résultats du service web.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc utilise un `DATA _NULL_` pour écrire du code SAS dans un fichier temporaire (`testref`). Le code écrit définit un `DATA STEP` simple qui charge `sashelp.class` dans un dataset nommé `test`, puis utilise les macros `%webout` pour formater ce dataset en tant que sortie web (probablement JSON), ce qui est typique pour les services REST.
Copié !
1filename testref temp;
2DATA _null_;
3 file testref;
4 put 'data test; set sashelp.class;run;';
5 put '%webout(OPEN)';
6 put '%webout(OBJ,test)';
7 put '%webout(CLOSE)';
8RUN;
2 Bloc de code
MACRO mv_createwebservice
Explication :
Appelle la macro `%mv_createwebservice` pour créer et déployer un service web nommé `testsvc`. Le chemin de déploiement est spécifié par `&mcTestAppLoc/services/temp`, et le code du service est lu depuis le fileref temporaire `testref` défini précédemment.
Copié !
1%mv_createwebservice(
2 path=&mcTestAppLoc/services/temp,
3 code=testref,
4 name=testsvc
5)
3 Bloc de code
DATA STEP / MACRO mv_jobflow Data
Explication :
Ce bloc prépare l'exécution du service web. Un dataset `work.inputjobs` est créé pour spécifier le programme (`testsvc`) à exécuter. Ensuite, la macro `%mv_jobflow` est appelée pour lancer l'exécution du service, gérant la concurrence avec `maxconcurrency=4`. Les résultats du jobflow sont stockés dans `work.results` et le log d'exécution est enregistré dans le fileref `myjoblog`.
Copié !
1DATA work.inputjobs;
2 _program="&mcTestAppLoc/services/temp/testsvc";
3RUN;
4%mv_jobflow(inds=work.inputjobs
5 ,maxconcurrency=4
6 ,outds=work.results
7 ,outref=myjoblog
8)
4 Bloc de code
DATA STEP
Explication :
Lit le contenu du fichier de log `myjoblog` généré par le jobflow et l'écrit directement dans le log SAS, permettant de visualiser les messages d'exécution du service.
Copié !
1DATA _null_;
2 INFILE myjoblog;
3 INPUT;
4 put _infile_;
5RUN;
5 Bloc de code
DATA STEP
Explication :
Ce `DATA _NULL_` parcourt le dataset `work.results` (qui contient les métadonnées du jobflow) et extrait la valeur de la variable `uri` pour la stocker dans une variable de macro globale nommée `uri`, essentielle pour la récupération des résultats du service. Toutes les variables sont aussi affichées dans le log.
Copié !
1DATA _null_;
2 SET work.results;
3 call symputx('uri',uri);
4 put (_all_)(=);
5RUN;
6 Bloc de code
MACRO mv_getjobresult Data
Explication :
Appelle la macro `%mv_getjobresult` pour récupérer les résultats du service web en utilisant l'URI obtenue précédemment. Le paramètre `result=WEBOUT_JSON` indique que la sortie attendue est au format JSON, qui est stockée dans le fileref `myweb` et un dataset `test` au sein de la bibliothèque `myweblib`.
Copié !
1%mv_getjobresult(uri=&uri
2 ,RESULT=WEBOUT_JSON
3 ,outref=myweb
4 ,outlib=myweblib
5)
7 Bloc de code
DATA STEP
Explication :
Lit le contenu brut du fichier `myweb` (le résultat JSON du service web) et l'affiche dans le log SAS pour un examen direct.
Copié !
1DATA _null_;
2 INFILE myweb;
3 INPUT;
4 putlog _infile_;
5RUN;
8 Bloc de code
DATA STEP Data
Explication :
Crée un dataset de travail nommé `work.out` en lisant les données structurées du dataset `myweblib.test`, qui contient les données de `sashelp.class` telles que renvoyées par le service web et interprétées par la macro `mv_getjobresult`. Affiche également toutes les variables du nouveau dataset dans le log.
Copié !
1DATA work.out;
2 SET myweblib.test;
3 put (_all_)(=);
4RUN;
9 Bloc de code
MACRO mp_assertdsobs Data
Explication :
Appelle la macro de test `%mp_assertdsobs` pour vérifier que le dataset `work.out` contient exactement 19 observations. Ceci valide que le service web a correctement renvoyé toutes les lignes de `sashelp.class`. Le résultat de cette assertion est enregistré dans le dataset `work.test_results`.
Copié !
1%mp_assertdsobs(work.out,
2 desc=Test1 - 19 obs from sashelp.class in service RESULT,
3 test=EQUALS 19,
4 outds=work.test_results
5)
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.