PlusMagi's Blog By Pitt Phunsanit Ai,Database Handling JSON responses and HTTP status codes natively

Handling JSON responses and HTTP status codes natively

ในโลกของการพัฒนาแอปพลิเคชันสมัยใหม่ การเชื่อมต่อกับบริการภายนอก (External APIs) เป็นเรื่องที่หลีกเลี่ยงไม่ได้ ข้อมูลที่ได้รับมักอยู่ในรูปแบบ JSON และการตอบสนองของระบบจะถูกกำกับด้วย HTTP Status Codes การจัดการข้อมูลเหล่านี้อย่างมีประสิทธิภาพจึงเป็นทักษะสำคัญที่นักพัฒนาต้องมี

สำหรับระบบที่ใช้ PostgreSQL ซึ่งเป็นฐานข้อมูลที่มีความสามารถสูง การจัดการข้อมูล JSON และการเขียน Logic เพื่อรองรับสถานะการตอบกลับที่หลากหลาย ไม่ได้หมายถึงการเขียนโค้ดในภาษา Backend เท่านั้น แต่รวมถึงการใช้ความสามารถของ PostgreSQL ในการประมวลผลข้อมูลโครงสร้าง (Structured Data) และการสร้างฟังก์ชันที่แข็งแกร่งด้วย PL/pgSQL

การจัดการ JSON Responses ใน PostgreSQL ด้วย JSONB

PostgreSQL มีประเภทข้อมูล JSONB ซึ่งเป็นหัวใจสำคัญในการจัดการข้อมูล JSON โดย JSONB จะจัดเก็บข้อมูลในรูปแบบไบนารี ทำให้การเรียกใช้และ Query ข้อมูลทำได้อย่างรวดเร็วและมีประสิทธิภาพกว่าการใช้ JSON ทั่วไป

แทนที่จะมอง JSON เป็นแค่ข้อความดิบๆ เราต้องใช้ Operator ต่างๆ ของ PostgreSQL เพื่อดึงค่าเฉพาะฟิลด์ออกมาใช้งานในระดับ Column ได้อย่างแม่นยำ ตัวอย่างเช่น การดึงค่า user_id และนับจำนวนรายการสินค้า item_count จาก Payload ที่ได้รับ:

SQL

SELECT
    data->>'user_id' AS user_id,
    (data->'items') ->> 'count' AS item_count
FROM jsonb_to_record( 
    '{"user_id": "u123", "status": "success", "items": {"count": 3, "details": []}}'
) AS data;

การใช้ ->> จะช่วยให้เราดึงค่าออกมาเป็น Text ซึ่งสามารถนำไปใช้ในการเปรียบเทียบหรือ Join กับตารางอื่น ๆ ได้ทันที ทำให้โค้ดมีความแข็งแกร่งและลดโอกาสเกิด Runtime Errors ได้อย่างมาก

การจำลองการจัดการ HTTP Status Codes ด้วย PL/pgSQL

แม้ว่า PostgreSQL จะไม่ใช่ Web Server แต่เราสามารถใช้ภาษา PL/pgSQL ในการสร้าง Stored Procedure หรือ Function เพื่อจำลองและจัดการ Logic ที่เกี่ยวข้องกับการตอบสนองของ API ได้อย่างสมบูรณ์ โดยเฉพาะการแยกแยะระหว่างปัญหาของ Client (4xx) และ Server (5xx) เพื่อกำหนดกลไกการแก้ไขที่เหมาะสม

เราสามารถสร้างฟังก์ชันที่รับค่าสถานะ (Status Code) และ Payload JSON เข้ามา เพื่อตัดสินใจว่าจะดำเนินการอย่างไรต่อไป เช่น หากเป็น 401 Unauthorized ควรแจ้งให้ผู้ใช้ทำการ Re-authenticate ก่อนดำเนินการต่อ:

SQL

CREATE OR REPLACE FUNCTION process_api_response(
    p_status_code INT,
    p_data JSONB
) RETURNS TEXT AS $$
BEGIN
    IF p_status_code >= 400 AND p_status_code < 500 THEN
        -- Client Error (4xx): เช่น 401, 404
        RETURN 'Client Error: Invalid credentials or resource not found.';
    ELSIF p_status_code >= 500 THEN
        -- Server Error (5xx): ต้องมีการ Retry Logic
        RETURN 'Server Error: Database overload. Recommend retry later.';
    ELSIF p_status_code = 200 THEN
        -- Success
        RETURN 'Success: Data processed successfully.';
    ELSE
        RETURN 'Unknown Status Code.';
    END IF;
END;$$
LANGUAGE plpgsql;

-- ตัวอย่างการเรียกใช้:
SELECT process_api_response(503, '{"message": "Service Unavailable"}');

บทสรุป: การสร้างระบบที่ทนทาน (Resilient System)

การจัดการ JSON และ HTTP Status Codes ใน PostgreSQL ไม่ใช่แค่การ Query ข้อมูล แต่คือการสร้างชั้น Logic ที่ช่วยให้ระบบของเรามีความทนทาน (Resilience) เมื่อเกิดความผิดพลาดจากภายนอก การใช้ JSONB ร่วมกับ PL/pgSQL Function ทำให้เราสามารถสร้าง Workflow ที่สามารถตรวจสอบความถูกต้องของข้อมูล (Schema Validation) และตัดสินใจตามสถานะการตอบกลับ (Status Code Handling) ได้อย่างเป็นระบบ ทำให้แอปพลิเคชันที่สร้างบน PostgreSQL มีความเสถียรและน่าเชื่อถือในระดับ Senior Architect อย่างแท้จริง