Resumen
En este documento se describe cómo integrar datos con SAWA.
Las especificaciones en este documento se deben utilizar cuando una organización envía datos a SAWA y la forma de enviarlos es de forma estructurada vía HTTP.
Para eso, SAWA provee una API documentada, con ejemplos y un sandbox de prueba para el desarrollo de sus clientes.
Servidores
Existen 2 servidores para integraciones externas de SAWA
api.ext.sawa.cl: Servidor de producciónapi-sandbox.ext.sawa.cl: Servidor sandbox de desarrollo
El flujo de desarrollo de un programa típicamente consistirá en el uso inicial de la API sandbox, de modo que los desarrolladores se puedan familiarizar con los formatos de requests y responses de la API y una vez que ambas partes estén contentas, se pone en marcha el programa apuntando las solicitudes a api.ext.sawa.cl.
Endpoints y documentación de schemas
La API SAWA está documentada para todos sus schemas de requests y responses y tiene interfaces para ser probada antes de usarlas con datos reales. En su sandbox se puede ver la documentación
La API tiene 2 endpoints que están descritos en la misma API, pero brevemente son los siguientes:
- transactions: transacciones de los participantes. Por ejemplo: ventas o respuestas de encuestas
- metrics: datos agregados de todos los participantes. Por ejemplo: ventas totales a la fecha o ventas mensuales de un determinado producto
Para mayor detalle, se puede consultar la documentación
Esquema de autentificación
No cualquier persona ni institución puede acceder a los recursos de la API. Cada llamado a la API debe estar contener datos de autentificación.
La autentificación de cada request se hace usando el estandar jwt. Para ello, SAWA le hará llegar un token oportunamente, que deberá usar en cada request que se haga a la API. Para describir brevemente la seguridad de este método, se trata de un mensaje firmado que contiene datos no sensibles. El secreto que genera la firma está siempre en posesión de SAWA y la autentificación se basa en que cada request contiene un mensaje del siguiente estilo:
SAWA me dijo los siguientes datos y ésta es la firma.
En fin, no es propósito de este documento probar las propiedades criptográficas del estándar, pero sí mencionar que el esquema es seguro bajo supuestos razonables.
Con el token recibido, cualquier request HTTP debe contener un header Authorization con el formato Bearer <jwt> en que <jwt> debe reemplazarse por el token antes mencionado. De no incluirlo en cada request, se devolverá un mensaje con código HTTP 403.
Pruebas con swagger
En la ruta /docs de cualquier servidor (producción, sandbox) está disponible una interfaz que permite probar el servicio de forma amigable y rápida. Si bien esto también puede usarse para producción, su principal objetivo es que sirva para familiarizarse con la API y sus tipos. La interfaz que se muestra se llama Swagger y utiliza el estándar OpenAPI.
Servers
Hay un selector que permite elegir el servidor para los requests

Con este se puede elegir cuál servidor va a recibir los requests de prueba realizados usando esta interfaz. Si bien están disponibles el de producción y el de sandbox, no se pueden cruzar el dominio contra el servidor del request:
api-sandbox.ext.sawa.clno puede hacer requests al server de producciónapi.ext.sawa.clno puede hacer requests al server de sandbox
Esta limitación sólo cuenta en swagger y no tiene nada que ver con la operación normal. Seleccione siempre el servidor que es apropiado
Schemas
En la parte de abajo se muestran los schemas

Estos muestran la estructura de los datos a consultar. Usualmente esta sección es sólo de consulta.
Endpoints
Los endpoints muestran las consultas que es posible realizar al servicio

Es la parte central de la interacción con Swagger. En la imagen se muestran los 2 endpoints que ofrece la aplicación
Hacer un request
Para hacer un request hay que hacer clic en un endpoint

La imagen muestra la descripción de lo que hace el endpoint y un valor de ejemplo que puede usarse para mandarle requests al servidor. El botón Try it out permite probar el endpoint para ver qué responde.

La imagen muestra un esquema de ejemplo que es válido para hacer un request y el botón Execute sirve para mandar el request al servidor.
En la respuesta (abajo) se muestran 3 secciones

- Curl: el request equivalente para curl
- Request URL: A qué URL se hizo el request
- Server response: La respuesta del servidor, el código y el mensaje
En este caso la respuesta tiene status 403 (Forbidden), se puede ver el cuerpo de la respuesta:
{
"detail": "Not authenticated"
}
Y debajo se pueden ver los headers http.
La razón del 403 se explica abajo, en Autentificación.
Autentificación
Como se explicaba anteriormente, el esquema de autentificación es via JWT, y para poder ocupar la interfaz correctamente, se necesita autentificar cada request. La interfaz ofrece directamente esa opción con el botón de la imagen
Dándole clic al botón se abre la siguiente ventana

Que pide el token entregado, no debe anteponerse Bearer al token, sólo debe ingresarse el token. Una vez ingresado el token, todos los requests subsiguientes llevarán el token. Si se vuelve a hacer clic en el botón, se puede eliminar la autentificación si fuera necesario.
Uso en producción
En producción se deben seguir los mismos pasos que los indicados durante todo este documento, pero las con las siguientes excepciones y consideraciones que están a continuación.
Servidor de producción
Recuerde siempre hacerle requests a https://api.ext.sawa.cl y no al sandbox. Cualquier error http con status entre 400 y 499 (inclusive) será del mismo formato que el sandbox. Sin embargo, los errores con status http mayor a 500 puede que difieran. Estos errores los monitorea SAWA y siempre serán arreglados a la brevedad.
Consideraciones de seguridad
- El JWT de producción difiere del del sandbox. Si se confunden los tokens, la respuesta resultará en un error 403.
- Eso implica que para producción les entregaremos otro token
- No comparta su JWT con nadie ni de ninguna forma. Si se pierde, le podemos entregar uno nuevo, pero en principio, los tokens viejos no se pueden invalidar.