Skip to main content

API Gateway Integration Types & Mappings

ประเภทของ API Gateway Integration และการทำงานกับ Mapping

ในการบรรยายนี้ เราจะพูดถึงวิธีการต่าง ๆ ที่ API Gateway ใช้เชื่อมต่อกับบริการ Backend การทำความเข้าใจประเภทของ Integration เหล่านี้เป็นสิ่งสำคัญสำหรับการตั้งค่า API Gateway อย่างมีประสิทธิภาพ

MOCK Integration

MOCK integration จะส่งค่าตอบกลับโดยไม่ต้องส่งคำขอไปยัง backend เหมาะสำหรับการพัฒนาและทดสอบเมื่อ backend ยังไม่มีการพัฒนาเสร็จสมบูรณ์ แต่ไม่เหมาะสำหรับการใช้งานจริง (Production)

HTTP และ AWS Lambda Integration

API Gateway สามารถส่งคำขอไปยัง HTTP endpoint หรือ AWS Lambda ได้

  • ในกรณีนี้ ต้องกำหนดทั้ง integration request และ integration response
  • สามารถใช้ mapping templates เพื่อแก้ไขคำขอที่ส่งไป backend และคำตอบที่ส่งกลับมาถึง client
  • Mapping templates ทำให้เราสามารถเปลี่ยนชื่อ ฟิลด์ หรือโครงสร้างข้อมูลให้ backend เข้าใจได้

An image

ตัวอย่าง: เมื่อสร้าง REST API เราสามารถ map การเรียก REST API ให้กลายเป็นการเรียก API ของ SQS Queue ได้ เพียงปรับรูปแบบของ request ให้เหมาะสม

AWS Lambda Proxy Integration

ใน Lambda Proxy integration คำขอจาก client จะถูกส่งตรงไปยัง Lambda function โดยไม่ถูกแก้ไข (ไม่มี mapping templates)

An image

  • Lambda function จะต้องรับผิดชอบการประมวลผลคำขอและสร้าง response เอง
  • ข้อมูลที่ Lambda ได้รับจะมีรายละเอียด เช่น resource, path, HTTP method, headers, query string parameters, stage variables และ body
  • Lambda ต้องส่งค่าตอบกลับพร้อม status code, headers และ body
  • API Gateway ทำหน้าที่เป็นเพียง proxy ที่ส่งคำขอและคำตอบผ่านไปมา

HTTP Proxy Integration

คล้ายกับ Lambda Proxy แต่เป็นการส่งต่อคำขอไปยัง backend HTTP endpoint โดยตรง โดยไม่มีการแก้ไขข้อมูล

An image

  • คำตอบจาก backend จะถูกส่งกลับไปยัง client ตรง ๆ
  • API Gateway สามารถใส่ HTTP header เพิ่มเติม (เช่น API key) ระหว่าง Gateway และ backend ได้ เพื่อความปลอดภัย โดย client จะไม่ทราบถึงรายละเอียดนี้

ตัวอย่าง: Client ส่ง HTTP request → API Gateway → Backend (เช่น Application Load Balancer) โดย API Gateway สามารถเพิ่ม API key เพื่อยืนยันตัวตนกับ backend ได้

Mapping Templates

Mapping templates จะใช้ได้เฉพาะกรณีที่ Integration ไม่ใช่ proxy mode

  • ใช้สำหรับแก้ไข request/response เช่น เปลี่ยนชื่อ query string parameters, แก้ไข body content, เพิ่ม/เปลี่ยน headers
  • ใช้ Velocity Template Language (VTL) ซึ่งรองรับโครงสร้างเชิงโปรแกรม เช่น loop และ conditional statements ทำให้สามารถแปลงข้อมูลที่ซับซ้อนได้
  • ต้องกำหนด Content-Type เป็น application/json หรือ application/xml

กรณีศึกษา: การเชื่อมต่อกับ SOAP API

  • SOAP ใช้ XML แต่ REST API ส่วนใหญ่ใช้ JSON
  • API Gateway สามารถใช้ mapping templates แปลง JSON → XML (SOAP message) และแปลง XML response → JSON
  • ขั้นตอน: API Gateway จะดึงข้อมูลจาก path, payload หรือ headers → สร้าง SOAP message → เรียก SOAP service → รับ XML response → แปลงกลับเป็น JSON เพื่อตอบ client

An image

ตัวอย่าง: Mapping Query String Parameters

สมมติว่า client ส่งคำขอ:

?name=foo&other=bar

An image

และ API Gateway เชื่อมกับ Lambda (ไม่ใช่ proxy)

  • Mapping template สามารถเปลี่ยนชื่อ parameter ก่อนส่งไปที่ Lambda ได้
  • เช่น แปลง namefoo และ otherbar
  • ทำให้ Lambda ได้รับข้อมูลในรูปแบบที่เหมาะสมกับโครงสร้างที่ต้องการ Mapping Example: Query String parameters

สรุปสิ่งสำคัญ (Key Takeaways)

  • API Gateway รองรับ Integration หลายประเภท ได้แก่ MOCK, HTTP, AWS Lambda, และ HTTP Proxy
  • Mapping templates ใช้สำหรับแก้ไขและแปลง request/response เช่น การแปลง JSON ↔ XML สำหรับ SOAP API
  • Proxy integrations จะส่งข้อมูลตรง ๆ โดยไม่แก้ไข ทำให้ backend ต้องจัดการเองทั้งหมด
  • Velocity Template Language (VTL) เป็นภาษาสคริปต์ที่ใช้ใน mapping templates เพื่อควบคุมการแปลงข้อมูล