METAR
Endpoint: /metar?station=<code>
Ejemplo: /metar?station=SAEZ
(para el Aeropuerto de Ezeiza)
Un METAR es un reporte del estado meteorológico que se registra en un aeródromo. Se lo codifica en un string, por ejemplo:
KDEW 111218Z AUTO 20010KT 10SM -RA SCT012 BKN020 OVC033 06/05 A2981 RMK AO2 P0002 T00610050
Interpretación de algunos campos:
- KDEW: Código del aeródromo (Deer Park Airport)
- 20010KT: Viento de 10 nudos desde la dirección 200
- 10SM: Visibilidad de 10 millas
- -RA: Lluvia leve
- SCT012: Nubes dispersas a 1200 pies
- BKN020: Parcialmente nublado a 2000 pies
- OVC033: Cubierto a 3300 pies
- T00610050: Temperatura de 6,1 grados y punto de rocío de 5 grados
Nuestro servicio recibirá un código OACI de un aeródromo y delegará la consulta a la NOAA Text Data Server API (ver ejemplos). Solicitaremos la información en formato XML y la convertiremos a JSON para entregarla a nuestro cliente. Podemos hacerlo así:
//Importamos los componentes necesarios
const axios = require('axios');
const { XMLParser } = require('fast-xml-parser');
const { decode } = require('metar-decoder');
const parser = new XMLParser();
...
//Consultamos a la API de NOAA
const response = await axios.get(`https://www.aviationweather.gov/adds/dataserver_current/httpparam?dataSource=metars&requestType=retrieve&format=xml&stationString=${station}&hoursBeforeNow=1`);
//Convertimos el XML obtenido a JSON, por conveniencia
const parsed = parser.parse(response.data);
//Decodificamos el METAR
decode(parsed.response.data.METAR.raw_text);
Importante: El ejemplo anterior es solo una manera de hacerlo, pueden utilizar la que prefieran. No se están contemplando situaciones de error (METAR vuelve vacío, error de conexión a NOAA, error de parseo, etc.), que sí deberían ser contempladas por ustedes, devolviendo un error apropiado al cliente.
Métricas
Ya implementar esto con métricas
Métricas propias
Deberán generar las siguientes métricas, que se agregarán como gráficos adicionales a los que les damos en el dashboard:
- Demora de cada endpoint en responder
- Demora de cada API remota en responder
Pueden usar hot-shots