Publicado el :

Prueba de creación y ejecución de un servicio web SAS Viya

Este código también está disponible en: Deutsch English Français
En espera de validación
Attention : Este código requiere privilegios de administrador.
El script comienza definiendo dinámicamente el código de un servicio web que lee `sashelp.class` y utiliza las funciones `%webout` para producir un resultado JSON. Este código se despliega luego como un servicio web llamado 'testsvc' a través de la macro `%mv_createwebservice`. Se inicia un jobflow con `%mv_jobflow` para ejecutar este servicio, con gestión de concurrencia y salida de logs. Después de la ejecución, la URI del resultado del servicio se extrae de los metadatos del jobflow. La macro `%mv_getjobresult` se utiliza para recuperar los datos reales del servicio a través de esta URI. Finalmente, el script valida que los datos recuperados corresponden al contenido esperado de `sashelp.class` utilizando una aserción sobre el número de observaciones del dataset resultante, a través de la macro `%mp_assertdsobs`.
Análisis de datos

Type : MIXTE


La fuente de datos principal es el dataset interno SAS `sashelp.class`. El script también crea varios datasets de trabajo temporales (`work.inputjobs`, `work.results`, `myweblib.test`, `work.out`, `work.test_results`) y manipula filerefs temporales (`testref`, `myjoblog`, `myweb`) para el almacenamiento intermedio del código del servicio, los logs del jobflow y los resultados del servicio web.

1 Bloque de código
DATA STEP Data
Explicación :
Este bloque utiliza un `DATA _NULL_` para escribir código SAS en un archivo temporal (`testref`). El código escrito define un `DATA STEP` simple que carga `sashelp.class` en un dataset llamado `test`, luego utiliza las macros `%webout` para formatear este dataset como salida web (probablemente JSON), lo cual es típico para los servicios REST.
¡Copiado!
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 Bloque de código
MACRO mv_createwebservice
Explicación :
Llama a la macro `%mv_createwebservice` para crear y desplegar un servicio web llamado `testsvc`. La ruta de despliegue se especifica mediante `&mcTestAppLoc/services/temp`, y el código del servicio se lee desde el fileref temporal `testref` definido previamente.
¡Copiado!
1%mv_createwebservice(
2 path=&mcTestAppLoc/services/temp,
3 code=testref,
4 name=testsvc
5)
3 Bloque de código
DATA STEP / MACRO mv_jobflow Data
Explicación :
Este bloque prepara la ejecución del servicio web. Se crea un dataset `work.inputjobs` para especificar el programa (`testsvc`) a ejecutar. Luego, se llama a la macro `%mv_jobflow` para iniciar la ejecución del servicio, gestionando la concurrencia con `maxconcurrency=4`. Los resultados del jobflow se almacenan en `work.results` y el log de ejecución se guarda en el fileref `myjoblog`.
¡Copiado!
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 Bloque de código
DATA STEP
Explicación :
Lee el contenido del archivo de log `myjoblog` generado por el jobflow y lo escribe directamente en el log SAS, permitiendo visualizar los mensajes de ejecución del servicio.
¡Copiado!
1DATA _null_;
2 INFILE myjoblog;
3 INPUT;
4 put _infile_;
5RUN;
5 Bloque de código
DATA STEP
Explicación :
Este `DATA _NULL_` recorre el dataset `work.results` (que contiene los metadatos del jobflow) y extrae el valor de la variable `uri` para almacenarlo en una variable de macro global llamada `uri`, esencial para la recuperación de los resultados del servicio. Todas las variables también se muestran en el log.
¡Copiado!
1DATA _null_;
2 SET work.results;
3 call symputx('uri',uri);
4 put (_all_)(=);
5RUN;
6 Bloque de código
MACRO mv_getjobresult Data
Explicación :
Llama a la macro `%mv_getjobresult` para recuperar los resultados del servicio web utilizando la URI obtenida previamente. El parámetro `result=WEBOUT_JSON` indica que la salida esperada está en formato JSON, que se almacena en el fileref `myweb` y un dataset `test` dentro de la librería `myweblib`.
¡Copiado!
1%mv_getjobresult(uri=&uri
2 ,RESULT=WEBOUT_JSON
3 ,outref=myweb
4 ,outlib=myweblib
5)
7 Bloque de código
DATA STEP
Explicación :
Lee el contenido bruto del archivo `myweb` (el resultado JSON del servicio web) y lo muestra en el log SAS para una revisión directa.
¡Copiado!
1DATA _null_;
2 INFILE myweb;
3 INPUT;
4 putlog _infile_;
5RUN;
8 Bloque de código
DATA STEP Data
Explicación :
Crea un dataset de trabajo llamado `work.out` leyendo los datos estructurados del dataset `myweblib.test`, que contiene los datos de `sashelp.class` tal como los devuelve el servicio web e interpretados por la macro `mv_getjobresult`. También muestra todas las variables del nuevo dataset en el log.
¡Copiado!
1DATA work.out;
2 SET myweblib.test;
3 put (_all_)(=);
4RUN;
9 Bloque de código
MACRO mp_assertdsobs Data
Explicación :
Llama a la macro de prueba `%mp_assertdsobs` para verificar que el dataset `work.out` contiene exactamente 19 observaciones. Esto valida que el servicio web ha devuelto correctamente todas las filas de `sashelp.class`. El resultado de esta aserción se registra en el dataset `work.test_results`.
¡Copiado!
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)
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.