Data Exchange and Reliability
แลกข้อมูลและความน่าเชื่อถือของสคริปต์
เมื่อเชื่อมระบบอื่น สคริปต์ต้องเข้าใจรูปแบบข้อมูลและความผิดพลาดที่เกิดระหว่างทาง
หัวข้อในบทนี้
ศัพท์ในบทนี้ · กดคำที่ขีดเส้นใต้ในเนื้อหาเพื่อดูความหมายได้ด้วย
- API
- ข้อตกลงวิธีที่โปรแกรมเรียกความสามารถหรือข้อมูลของอีกโปรแกรม
- HTTP
- กฎคำขอกับคำตอบที่ใช้ในการสื่อสารเว็บ
- JSON
- รูปแบบข้อความของ object array และค่าพื้นฐาน
- HTML
- ภาษาโครงสร้างและความหมายของเอกสารเว็บ
- CSV
- รูปแบบข้อมูลตารางข้อความที่มีกฎ delimiter และ quote
รูปแบบข้อมูลและความล้มเหลวเป็นส่วนของสัญญา
และ เป็นรูปแบบแลกข้อมูล ระบุวิธีรับส่งและความหมายของ request/response ต้องแยก network error error parse error และข้อมูลผิด schema เพราะการรับ bytes ได้ไม่เท่ากับงานสำเร็จ Error handling ที่ดีรักษาสาเหตุและเลือกว่าจะ retry หยุด หรือรายงาน
- Request
ตั้ง endpoint method timeout และหลักฐานสิทธิ์เท่าที่จำเป็น
- Response status
ตรวจ HTTP status ก่อนใช้ body คำตอบผิดพลาดอาจเป็น HTML หรือ JSON คนละ schema
- Decode + parse
อ่าน encoding แล้วแปลงด้วย parser ของรูปแบบ CSV ต้องรู้ header และ quoting
- Validate
ตรวจ fields ชนิดและขอบเขตค่าที่งานต้องใช้ แยก field หายกับ null
- Handle
รายงานสาเหตุ retry เมื่อเหมาะ และจำกัดจำนวนครั้ง ไม่บันทึก secrets ลง log
Timeout ไม่พิสูจน์ว่าฝั่ง server ไม่ได้ทำงาน เช่น request สร้างรายการอาจสำเร็จก่อนคำตอบหลุด Retry จึงต้องคิดถึง idempotency หรือวิธีตรวจผล งานรับข้อมูลควรกำหนดสิ่งที่ยอมรับและข้อมูลผิดรูปแบบให้ชัด ไม่ใช้ except กว้าง ๆ แล้วทำต่อเสมือนข้อมูลครบ
รูปแบบข้อมูลเจสันและซีเอสวีJSON and CSV · 13.5.1
JSON แทนข้อมูลแบบมีโครงสร้าง CSV เก็บตารางด้วยตัวคั่น ต้องอ่านตามรูปแบบ
รองรับโครงสร้างซ้อนและชนิดค่า เป็นตารางข้อความที่ต้องกำหนด delimiter quote header และ encoding ใช้ parser ของรูปแบบเพื่อจัดการอักขระพิเศษแทนตัดข้อความเอง
กฎแทนข้อมูล
แปลงตามกฎรูปแบบ
ตรวจ field และชนิดที่งานต้องการ
cell อาจมี comma หรือ newline ใน quote json.loads รับข้อความ แต่ไม่ทำให้ schema ถูกต้องโดยอัตโนมัติ ตรวจ field ที่ต้องมีและชนิดก่อนนำไปใช้
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 เดิม
เรียกใช้เอพีไอAPI Requests · 13.5.2
API request ต้องมีปลายทาง method และข้อมูลที่บริการยอมรับ รวมสิทธิ์ที่จำเป็น
request ต้องกำหนด endpoint method headers และข้อมูลตาม contract ตรวจ timeout status response type และ rate limit การ retry เหมาะกับบาง error แต่ต้องระวังส่งงานเขียนซ้ำ
รูปแบบและสิทธิ์
สถานะและข้อมูลที่ตอบ
เงื่อนไขทำซ้ำอย่างถูกต้อง
GET รายการเครื่อง retry หลัง timeout ได้ตามเงื่อนไข แต่ POST สร้างคำสั่งซื้ออาจสำเร็จแล้วเพียงคำตอบหาย ต้องใช้ idempotency ตาม หรือ reconcile ผลก่อนส่งซ้ำ ไม่ใส่ token ลง log
ที่มาของหัวข้อนี้ · คำอธิบายต่อยอด
คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส
เป็นส่วนต่อยอดที่เขียนเพื่อเชื่อมความเข้าใจ ไม่มีชื่อ Video/Reading เฉพาะที่ยืนยันจาก inventory เดิม
จัดการข้อผิดพลาดError Handling · 13.5.3
Error handling แยกปัญหาข้อมูล เครือข่าย และบริการ พร้อมกำหนดว่าจะหยุดหรือ retry
try except จัดการ exception ที่คาดได้ จับชนิดเฉพาะและให้บริบทที่ช่วยแก้ แยกความผิดพลาด input, network และ bug ไม่จับทุกอย่างแล้วส่งรายงานสำเร็จ
สิ่งที่ผิดและชั้นที่เกิด
แก้ชั่วคราวหรือหยุดพร้อมเหตุผล
ผลที่ไม่กลบความล้มเหลว
FileNotFoundError ควรบอก path ที่เปิดไม่ได้โดยไม่เผยข้อมูลลับ ส่วน timeout ควรมีระยะรอและจำนวน retry ที่จำกัด finally ใช้ทำ cleanup ที่ต้องเกิดไม่ว่าผลเป็นอย่างไร
try:
count = int("not-a-number")
except ValueError:
print("ข้อมูลจำนวนไม่ถูกต้อง")ValueError เกิดจากรูปแบบค่า ไม่ใช่เหตุเดียวกับไฟล์หายหรือ network timeout การจับชนิดเฉพาะทำให้ข้อผิดพลาดที่ไม่คาดยังถูกพบแทนเงียบหาย
ที่มาของหัวข้อนี้ · 1 รายการ
คำอธิบายและภาพในหน้านี้เรียบเรียงใหม่ ชื่อบทต้นทางด้านล่างใช้ตรวจที่มา ไม่ได้แทนเนื้อหาที่คุณต้องไปอ่านเพิ่มเพื่อเข้าใจหน้านี้ และไม่ยืนยันว่าทุกประโยคมีอยู่ในคอร์ส
- Automate Cybersecurity Tasks with Python · Module 4: Python in practiceReading: Explore debugging techniquesCY7.M4.R6
นำศัพท์มาเชื่อมกับงาน
API ตอบสำเร็จไม่ได้แปลว่าข้อมูลครบ ต้องตรวจ schema และค่าที่ใช้ก่อนทำงานถัดไป
สิ่งที่บทนี้เชื่อมไว้
เมื่อเชื่อมระบบอื่น สคริปต์ต้องเข้าใจรูปแบบข้อมูลและความผิดพลาดที่เกิดระหว่างทาง
ใช้ภาพกับตัวอย่างด้านบนเชื่อมหน้าที่ของแต่ละส่วน แล้วตรวจความเข้าใจด้วยการอธิบายเหตุผลของผลที่เห็น ก่อนเปิดบทถัดไป
บทเรียนที่เกี่ยวข้องและที่มาของบทอ่าน
คำอธิบายหน้านี้เขียนใหม่ตามหัวข้อใน Atlas รายการด้านล่างเป็นชื่อ Video/Reading ที่เคยจับคู่ไว้ แสดงไว้ให้ตรวจที่มาของชื่อหัวข้อ และไม่รับรองว่าคอร์สสอนทุกส่วนของคำอธิบายนี้
Python · Tutorial ↗