การจัดการข้อผิดพลาด¶
การจัดการข้อผิดพลาดเป็นส่วนสำคัญของแอปพลิเคชัน Open API ที่เชื่อถือได้และใช้งานง่าย หากคุณไม่จับและประมวลผลข้อผิดพลาดต่างๆ ผู้ใช้ของคุณอาจประสบปัญหา UI ที่มีข้อบกพร่องหรืออาจไม่สามารถดำเนินการบางอย่างที่สำคัญได้เลย
โดยทั่วไปแล้ว กระบวนการจัดการข้อผิดพลาดที่แตกต่างกันอาจถูกใช้งานขึ้นอยู่กับเลเยอร์ที่เกิดข้อผิดพลาด
- ที่เลเยอร์ข้อมูลและโดเมน ในบางกรณี backend ของ cTrader อาจส่ง ข้อความ
ProtoErrorResเป็นการตอบสนองต่อคำขอหนึ่งในคำขอของคุณ สำหรับการดำเนินการที่เกี่ยวข้องกับคำสั่ง, การซื้อขาย หรือโพสิชัน คุณอาจได้รับ ข้อความProtoOAOrderErrorEvent - ที่เลเยอร์โดเมนและแอปพลิเคชัน ผู้ใช้อาจดำเนินการที่คุณไม่ได้คำนึงถึงในโค้ดของคุณ ส่งผลให้แอปพลิเคชันของคุณทำงานไม่เป็นไปตามที่คาดหวัง
กลไกสำหรับการจัดการข้อผิดพลาดในระดับเหล่านี้แตกต่างกันและอธิบายไว้ด้านล่าง
การจัดการข้อผิดพลาดที่เลเยอร์ข้อมูลและโดเมน ¶
คุณอาจได้รับ ProtoErrorRes หรือ ProtoOAOrderErrorEvent ในสถานการณ์ต่อไปนี้ (โปรดทราบว่านี่ไม่ใช่รายการทั้งหมด):
- พยายามวางคำสั่งสำหรับสัญลักษณ์ที่ตลาดปิดอยู่
- ส่งข้อความที่ไม่ถูกต้องหรือไม่ได้รับการสนับสนุน
- พยายามแก้ไขคำสั่งที่กำลังดำเนินการอยู่
- ส่งข้อความหลังจากสูญเสียการเชื่อมต่อกับ backend ของ cTrader
วิเคราะห์ข้อผิดพลาด
ทั้ง ProtoErrorRes และ ProtoOAOrderErrorEvent มีฟิลด์ errorCode และ description ที่มีข้อมูลที่แม่นยำเกี่ยวกับประเภทของข้อผิดพลาดที่เกิดขึ้นและคำอธิบายของข้อผิดพลาดนั้น คุณสามารถดูรายการทั้งหมดของรหัสข้อผิดพลาดที่ได้รับการสนับสนุนใน enum ProtoErrorCode
เพื่อให้แน่ใจว่าแอปพลิเคชันของคุณไม่หยุดทำงานในกรณีดังกล่าว คุณมักจะสามารถสมัครรับ callback ที่จะทำงานเมื่อคุณได้รับข้อความตอบสนองข้อผิดพลาด ลอจิกที่แน่นอนของ callback เหล่านี้รวมถึงวิธีที่คุณสามารถสมัครรับได้ขึ้นอยู่กับไคลเอนต์ที่คุณใช้เพื่อสร้างการเชื่อมต่อและฟังสตรีมข้อความ
ทำงานกับ JSON
เมื่อทำงานกับ JSON คุณยังสามารถนำโค้ดจากบทช่วยสอนนี้มาใช้ใหม่ได้ อย่างไรก็ตาม คุณอาจต้องปรับเปลี่ยนเล็กน้อยขึ้นอยู่กับแนวทางของคุณในการ serialisation และ deserialisation และไคลเอนต์ TCP และ WebSocket ที่คุณต้องการ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
เมื่อใช้ไลบรารี twisted เพื่อจัดการการดำเนินการแบบอะซิงโครนัส คุณต้องสมัครรับ callback ข้อผิดพลาดทุกครั้งที่ส่งข้อความใหม่ ดังที่แสดงในตัวอย่างด้านล่างสำหรับ ProtoOAVersionReq
1 2 3 4 5 6 7 8 | |
การจัดการข้อผิดพลาดที่เลเยอร์โดเมนและแอปพลิเคชัน ¶
วิธีที่คุณจัดการข้อผิดพลาดที่เลเยอร์โดเมนและแอปพลิเคชันขึ้นอยู่กับภาษาการเขียนโปรแกรมที่คุณเลือก, กรอบ UI และกรณีการใช้งานที่คุณใช้งาน ทำให้ยากที่จะให้ตัวอย่างโค้ดและโซลูชันที่เฉพาะเจาะจง
อย่างไรก็ตาม คำแนะนำต่อไปนี้อาจมีประโยชน์ไม่ว่าคุณจะเลือกวิธีใดในการรวมเข้ากับ cTrader Open API
- ใช้งานสถานะข้อผิดพลาดเฉพาะสำหรับองค์ประกอบ UI หลักเสมอ สิ่งนี้จะป้องกันไม่ให้แอปพลิเคชันของคุณหยุดทำงานทั้งหมดและอนุญาตให้ทำงานในสถานะที่ลดประสิทธิภาพลงบางส่วน
- ใช้งานกลไกการบันทึกที่ปลอดภัยและเชื่อถือได้ซึ่งจะบันทึกข้อผิดพลาดในตำแหน่งที่เหมาะสม (เช่น ที่เก็บข้อมูลภายในเครื่อง) หากเกิดข้อผิดพลาดซ้ำๆ การบันทึกควรทำให้ง่ายต่อการระบุและแก้ไขสาเหตุ
- สร้างกลไกสำหรับผู้ใช้เพื่อแจ้งให้คุณทราบเกี่ยวกับข้อผิดพลาด สิ่งนี้อาจง่ายเหมือนกับการให้ข้อมูลติดต่อของคุณภายในแอปพลิเคชันหรือซับซ้อนเหมือนกับการเพิ่มบริการส่งข้อเสนอแนะอัตโนมัติที่ทำงานเมื่อเกิดข้อผิดพลาดใหม่
- ตรวจสอบให้แน่ใจว่าทรัพยากรใดๆ ที่ใช้เมื่อเกิดข้อผิดพลาดได้รับการทำความสะอาดอย่างเหมาะสม ในขณะที่ภาษาส่วนใหญ่มีบริการ garbage collector คุณอาจต้องการระบุลอจิกการกำจัดทรัพยากรที่กำหนดเอง