Learning AtlasIT Support → Cybersecurity
คลังบทอ่าน13.5 / ไพธอนและงานอัตโนมัติบทถัดไป
สารบัญบทอ่าน / Python and Automation / 13.5
04 · เขียนโค้ดและนำระบบไปใช้ · บท 13.5

Data Exchange and Reliability

แลกข้อมูลและความน่าเชื่อถือของสคริปต์

เมื่อเชื่อมระบบอื่น สคริปต์ต้องเข้าใจรูปแบบข้อมูลและความผิดพลาดที่เกิดระหว่างทาง

3 หัวข้อคำอธิบายในหน้านี้ภาพอธิบายและกลไกทีละส่วน
หัวข้อในบทนี้
ศัพท์ในบทนี้ · กดคำที่ขีดเส้นใต้ในเนื้อหาเพื่อดูความหมายได้ด้วย
API
ข้อตกลงวิธีที่โปรแกรมเรียกความสามารถหรือข้อมูลของอีกโปรแกรม
HTTP
กฎคำขอกับคำตอบที่ใช้ในการสื่อสารเว็บ
JSON
รูปแบบข้อความของ object array และค่าพื้นฐาน
HTML
ภาษาโครงสร้างและความหมายของเอกสารเว็บ
CSV
รูปแบบข้อมูลตารางข้อความที่มีกฎ delimiter และ quote
จากหลักการไปถึงกลไก

รูปแบบข้อมูลและความล้มเหลวเป็นส่วนของสัญญา

และ เป็นรูปแบบแลกข้อมูล ระบุวิธีรับส่งและความหมายของ request/response ต้องแยก network error error parse error และข้อมูลผิด schema เพราะการรับ bytes ได้ไม่เท่ากับงานสำเร็จ Error handling ที่ดีรักษาสาเหตุและเลือกว่าจะ retry หยุด หรือรายงาน

ลำดับงาน · อ่านตามลูกศรรูปแบบข้อมูลและความล้มเหลวเป็นส่วนของสัญญา
  1. Request

    ตั้ง endpoint method timeout และหลักฐานสิทธิ์เท่าที่จำเป็น

  2. Response status

    ตรวจ HTTP status ก่อนใช้ body คำตอบผิดพลาดอาจเป็น HTML หรือ JSON คนละ schema

  3. Decode + parse

    อ่าน encoding แล้วแปลงด้วย parser ของรูปแบบ CSV ต้องรู้ header และ quoting

  4. Validate

    ตรวจ fields ชนิดและขอบเขตค่าที่งานต้องใช้ แยก field หายกับ null

  5. Handle

    รายงานสาเหตุ retry เมื่อเหมาะ และจำกัดจำนวนครั้ง ไม่บันทึก secrets ลง log

Timeout ไม่พิสูจน์ว่าฝั่ง server ไม่ได้ทำงาน เช่น request สร้างรายการอาจสำเร็จก่อนคำตอบหลุด Retry จึงต้องคิดถึง idempotency หรือวิธีตรวจผล งานรับข้อมูลควรกำหนดสิ่งที่ยอมรับและข้อมูลผิดรูปแบบให้ชัด ไม่ใช้ except กว้าง ๆ แล้วทำต่อเสมือนข้อมูลครบ

01 / 03

รูปแบบข้อมูลเจสันและซีเอสวีJSON and CSV · 13.5.1

JSON แทนข้อมูลแบบมีโครงสร้าง CSV เก็บตารางด้วยตัวคั่น ต้องอ่านตามรูปแบบ

รองรับโครงสร้างซ้อนและชนิดค่า เป็นตารางข้อความที่ต้องกำหนด delimiter quote header และ encoding ใช้ parser ของรูปแบบเพื่อจัดการอักขระพิเศษแทนตัดข้อความเอง

เทียบหน้าที่เพื่อไม่สับสน
•Format

กฎแทนข้อมูล

•Parser

แปลงตามกฎรูปแบบ

•Schema check

ตรวจ field และชนิดที่งานต้องการ

cell อาจมี comma หรือ newline ใน quote json.loads รับข้อความ แต่ไม่ทำให้ schema ถูกต้องโดยอัตโนมัติ ตรวจ field ที่ต้องมีและชนิดก่อนนำไปใช้

JSON ไม่ใช่ dict ตั้งแต่ต้น
import json

raw = '{"device": "PC-1", "online": true}'
record = json.loads(raw)
print(record["device"], record["online"])

raw เป็น string json.loads แปลง เป็น Python object โดย true กลายเป็น True ผลที่พิมพ์คือ PC-1 True ต้องตรวจ schema ก่อนใช้ field กับงานจริง

