Docuemntacion del uso del servicio
This commit is contained in:
102
README.md
102
README.md
@@ -27,3 +27,105 @@ Webhooks Soportados:
|
|||||||
- [ ] orders/delete
|
- [ ] orders/delete
|
||||||
|
|
||||||
Propuestas:
|
Propuestas:
|
||||||
|
|
||||||
|
## Requisitos
|
||||||
|
|
||||||
|
- Docker (linux) o Docker desktop (widows - WSL)
|
||||||
|
- Ubuntu 24 o similar
|
||||||
|
|
||||||
|
## Introduccion
|
||||||
|
|
||||||
|
El objetivo es tener un grupo compose con
|
||||||
|
|
||||||
|
- Una BDD para almacenar ejemplos
|
||||||
|
- Un servicio que envie peticiones periodicamente
|
||||||
|
|
||||||
|
Este grupo tiene definida una red externa en el `docker-compose.yaml` que
|
||||||
|
tiene que coincidir con la red de los demás compose ejecutados, por ejemplo:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Esto tiene que aparecer en el yaml del simulador
|
||||||
|
name: p-simulador-webhooks
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
name: network-test # Tiene que coincidir con el compose objetivo
|
||||||
|
external: true
|
||||||
|
```
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Esto en el yaml del microservicio
|
||||||
|
name: sf-shopify-orders
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
name: network-test
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ejecución
|
||||||
|
|
||||||
|
Para lanzar los contenedores se ejecuta el script `run.local.sh` que va a lanzar
|
||||||
|
el compose de la carpeta `/development/local`. Habrá que ver para los demás entornos.
|
||||||
|
|
||||||
|
### Configuración de envío periódico de webhooks
|
||||||
|
|
||||||
|
La configuración de los webhooks se hace en `/src/config/initial_hosts.ts`.
|
||||||
|
|
||||||
|
En la constante `INITIAL_EVENTS` están los eventos que se van a emitir periodicamente.
|
||||||
|
Tienen la estructura:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
export type ScheduledEvent = {
|
||||||
|
topic: string;
|
||||||
|
numberOfMessages?: number;
|
||||||
|
periodMs?: number;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
Un ejemplo sería:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
{
|
||||||
|
topic: "order/create", // Emite mensajes de tipo order/create
|
||||||
|
numberOfMessages: -1, // Un numero negativo o indefinido de mensajes, indica que se mandan ilimintados
|
||||||
|
periodMs: 5000 // 5s entre mensajes, si fuese indefinido el predefinido es 1s
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
> El periodo indica el mínimo entre mensajes, puede pasar mas tiempo si la maquina se
|
||||||
|
> realentiza o si el event loop queda bloqueado.
|
||||||
|
|
||||||
|
### Configuración de los host que reciben webhooks
|
||||||
|
|
||||||
|
Para añadir un host nuevo se crea un nuevo objeto en la constante `INTIAL_HOSTS` tal que:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
type InitialHost = {
|
||||||
|
topic: string;
|
||||||
|
host: string;
|
||||||
|
port: string;
|
||||||
|
endpoint: string;
|
||||||
|
method: "POST" | "PUT" | "DELETE";
|
||||||
|
secretkey: string;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
Por ejemplo si corremos el servicio en un contenedor llamado `cliente-webhooks`
|
||||||
|
se tiene que añadir un objeto:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
{
|
||||||
|
topic: "order/create",
|
||||||
|
host: "localhost",
|
||||||
|
port: "3500",
|
||||||
|
endpoint: "/order/create",
|
||||||
|
method: "POST",
|
||||||
|
secretkey: webhooksConfig.apiSecret || "1234",
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Esta configuración implica que ese host va recibir una petición HTTP cada vez que
|
||||||
|
se emite un mensaje con el topic `order/create`, se va a enviar al puerto `3500`
|
||||||
|
y al endpoint `order/create` mediante el método `POST`. Tiene un campo
|
||||||
|
"opcional" para la clave para la firma HMAC, si se quiere usar tiene que
|
||||||
|
coincidir en el cliente y el servidor, la clave del servidor se puede guardar
|
||||||
|
en el .env o directamente en el objeto **NO SE DEBEN USAR CLAVES REALES DE PRODUCCIÓN**,
|
||||||
|
con poner "1234" en los dos servicios la firma ya se hace correctamente.
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user