---
title: "Cómo disponibilizar un servicio externo como una API del Flow Engine"
canonical: "https://onesaitplatform-es.refined.site/space/DOC/2216726337/C%C3%B3mo%20disponibilizar%20un%20servicio%20externo%20como%20una%20API%20del%20Flow%20Engine"
format: markdown
---
> Macro (toc)

# Introducción

En este tutorial se expone un ejemplo en el que se disponibiliza un servicio externo creando una API REST desde el Flow Engine.

# Antes de comenzar

Antes de comenzar hay que tener en cuenta varios elementos de la petición que se deberán procesar.

1. **Headers:** Los encabezados deberán ser procesados, por ejemplo, en el caso de un cambio de token OAuth. Es muy importante eliminar el header X-OP-APIKey para no exponer el token personal a servicios externos (msg.req.headers).
2. **Params**: Los parámetros deberán ser fijados al crear el endpoint de la API, y procesados después de la forma correcta.
3. **Body**: El body deberá ser obtenido y enviado de la forma correcta.

# Nodos

Para este tipo de flujos, se utilizarán los siguientes nodos principalmente:

## Nodos para la creación de la API REST:

Una explicación más profunda de estos nodos se puede encontrar en el tutorial [Creación de API con el FlowEngine](https://onesaitplatform.atlassian.net/wiki/spaces/DOC/pages/2216726093).

> Macro (inline-media-image)

> Macro (inline-media-image)

> Macro (inline-media-image)



## Nodos de petición al servicio externo:

Para realizar peticiones HTTP a un servicio externo se utiliza el siguiente nodo, normalmente precedido de una función que procesa el mensaje recibido en el endpoint de la API, y formatea ese mensaje para realizar la petición al servicio externo.

![image](media://c04e21b6-3b71-467c-8dac-93e48dcd7c31)

![image](media://a33d1fb0-3379-4486-8075-c4979a8d1a1a)

# Creación del flujo

En este tutorial, vamos a servir el servicio que nos da información de las personas que están en el espacio en este momento ([Open Notify (personas en el espacio y posición de la ISS)](http://open-notify.org/Open-Notify-API/)).

Primero, crea un dominio. En este caso, se utiliza el usuario analytics, por lo que el dominio será analyticsDomain.

![image](media://3bb5975f-122e-49a3-9347-2421f566323f)

Al visualizar el dominio, puedes editar el flujo, donde se crea la API REST y los endpoints de los dos servicios a exponer.

El esquema básico de una API es el siguiente, donde a continuación se insertarán las funciones y llamadas a los endpoints externos.

![image](media://9edb43d0-4d0e-4272-9735-6febaa578b49)

![image](media://aee586b2-68ed-4229-9cbb-4cc05d9e95ec)

![image](media://016c158c-7cbc-45ba-987b-e2195604495c)

![image](media://b1e43629-6c13-4a9d-9ee5-69f5d688ebb4)

  


Cuando se despliegua, esto genera una API con dos endpoints (vista del swagger):

![image](media://a0bffcdc-9bba-4a5c-84d1-8748eb8a759f)

Ahora se introduce una función para eliminar los headers (que contienen X-OP-APIKey y que no son necesarios para el endpoint externo, **además son una amenaza de seguridad porque pueden exponer el token al exterior**).

![image](media://a1977abb-8489-4002-900f-da1747d5e1fc)

![image](media://1afb689d-c5cb-4163-9b2b-38574db7007e)

![image](media://ca11c6a0-bc5d-495c-91ad-61a8128d9bd2)

Una vez desplegado, ya están las API REST listas para su uso. Se muestra un ejemplo de utilización:

![image](media://c84d9ee3-8229-4204-bcbe-86106b17c9a4)

Y la respuesta del servicio:

![image](media://fdc101a0-803a-43b0-98a1-f1f92d98c773)