Enviar JSON a un servicio web de FlowForce
Este ejemplo muestra cómo crear un servicio web de FlowForce que acepte solicitudes POST que lleven datos JSON en el cuerpo de la solicitud HTTP. En segundo lugar mostramos cómo llamar a ese servicio web desde un cliente como MapForce.
En este ejemplo vamos a configurar el servicio web para que acepte datos JSON; sin embargo, también podría enviar XML u otro contenido a un servicio creado con FlowForce Server de forma parecida a como se explica más abajo. El servicio web que vamos a crear es muy simple, por lo que solamente acepta datos JSON y los almacena de forma local sin otro tipo de procesamiento. Aunque no lo explicamos en este ejemplo, el trabajo se puede ampliar para que valide o procese datos JSON con RaptorXML Server.
En este ejemplo los datos se envían en el cuerpo de la solicitud HTTP y no como parámetros. Para ver un ejemplo que invoque a un servicio web con parámetros consulte Exponer un trabajo como servicio web.
Requisitos
•Licencias necesarias: FlowForce Server, MapForce Enterprise Edition.
Observaciones FlowForce Server ofrece una forma rápida de crear servicios web. MapForce Enterprise Edition actúa como un cliente que llama a un servicio web creado con FlowForce Server. También puede obtener el mismo resultado con un cliente distinto. |
•Los servicios FlowForce Web Server y FlowForce Server deben escuchar en la en la dirección de red y en el puerto configurados previamente.
•Debe tener una cuenta de usuario de FlowForce Server con permisos para uno de los contenedores (en este ejemplo se usa el contenedor /public porque está automáticamente abierto a todos los usuarios autenticados).
•El trabajo debe guardar los datos de entrada recibidos por el servicio web en un directorio local: C:\FlowForceExamples\PostJson. Este directorio (o uno similar) debe existir en el equipo en el que se ejecuta FlowForce Server y la cuenta de usuario de su sistema operativo debe tener permisos para escribir en ese directorio.
Crear el trabajo de FlowForce
Inicie sesión en la interfaz de administración del servicio web de FlowForce Server, abra el contenedor /public/Ejemplos y después haga clic en Crear trabajo. A continuación introduzca un nombre y, si quiere, una descripción para el servicio web.
Nota: | el contenedor public/Examples ya existe porque lo creó en ejemplos anteriores. Si aún no lo ha creado puede hacerlo usando el comando Crear | Crear contenedor. |
Para que el trabajo trate los datos POST como contenido arbitrario debe tener exactamente un parámetro de tipo secuencia. Para crear ese parámetro haga clic en Agregar parámetro , introduzca un nombre (en este ejemplo, "datos") y seleccione secuencia como tipo de datos.
A continuación, agregue un nuevo paso de ejecución y configúrelo como sigue:
El paso de ejecución anterior llama a la función integrada de FlowForce copy. La expresión que aparece en la caja de texto "Origen" convierte los datos de entrada recibidos por el servicio web en un archivo usando la función de expresión as-file (recuerde que en el paso anterior hemos llamado "datos" al parámetro de entrada). para obtener esta función de forma automática haga clic en el botón junto a la caja de texto "Origen" y después seleccione datos.
La caja de texto "Destino" contiene una expresión que produce un nombre de archivo único cada vez que se invoca un trabajo. Para obtener ese nombre de archivo único se llama a la función de expresión de FlowForce instance-id; por tanto, el nombre del archivo JSON será parecido a "archivo35.json" y el número será distinto con cada llamada al trabajo (esos números corresponden al ID de las instancias del trabajo de FlowForce). También puede introducir una ruta completa, pero no es necesario si ha configurado la ruta de acceso del directorio de trabajo, como hemos hecho en este ejemplo. Al configurar la ruta de acceso al directorio de trabajo cualquier nombre de archivo relativo se resuelve de forma relativa a esa ruta.
El directorio C:\FlowForceExamples\PostJSON (o uno similar si ha cambiado la ruta) debe existir y su cuenta de usuario debe tener permisos para escribir en él. |
En la sección "Servicio" marque la casilla Permitir acceso a este trabajo por HTTP e introduzca "PostJsonService" o un nombre parecido para el servicio web. Apunte el nombre del servicio porque lo necesitará más adelante para llamar al servicio web.
En "Credenciales" seleccione una credencial ya existente o indique una credencial local (véase también Credenciales). Estas deben ser las credenciales de la cuenta de usuario del sistema operativo en el que se está ejecutando FlowForce.
Nota: | no confunda estas credenciales con las que usó para acceder a la interfaz de administración del servicio web de FlowForce Server. |
Haga clic en Guardar. Ahora está listo para llamar al servicio web nuevo desde un cliente.
Llamar al servicio web desde un explorador
Hay varias formas de llamar al servicio web desde un explorador:
•Vaya a Inicio y haga clic en Ver los desencadenadores y servicios activos. Después haga clic en la URL del trabajo que aparece en la columna "Información".
•Introduzca http://127.0.0.1:4646/service/PostJsonService en la barra de direcciones del explorador. Tenga en cuenta que esta URL sólo funciona si el servicio FlowForce Server escucha en la dirección host y el nombre de puerto predeterminados. Si su puerto y host tienen otra configuración vaya a la página de configuración y cambie la dirección.
•Si configura el campo Nombre de host de FlowForce Server desde la página de configuración puede ejecutar la llamada al servicio web directamente desde la página de configuración del trabajo. Para ello haga clic en el botón que hay junto a la casilla Permitir acceso a este trabajo por HTTP. Este botón sólo se habilita si configura este campo Nombre de host. Si no lo ha hecho, puede llamar al servicio web escribiendo la URL manualmente en la barra de dirección.
Si la aplicación le pide credenciales al acceder al servicio web, use las mismas que usó para acceder a FlowForce Server.
Recomendamos usar las credenciales de FlowForce Server para la autenticación HTTP sólo en casos de prueba. Para producción es mejor crear un usuario nuevo, darle el permiso Servicio - Uso en el contenedor en el que está el trabajo y después acceder al servicio web con esa cuenta. Para desactivar la autenticación HTTP y hacer público el servicio web debe dar el permiso Servicio - Uso al usuario Anónimo, véase ¿Cómo funcionan los permisos?. |
Este trabajo está configurado para que espere como parámetro una secuencia, por lo que deberá introducir el valor del parámetro en el explorador. Haga clic en Explorar y seleccione el archivo JSON que quiere usar en la solicitud POST.
Al hacer clic en Enviar, FlowForce Server procesa el trabajo y muestra el resultado en el explorador.
Si el trabajo se ejecuta correctamente, en el explorador aparece "true" y el archivo JSON se guarda en el directorio de trabajo C:\FlowForceExamples\PostJson. De lo contrario, si ve un error de ejecución consulte el registro para más detalles, véase Vista de registro.
Llamar al servicio web desde MapForce
También puede llamar al servicio web desde un cliente que no sea el explorador web, como MapForce Enterprise Edition.
1.En el menú Archivo haga clic en Nuevo para crear una asignación nueva.
2.En el menú Resultados haga clic en Motor de ejecución integrado.
3.En el menú Insertar haga clic en Función de servicio web. Se abre el cuadro de diálogo "Configuración de la llamada a servicios web".
4.Haga clic en Manual y elija POST como método de solicitud; introduzca la URL del servicio web en el campo URL. Se trata de la misma URL que usamos para probar el servicio web desde el explorador.
5.Haga clic en el botón Editar junto al campo Configuración de seguridad HTTP y marque la casilla Autenticación dinámica. De esta forma puede indicar las credenciales de forma interactiva como parámetros de entrada de la asignación cuando la ejecute. Para más información sobre la opción Usar credencial consulte Credenciales en funciones de asignación. No recomendamos introducir el nombre de usuario y la contraseña en este cuadro de diálogo, salvo en caso de compatibilidad retroactiva.
6.Haga clic en Aceptar para cerrar el cuadro de diálogo. La asignación ahora tiene este aspecto:
7.Agregue tres parámetros de entrada a la asignación; para ello seleccione el comando de menú Insertar | Insertar componente de entrada. Los dos primeros proporcionan el nombre de usuario y la contraseña y el tercero los datos JSON.
8.Haga doble clic en cada uno de los componentes de la imagen anterior e introduzca un valor de ejecución de tiempo de diseño para previsualizar la asignación. Para los dos primeros parámetros debe introducir el nombre de usuario y la contraseña que use para acceder al servicio web, que son necesarios para ejecutar la asignación y que, por razones de seguridad, no es recomendable guardar en el archivo de la asignación. Para el parámetro que proporciona los datos JSON debe introducir datos JSON de muestra que se usan para ejecutar la asignación en tiempo de diseño, como se ve en la imagen siguiente:
Nota: | los datos JSON de prueba de este ejemplo son muy cortos porque son solamente para ilustrar el ejemplo. Cuando MapForce ejecuta una asignación puede suministrar los datos JSON como parámetro de entrada para la asignación desde un archivo JSON. |
9.Para añadir el componente de salida de la asignación use el comando de menú Insertar | Insertar componente de salida.
10.Arrastre las funciones charset-encode y mime-entity desde la ventana Bibliotecas y trace todas las conexiones como en la imagen siguiente. También necesitará añadir dos constantes; para ello use el comando de menú Insertar | Constante.
En la asignación anterior el componente JSON de entrada viene dado por un componente simple de entrada. Las funciones charset-encode y mime-entity son funciones integradas de MapForce que preparan el cuerpo de la solicitud HTTP. El código de estado devuelto por el servicio web se asigna al resultado devuelto por la asignación.
Preparar el cuerpo de la solicitud HTTP sin estructura, como se ve en la imagen anterior, es sólo una de las formas de enviar datos en la solicitud POST. Para estructuras JSON y XML puede introducir el esquema JSON o XML en la solicitud en el cuadro de diálogo "Configuración de la llamada a servicios web". En este caso, el cuerpo del componente del servicio web suministra componentes de entrada (conectores) basados en la estructura JSON/XML de la solicitud. |
Ahora puede ejecutar la asignación con MapForce; para ello haga clic en la pestaña Resultados. Cualquier error que ocurra aparece en la ventana Mensajes. Para depurar la asignación es posible que tenga que consultar también el registro de FlowForce Server (si es que la solicitud POST alcanzó el servidor). De lo contrario, si la asignación se ejecuta con éxito ocurre lo siguiente:
1.El código de estado HTTP "200" aparece en el panel Resultados.
2.En el lado servidor los datos JSON suministrados se escriben en un archivo que se guarda en el directorio C:\FlowForceExamples\PostJson.
En MapForce se puede configurar el comportamiento exacto de la asignación en caso de error. Asimismo, la asignación se puede ejecutar con MapForce Server o implementar en FlowForce Server y convertir en un trabajo o incluso en otro servicio web. Para más información consulte la documentación de MapForce en https://www.altova.com/es/documentation.