LABORATORIO DIGITAL

Lineamientos Banca Digital: Organización y diseño de API REST

by | Jun 26, 2024 | Lineamientos | 0 comments

En el desarrollo de servicios web, el diseño y organización de una API REST son fundamentales para asegurar una comunicación eficiente y segura entre los distintos componentes de un sistema; así como asegurar la mantenibilidad en el tiempo, priorizando los tiempos de entrega. Este documento ofrece recomendaciones clave para estructurar una API REST, centradas en prácticas de seguridad, estandarización de paths, y manejo adecuado de datos tanto en solicitudes (requests) como en respuestas (responses).

Imagen 1: Lineamientos para desarrollo de APIs

Uso de Verbo POST por Seguridad

Es recomendable usar el verbo POST por razones de seguridad, evitando el envío de datos en los parámetros de la consulta (query params) y transportándolos en el cuerpo de la solicitud (body request). Esto es debido a cómo se empaquetan y cifran los datos durante el tránsito. En caso de usar el verbo GET, este debe emplearse únicamente para recuperar datos de configuración o parametrización, no para datos transaccionales ni de usuarios.

Formato del Path

El path debe seguir un formato de diseño API que indique la versión de la API, el tipo de objeto a manejar y la acción a implementar. Por ejemplo: /api/v1/items/create, donde v1 es la versión de la API, items es el tipo de objeto a manejar, y create es la acción a implementar. (ver imagen 1, sección path)

Manejo de Headers

Los headers deben contener datos que permitan la trazabilidad de logs y auditoría. (ver imagen 1, sección headers) Los datos especificados en la versión del documento son:

  • ip: IP de la petición del Microservicio.
  • channel: Canal de consulta.
  • guidInvoke: Identificador del proceso del aplicativo o servicio que invoca.
  • handleToken: API Key propio del servicio.

Estos headers deben imprimirse en los logs identificando los eventos mediante el identificador de proceso (guid), se puede a su vez complementar con la ip de la solicitud (se puede acceder por ejemplo con HttpServerRequest) ver imagen 2.

Imagen 2: Trazabilidad de logs

Manejo del Body Request

El Body Request debe contener los datos según lo requiera el servicio, siguiendo la convención de nombres en camel case. Es decir, los nombres se escriben en minúscula, y en caso de ser variables compuestas, se unifican mediante mayúsculas sin espacios. Ejemplo: variable simple «nombre», variable compuesta «nombreCompleto». (ver imagen 1, sección body request)

Manejo del Body Response

El Body Response debe incluir los siguientes datos mínimos (ver imagen 1, sección body response):

  • codResponse: Códigos de respuesta controlados del servicio, indicando problemas o errores internos.
  • msgUser: Mensaje de respuesta al usuario, el mensaje es controlado en español.
  • msgTech: Mensaje técnico de respuesta, controlado o detallando el mensaje de stacktrace, que puede estar en inglés.
  • result: Dependiendo del tipo de servicio, puede contener información transaccional o parametrizaciones. En caso de tener múltiples objetos de respuesta, se puede manejar como un vector con múltiples objetos. (ver imagen 3 y 4)

Imagen 3: Body Response cuando se manejan respuestas únicas

Imagen 4: Body Response cuando se manejan múltiple-respuestas

Consideraciones generales

Tanto Body Request, Body Response deben manejarse con Content Type tipo JSON.

Los servicios (y cada variable) deben estar documentados con detalle de que acción implementa. (ver imagen 5)

Imagen 5: Documentación ejemplo de variables

Entradas Relacionadas

Telemetria en Quarkus con Jaeger

Telemetria en Quarkus con Jaeger

En este post vamos a revisar el proceso de generación de trazas desde Quarkus para su posterior monitoreo, una consideración especial que para el proceso de Telemetria Quarkus tiene únicamente de manera nativa integrado los componentes de OpenTelemetry, de manera que...

Escrito por:

Freddy Abad

Freddy Abad