---
title: "Desarrollo de API REST con enfoque Low-Code de Plataforma"
canonical: "https://onesaitplatform-es.refined.site/space/DOC/2216111806/Desarrollo%20de%20API%20REST%20con%20enfoque%20Low-Code%20de%20Plataforma"
format: markdown
---
> Macro (toc)

### Introducción

Este artículo mostrará el ciclo de vida del desarrollo siguiendo un enfoque Low-Code. Este enfoque se caracteriza por minimizar el desarrollo de código sustituyéndolo por la construcción y el despliegue con entornos visuales.

### Preparación del Entorno de Desarrollo

Para el ejemplo, un desarrollador sólo necesitará el acceso a una instancia de Onesait Platform. 

Típicamente será la instancia de su proyecto. En el ejemplo usaremos el Entorno CloudLab de Plataforma, que es un entorno gratuito de experimentación disponible para cualquier desarrollador.

Como desarrollador, bastará con que te conectes a este entorno y crees una cuenta de DEVELOPER:  [https://lab.onesaitplatform.com](https://lab.onesaitplatform.com)

### Creación de la ontología Message

Tienes que definir la ontología **Message **con los atributos propuestos. Esta entidad será con la que trabajará la API que crearás más adelante.

Los campos a definir son:

- idMessage: identifica de forma única el mensaje.
- txtMessage: contenido del mensaje. Inicialmente, texto plano.
- typeMessage: indica el tipo del mensaje. Inicialmente manejamos MAIL y está previsto ampliarlo a SMS.
- fromMessage: remitente del mensaje.
- toMessage: a quien va dirigido el mensaje. En función del tipo de mensaje será un mail, un número de teléfono, ...
- statusMessage: indica si el mensaje se ha enviado o está pendiente de enviar o está en error, usa los códigos ERROR, PENDING, SENT.
- sentDate: indica la fecha de envío del mensaje si este se ha enviado.
- errorOnSending: indica el error que se ha producido al enviar el mensaje.

Para crear la ontología, ve a la opción de menú DEVELOPMENT>My Ontologies, indica CREATE y selecciona:

![image](media://736854b2-1666-4551-807f-02cee278ac77)

Indica el nombre y los atributos:

![image](media://e278adfc-282d-418e-af5f-4f3465909a42)

![image](media://f47ad0d5-0c49-4d80-85c6-9be1ff9759d6)


La ontología se crea siempre de la misma forma sea cual sea la base de datos en la que se persiste. En Este caso, debes configurar la ontología para usar como repositorio MongoDB que es el repositorio por defecto y que la plataforma provisiona y disponibiliza de forma transparente.

![image](media://6d7b0ca4-5715-4e2f-85cd-ff573dadda28)

La ontología resultante tendrá el siguiente esquema JSON:

![image](media://7eddfa9b-fbd4-4373-8630-760932e5da7b)

Una vez finalizada la creación de la ontología, podrás verla en el listado “Mis Ontologías”. La plataforma por debajo ha creado la colección en Mongo que representa la entidad.

> ℹ️ Más información sobre como crear una ontología aquí: [https://onesaitplatform.atlassian.net/wiki/spaces/PT/pages/208044113](https://onesaitplatform.atlassian.net/wiki/spaces/PT/pages/208044113)

### **Creación del API Message**

Una vez tienes definida la ontología, la puedes apificar.  

Puedes definir todas las operaciones que quieres. Por defecto, vienen creadas las básicas del CRUD, pero puedes crear operaciones custom para, por ejemplo, filtrar datos en base a un parámetro, paginación, etc. 

Todo esto puedes realizarlo con sintaxis SQL.

Las operaciones que quieres crear son:

- Detalle de un mensaje.
- Listado de mensajes paginado.
- Listado de Mensaje por estado.
- Listado de Mensajes destinados a una persona.
- Número de mensajes por tipo de mensaje (una estructura con el tipo y el número de mensajes).
- Número de mensajes por remitente.

El procedimiento para crear cada operación de la API es tan sencillo como:

![image](media://11a1f366-426c-4b3c-bb59-1ceff0d91072)

![image](media://d64e2075-aefe-484d-b830-ba67309d30b0)

Puedes crear consultas que agrupen, además de agregar post-procesado en JavaScript. Por ejemplo, si quieres agrupar por statusMessage para agrupar por estado, y además que te dé el valor en %:

![image](media://4533a694-28b8-4040-8c05-ad862bc0c211)

Una vez definidas todas las operaciones que necesitas, crea el API:

![image](media://57c11a8a-c792-430a-a7fb-0d7670511647)

> ℹ️ Más información sobre la creación de APIs aquí: [https://onesaitplatform.atlassian.net/wiki/spaces/PT/pages/2043641904](https://onesaitplatform.atlassian.net/wiki/spaces/PT/pages/2043641904)

### Probando el API con Swagger

Cuando desarrollas un API en Plataforma, estás automáticamente desplegándola sobre el API Gateway embebido (por defecto en estado DEVELOPMENT).

La plataforma publica el API en formato Open API 3, y además integra Swagger, de modo que tiene una opción para poder testar el funcionamiento del API de forma muy sencilla desde el listado de APIs:

![image](media://fc200473-c5e0-4611-b818-6aa7b1d2bf73)

Además la plataforma integra ya la seguridad en el API REST, de modo que cuando quieras invocar el API, tendrás que indicarle el Token OAuth2 o el token X-OP-APIKey

![image](media://f4f34802-bf18-41b1-9732-73d0eccb5f59)

> ℹ️ Más información sobre cómo invocar un API desde Swagger aquí: [https://onesaitplatform.atlassian.net/wiki/spaces/PT/pages/4128787](https://onesaitplatform.atlassian.net/wiki/spaces/PT/pages/4128787)

### Funcionalidad de la API: envío de correos

Ahora toca configurar la funcionalidad de envío de correos o SMS cada vez que se utilice la operación POST de la API (nuevo mensaje). Para ello, usarás la herramienta Flow Engine.

Crea un flujo que este pendiente de las notificaciones de inserción sobre la ontología Message. Entonces, se procederá al envío del correo, y por último, actualizará el estado del Message, contemplando la posible aparición de errores en el envío.

Haciendo uso de las cajas ‘custom’ que provee la plataforma, puedes desarrollar este flujo rápidamente:

![image](media://bc9d3532-37ff-44a6-97fc-d23aa57069fe)

Entrando en detalle de las fases del flujo:

- Escuchas notificaciones de inserción sobre la ontología Message.
- Aplicas un pequeño código JavaScript para formatear el objeto msg que se pasa a las cajas subsiguientes.
- En función del tipo de Message (MAIL o SMS), bifurcas el flujo, por el momento los de tipo SMS los mockeamos, llevándolos a una caja de DEBUG.
- En la siguiente caja de Function, indicas las propiedades que le pasarás al servicio de correo de la onesait Platform: destinatario, tema… obtenidos del propio payload de la notificación Message.
- El servicio de correo manda el correo al destinatario pasado.
- Si todo a ido bien, el Message se actualiza a SENT y se indica la fecha. Por el contrario, si hay algun error, el mensaje se actualiza  a ERROR, y se indica el error en el campo de la ontología.
- En función de lo que haya pasado, invocas un endpoint u otro de la API de Message.

> ℹ️ Más informació sobre el uso del FlowEngine aquí: [https://onesaitplatform.atlassian.net/wiki/spaces/PT/pages/4161620](https://onesaitplatform.atlassian.net/wiki/spaces/PT/pages/4161620)

### Integrando seguridad a nuestra API: autenticación

Si utilizas la plataforma para crear las APIs, ya vienen securizadas por defecto, pudiendo autenticarte via REST, bien por cabecera X-OP-APIKey, donde indicarás el token de API de usuario, o bien a través de una cabecera Authentication, donde indicarás el token Bearer del usuario, generado por el Identity Manager de plataforma. 

***NOTA***:* Desde la UI de Swagger, solo aparece la cabecera X-OP-APIKey documentada. No obstante, desde cualquier cliente REST, por ejemplo Postman, podrás usar cualquiera de las dos cabeceras.*

![image](media://6de4535b-f876-418c-a71a-3e34feab91b5)

![image](media://d6f55a0e-2340-410e-aa56-b7057b20f885)

![image](media://6df32a3b-f896-4c62-bd4a-749e55b69c2f)

![image](media://6bb82a09-2868-44dd-a501-a56c25b4a43c)

![image](media://b5f49ac1-c5c0-4b67-a203-5822ccc7eb90)

### Completando funcionalidad del API

Ahora configuraremos el servicio de envío de SMS. Vamos a utilizar [Twilio](https://www.twilio.com/) como servicio de mensajería, ya que ofrece 16$ gratis para utilizar sus servicios. Así que, date de alta, y configura un número para el periodo de prueba.

En este caso haremos uso de la API REST que ofrece. Leyendo la documentación, puedes montarnos un descriptor Swagger rápidamente que incluya la operación de enviar mensajes:

```
swagger: '2.0'
info:
  description: 'Twilio API descriptor'
  version: 1.0.0
  title: Twilio API REST
  license:
    name: Apache 2.0
    url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
host: api.twilio.com
basePath: /2010-04-01
tags:
  - name: SMS
    description: SMS Service
schemes:
  - https
paths:
  '/Accounts/{accountSID}/Messages.json':
    post:
      tags:
        - SMS
      summary: uploads an image
      description: ''
      operationId: sendMessageSMS
      consumes:
        - multipart/form-data
      produces:
        - application/json
      parameters:
        - name: accountSID
          in: path
          description: Twilio Account SID
          required: true
          type: string
        - name: Authorization
          in: header
          description: Basic Authentication
          required: true
          type: string
        - name: From
          in: formData
          description: From phone
          required: true
          type: string
        - name: To
          in: formData
          description: To phone
          required: true
          type: string
        - name: Body
          in: formData
          description: Text body
          required: true
          type: string

      responses:
        '200':
          description: successful operation
 
```

Este descriptor lo podemos importar como API en la plataforma (ver [https://onesaitplatform.atlassian.net/wiki/spaces/PT/pages/494993429](https://onesaitplatform.atlassian.net/wiki/spaces/PT/pages/494993429) ) para después poder invocarla en nuestro flujo del Flow Engine. 

![image](media://de0ad169-9bca-4dc9-a858-5bde96dca7e9)

Una vez publicada, crea la caja en el flujo para la invocación. 

Quita la caja que tenías de “debug”, y reemplázala por “API Rest invoker”, con los siguientes parámetros:

![image](media://747fbd0c-9bd9-49ef-b8f1-9ae506d97515)


El accountSID que tienes de Twilio:

- La cabecera Authorization, que se compondrá de: ‘accountSid:token’ codificado en Base 64, añadiéndole ‘Basic ’ delante.
- From: será el número habilitado por Twilio para enviar SMS en el periodo de prueba
- To tendremos que cogerlo del mensaje de entrada
- Body: lo cogeremos del txtMessage de entrada

![image](media://4ba913c4-a73f-47af-8e10-bb9fa4f3c2d5)

Ahora si envías el siguiente payload a plataforma:

```
  {
    "idMessage": "78556-fdg",
    "txtMessage": "Hola esto es una prueba SMS. Irá bien",
    "typeMessage": "SMS",
    "toMessage": "+34616986373",
    "statusMessage": "SENT",
    "sentDate": "2020-05-14T09:29:26.047+0000"
  }
```

Recibirás un mensaje:

![image](media://1d0b8886-ab7b-4e86-bd66-3fcdbd9a9b76)

### Desplegando nuestra API

En la Plataforma a la vez que desarrollas, bien sea la publicación de un API bien la creación de un Flujo en el FlowEngine se está desplegando automáticamente lo que estoy desarrollando de forma visual, por tanto no es necesario ningún paso adicional.

### Gestionando el ciclo de vida del API desde Portal API

Al ser una API creada desde plataforma, puedes gestionar su ciclo de vida tal y como se explica aquí: [https://onesaitplatform.atlassian.net/wiki/spaces/PT/pages/2046296087](https://onesaitplatform.atlassian.net/wiki/spaces/PT/pages/2046296087)