Jinja Template and HTTP Request

บ่อยครั้ง ที่ข้อมูลที่ได้รับ จากอุปกรณ์ หรือระบบอื่น มีรูปแบบที่ไม่เข้ากันได้กับ ระบบที่ต้องการรับข้อมูล จึงมีความต้องการที่จะเขียนโปรแกรมเพื่อเปลี่ยนแปลงรูปแบบของข้อมูลที่ได้รับ ระบบ MEp มาพร้อมกับ ระบบ Template ที่จะช่วยให้การเขียน การตั้งค่าสามารถใช้ Jinja Template Language เพื่อดึงข้อมูลจาก Payload ที่ได้รับ มาใช้ได้

โดยในตัวอย่างนี้ จะจำลองการส่งข้อมูลสภาพอากาศ โดยใช้ Weather API และส่งไปที่ MEp

เขียนโปรแกรม Call Weather API และนำค่า Payload Response ส่งไปที่ Endpoint โดยรับค่าที่ได้มาปรับแต่งให้เป็นรูปแบบ Jinja Template

ตัวอย่างการ Call Weather API

Weather API

ตัวอย่าง Payload Response

{
  "coord": {
    "lon": 100.5167,
    "lat": 13.75
  },
  "weather": [
    {
      "id": 804,
      "main": "Clouds",
      "description": "overcast clouds",
      "icon": "04d"
    }
  ],
  "base": "stations",
  "main": {
    "temp": 29.84,
    "feels_like": 33.54,
    "temp_min": 27.17,
    "temp_max": 31.06,
    "pressure": 1007,
    "humidity": 65
  },
  "visibility": 10000,
  "wind": {
    "speed": 3.02,
    "deg": 49,
    "gust": 4.78
  },
  "clouds": {
    "all": 99
  },
  "dt": 1636364645,
  "sys": {
    "type": 2,
    "id": 2003771,
    "country": "TH",
    "sunrise": 1636326887,
    "sunset": 1636368515
  },
  "timezone": 25200,
  "id": 1609350,
  "name": "Bangkok",
  "cod": 200
}

ตัวอย่างการเขียน Jinja Template เพื่อแปลงข้อมูลให้ได้รูปแบบตามต้องการ

โดยตัวแปรที่อยู่ภายในเครื่องหมาย {{ }} จะถูกแทนที่ด้วยค่าของตัวแปร

{
  "at": "{{templateVariable.datetimeISOString}}",
  "temperature": {{payload.main.temp}},
  "humidity": {{payload.main.humidity}}
}

ตัวแปรที่เรียกใช้ได้ใน Template

ตัวแปร คำอธิบาย
templateVariable ตัวแปรของ Template เก็บค่าที่ช่วยในการใช้งาน เช่น datetimeISOString เก็บค่าวัน เวลาปัจจุบันในรูปแบบของ ISO String
payload ค่าที่ได้รับจาก Request ในส่วนที่เป็น Payload
headers ค่าที่ได้รับจาก Request ในส่วนที่เป็น Header
params ค่าที่ได้รับจาก Request ในส่วนที่เป็น URL Parameter
args Array ของค่าที่ได้รับจาก Task ก่อนหน้า

ตัวอย่างการสร้าง Endpoint ใน MEp เพื่อรับข้อมูล


ตัวอย่างการเขียนโปรแกรมที่ใช้ส่งค่าไปที่ Endpoint ในตัวอย่างจะใช้ NodeJS ในการส่งข้อมูลไปยัง MEp