PlusMagi's Blog By Pitt Phunsanit Backend,Database การออกแบบสถาปัตยกรรมและ API (RESTful API, Web Services, JSON/XML, Microservices Basics, API Spec)

การออกแบบสถาปัตยกรรมและ API (RESTful API, Web Services, JSON/XML, Microservices Basics, API Spec)

ในโลกของระบบดิจิทัลที่ซับซ้อน การออกแบบสถาปัตยกรรม (Architecture Design) ที่แข็งแกร่งคือรากฐานสำคัญของการพัฒนาซอฟต์แวร์ยุคใหม่ ระบบที่สามารถขยายตัว (Scalable) และมีความยืดหยุ่น (Flexible) จะต้องอาศัยการสื่อสารที่แม่นยำระหว่างส่วนประกอบต่างๆ ซึ่งหัวใจของการสื่อสารนี้คือ Application Programming Interface (API)

ในฐานะ Senior Architect เราต้องเข้าใจว่า API ไม่ใช่แค่โค้ด แต่คือ ‘สัญญา’ (Contract) ในการแลกเปลี่ยนข้อมูล การเลือกใช้รูปแบบสถาปัตยกรรมที่เหมาะสม เช่น RESTful API หรือ Microservices จึงเป็นสิ่งจำเป็นอย่างยิ่ง โดยมี PostgreSQL เป็นฐานข้อมูลหลักที่รองรับโครงสร้างข้อมูลและตรรกะทางธุรกิจที่ซับซ้อน

การเชื่อมโยง API Concepts เข้ากับ PostgreSQL

เมื่อเราพูดถึง RESTful API ซึ่งเน้นการจัดการทรัพยากร (Resource-based) การออกแบบฐานข้อมูลต้องรองรับแนวคิดนี้ PostgreSQL มีความโดดเด่นในการจัดการข้อมูลกึ่งโครงสร้าง (Semi-structured data) ผ่านชนิดข้อมูล JSONB ซึ่งช่วยให้เราสามารถเก็บ Payload ของทรัพยากรที่ยืดหยุ่นได้โดยไม่จำเป็นต้องแก้ไข Schema ทุกครั้งที่มีการเปลี่ยนแปลง

การจำลองการสื่อสาร API และการจัดการทรัพยากรด้วย JSONB

สมมติว่าเรามีตาราง api_resources ที่เก็บข้อมูลทรัพยากรที่มาจาก API ภายนอก เราสามารถใช้ JSONB เพื่อเก็บรายละเอียด Payload ของทรัพยากรเหล่านั้นได้ การใช้ PostgreSQL ทำให้เราสามารถ Query และ Validate ข้อมูลที่เข้ามาได้อย่างมีประสิทธิภาพ:

SQL

-- สร้างตารางเพื่อเก็บข้อมูลทรัพยากรที่มาจาก API
CREATE TABLE api_resources (
    resource_id SERIAL PRIMARY KEY,
    resource_type VARCHAR(50) NOT NULL,
    payload JSONB
);

-- การแทรกข้อมูลจำลอง (Payload) ที่เป็น JSON
INSERT INTO api_resources (resource_type, payload) VALUES
('user_profile', '{"id": 101, "name": "Alice", "roles": ["admin", "user"]}'),
('product_list', '{"items": ["1", "2", "3"], "status": "active"}');

-- การดึงข้อมูลเฉพาะ 'name' จาก Payload (จำลองการเรียก API endpoint) 
SELECT
    resource_type,
    payload->>'name' AS resource_name
FROM
    api_resources
WHERE
    resource_type = 'user_profile';

Microservices และ PostgreSQL Functions

แนวคิด Microservices คือการแบ่งแอปพลิเคชันขนาดใหญ่ออกเป็นบริการย่อยๆ ที่ทำงานอิสระต่อกัน ในระดับฐานข้อมูล PostgreSQL สามารถสนับสนุนแนวคิดนี้ได้ด้วยการใช้ Stored Procedures หรือ Functions ซึ่งทำหน้าที่เป็น ‘Service Boundary’ จำลอง ทำให้การจัดการ Business Logic ของแต่ละบริการเป็นอิสระจากส่วนอื่น

ตัวอย่างเช่น หากเรามีบริการจัดการคำสั่งซื้อ (Order Service) และบริการจัดการสินค้าคงคลัง (Inventory Service) เราสามารถสร้างฟังก์ชันที่รับผิดชอบเฉพาะการตรวจสอบสินค้าคงคลัง:

SQL

-- ฟังก์ชันจำลองการตรวจสอบสินค้าคงคลัง (Inventory Service) 
CREATE OR REPLACE FUNCTION check_inventory(product_id INT, required_qty INT) RETURNS BOOLEAN AS $$ 
BEGIN
    -- ตรรกะการตรวจสอบสินค้าคงคลังที่เฉพาะเจาะจง
    IF (SELECT quantity FROM inventory WHERE product_id = $1) >= $2 THEN
        RETURN TRUE;
    ELSE
        RETURN FALSE;
    END IF;
END; 
$$ LANGUAGE plpgsql; 

-- การเรียกใช้ฟังก์ชัน (จำลองการเรียกผ่าน API Gateway) 
SELECT check_inventory(1, 5);

บทสรุป: การบูรณาการที่สมบูรณ์แบบ

การออกแบบสถาปัตยกรรมที่ทันสมัยต้องอาศัยการทำงานร่วมกันอย่างลงตัวระหว่างรูปแบบการสื่อสาร (RESTful API, JSON/XML) และความสามารถในการจัดเก็บข้อมูลที่ยืดหยุ่น PostgreSQL ด้วยชนิดข้อมูล JSONB และความสามารถในการสร้าง Functions ทำให้มันเป็นเครื่องมือที่ทรงพลังในการสนับสนุนทั้งการเป็น Data Layer และการจำลอง Service Layer ในสถาปัตยกรรม Microservices การทำความเข้าใจหลักการเหล่านี้จะช่วยให้เราสร้างระบบที่ทนทาน ปรับขนาดได้ และพร้อมสำหรับการพัฒนาในอนาคต

Exit mobile version