ที่มาของหัวข้อนี้ · คำอธิบายต่อยอด

คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส

เป็นส่วนต่อยอดที่เขียนเพื่อเชื่อมความเข้าใจ ไม่มีชื่อ Video/Reading เฉพาะที่ยืนยันจาก inventory เดิม

02 / 03

เรียกใช้เอพีไอAPI Requests · 13.5.2

API request ต้องมีปลายทาง method และข้อมูลที่บริการยอมรับ รวมสิทธิ์ที่จำเป็น

request ต้องกำหนด endpoint method headers และข้อมูลตาม contract ตรวจ timeout status response type และ rate limit การ retry เหมาะกับบาง error แต่ต้องระวังส่งงานเขียนซ้ำ

เทียบหน้าที่เพื่อไม่สับสน
•Request contract

รูปแบบและสิทธิ์

•Response handling

สถานะและข้อมูลที่ตอบ

•Retry policy

เงื่อนไขทำซ้ำอย่างถูกต้อง

GET รายการเครื่อง retry หลัง timeout ได้ตามเงื่อนไข แต่ POST สร้างคำสั่งซื้ออาจสำเร็จแล้วเพียงคำตอบหาย ต้องใช้ idempotency ตาม หรือ reconcile ผลก่อนส่งซ้ำ ไม่ใส่ token ลง log

ที่มาของหัวข้อนี้ · คำอธิบายต่อยอด

คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส

เป็นส่วนต่อยอดที่เขียนเพื่อเชื่อมความเข้าใจ ไม่มีชื่อ Video/Reading เฉพาะที่ยืนยันจาก inventory เดิม

03 / 03

จัดการข้อผิดพลาดError Handling · 13.5.3

Error handling แยกปัญหาข้อมูล เครือข่าย และบริการ พร้อมกำหนดว่าจะหยุดหรือ retry

try except จัดการ exception ที่คาดได้ จับชนิดเฉพาะและให้บริบทที่ช่วยแก้ แยกความผิดพลาด input, network และ bug ไม่จับทุกอย่างแล้วส่งรายงานสำเร็จ

เทียบหน้าที่เพื่อไม่สับสน
•Failure type

สิ่งที่ผิดและชั้นที่เกิด

•Handling

แก้ชั่วคราวหรือหยุดพร้อมเหตุผล

•Reporting

ผลที่ไม่กลบความล้มเหลว

FileNotFoundError ควรบอก path ที่เปิดไม่ได้โดยไม่เผยข้อมูลลับ ส่วน timeout ควรมีระยะรอและจำนวน retry ที่จำกัด finally ใช้ทำ cleanup ที่ต้องเกิดไม่ว่าผลเป็นอย่างไร

จัดการเฉพาะข้อผิดพลาดที่รู้
try:
    count = int("not-a-number")
except ValueError:
    print("ข้อมูลจำนวนไม่ถูกต้อง")

ValueError เกิดจากรูปแบบค่า ไม่ใช่เหตุเดียวกับไฟล์หายหรือ network timeout การจับชนิดเฉพาะทำให้ข้อผิดพลาดที่ไม่คาดยังถูกพบแทนเงียบหาย

ที่มาของหัวข้อนี้ · 1 รายการ

คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส

เชื่อมความเข้าใจ

นำศัพท์มาเชื่อมกับงาน

ตัวอย่างให้เห็นภาพ

API ตอบสำเร็จไม่ได้แปลว่าข้อมูลครบ ต้องตรวจ schema และค่าที่ใช้ก่อนทำงานถัดไป

สิ่งที่บทนี้เชื่อมไว้

เมื่อเชื่อมระบบอื่น สคริปต์ต้องเข้าใจรูปแบบข้อมูลและความผิดพลาดที่เกิดระหว่างทาง

ใช้ภาพกับตัวอย่างด้านบนเชื่อมหน้าที่ของแต่ละส่วน แล้วตรวจความเข้าใจด้วยการอธิบายเหตุผลของผลที่เห็น ก่อนเปิดบทถัดไป

บันทึกในเบราว์เซอร์นี้
บทเรียนที่เกี่ยวข้องและที่มาของบทอ่าน

คำอธิบายหน้านี้เขียนใหม่ตามหัวข้อใน Atlas รายการด้านล่างเป็นชื่อ Video/Reading ที่เคยจับคู่ไว้ แสดงไว้ให้ตรวจที่มาของชื่อหัวข้อ และไม่รับรองว่าคอร์สสอนทุกส่วนของคำอธิบายนี้

Python · Tutorial ↗