ไทย

เครื่องมือสำหรับนักพัฒนา · ตัวแปลงไวยากรณ์

การตอบสนอง XML แบบเดิมเป็น JSON: เหมาะสำหรับการตรวจสอบ มีความเสี่ยงสำหรับโค้ด

· เหตุใดจึงสำคัญ

xml json นักพัฒนาเวิร์กโฟลว์

ซองจดหมาย XML เปิดเข้าไปในบานหน้าต่างการตรวจสอบ JSON ที่อ่านได้ข้างขอบเขตสคีมา
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

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

มันใช้งานได้กับผลลัพธ์เดียวและพังด้วยสอง - ฟีด XML ที่ดูเหมือนวัตถุ JSON ที่เป็นระเบียบเรียบร้อย จนกระทั่งองค์ประกอบที่สองปรากฏขึ้น

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

ToolAcre ทำให้การแมปคาดเดาได้ แต่ไม่สามารถลบความกำกวมแบบหนึ่งต่อหลายนี้ได้ สำหรับการบูรณาการที่มีอายุการใช้งานยาวนาน ให้ทำให้เส้นทางการรวบรวมที่รู้จักจาก XSD หรือสัญญาที่บันทึกไว้เป็นมาตรฐาน และทดสอบคาร์ดินัลลิตีทั้งสองกับตัวอ่าน XML ที่ใช้จริงในการผลิต

เหตุใดการแปลงจึงดีเยี่ยมสำหรับการอ่าน — การซ้อนลงในวงเล็บปีกกาที่คุ้นเคย คุณลักษณะที่แสดงเป็นคีย์ และสามารถสแกนการตอบสนองทั้งหมดได้ในคราวเดียว

การแปลงเป็นเลิศสำหรับการอ่าน เนื่องจากองค์ประกอบที่ซ้อนกันกลายเป็นวัตถุที่คุ้นเคย พี่น้องที่ทำซ้ำกลายเป็นอาร์เรย์ และแอตทริบิวต์ปรากฏเป็นคีย์ `@` สามารถสแกนซองจดหมายขนาดใหญ่ได้อย่างรวดเร็วโดยไม่ต้องมีแท็กปิดที่ตรงกัน การอนุมานประเภทสามารถปิดอยู่ได้ ดังนั้นข้อความจึงไม่เดาเป็นตัวเลขหรือบูลีนโดยไม่ตั้งใจ

มุมมองที่อ่านได้มีประโยชน์อย่างยิ่งในระหว่างการคัดแยกเหตุการณ์ ซึ่งการค้นหารหัสข้อผิดพลาดหรือเพย์โหลดมีความสำคัญมากกว่าการรักษามาร์กอัปอย่างเป็นทางการ เก็บแหล่งที่มาไว้ข้าง JSON เนื่องจากการฉายภาพอาจไม่รักษาความแตกต่างทุกประการที่จำเป็นสำหรับโค้ดแอปพลิเคชัน

เหตุใดรูปร่างที่แปลงแล้วจึงไม่เสถียร องค์ประกอบที่ทำซ้ำจะกลายเป็นอาร์เรย์เมื่อทำซ้ำเท่านั้น คำนำหน้าแอตทริบิวต์ และโหนดข้อความที่ปรากฏหรือหายไป

รูปร่างที่แปลงแล้วจะขึ้นอยู่กับจำนวนครั้ง คำนำหน้าที่สงวนไว้ และองค์ประกอบนั้นมีแอตทริบิวต์หรือลูกหรือไม่ ข้อความธรรมดาสามารถยุบเป็นสตริงได้ ข้อความเดียวกันจะย้ายไปอยู่ใต้ `#text` เมื่อมีการเพิ่มโครงสร้าง CDATA ปรากฏใต้ `#cdata` และแอตทริบิวต์ใช้ `@`

การเปลี่ยนแปลงเหล่านี้เป็นแบบแผนที่ได้รับการบันทึกไว้ ไม่ใช่อุบัติเหตุในการใช้งานที่ไม่เสถียร สิ่งเหล่านี้จะมีความเสี่ยงก็ต่อเมื่อโค้ดถือว่าหนึ่งตัวอย่างกำหนดรูปร่าง XML ในอนาคตทั้งหมด โมเดลที่รับรู้สคีมาสามารถระบุความสามารถในการทำซ้ำและทางเลือกได้ ตัวแยกวิเคราะห์ทั่วไปไม่สามารถทำได้

สิ่งที่ทำให้โค้ดหายไปอาจจำเป็นต้องใช้ — เนมสเปซ, ลำดับองค์ประกอบ, เนื้อหาแบบผสม, CDATA ขอบเขตและความคิดเห็น

คำนำหน้าเนมสเปซจะอยู่ในชื่อคุณสมบัติและการประกาศจะเป็น `@xmlns:*`; พวกเขาไม่ได้รับการแก้ไขเป็นชื่อขยาย CDATA ยังคงถูกทำเครื่องหมายไว้ใต้คีย์พิเศษ ความคิดเห็น คำประกาศ และคำแนะนำในการประมวลผลจะถูกยกเลิก ข้อความผสมรอบองค์ประกอบย่อยถูกรวมเข้าด้วยกันและสูญเสียตำแหน่งที่สัมพันธ์กัน

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

คำนำหน้าเนมสเปซและค่า CDATA ยังคงมองเห็นได้ ในขณะที่การเรียงลำดับและขอบเขตของโหนดอาจสูญหายได้

ใช้เอกสารรูปซองจดหมายที่มีคำนำหน้าเนมสเปซ เนื้อหาย่อยหนึ่งรายการ และองค์ประกอบผลลัพธ์สองรายการ การแปลงจะเปิดเผยเส้นทางเนื้อหา เก็บคำนำหน้าตามตัวอักษร และสร้างอาร์เรย์ผลลัพธ์ ตัวอย่างนี้สาธิตการนำทางโดยไม่อ้างสิทธิ์ WSDL, SOAP ข้อบกพร่อง หรือการสนับสนุนการแก้ไขเนมสเปซ

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

ตัวอย่างการทำงาน: เอกสาร XML รูปซองจดหมาย โดยไม่มีการอ้างสิทธิ์การสนับสนุนสคีมา SOAP

ขึ้นอยู่กับการแปลงอาจสมเหตุสมผลสำหรับ XML ที่เน้นข้อมูลเป็นศูนย์กลาง เมื่อมีการจัดทำเอกสารการแม็ป จำนวนสมาชิกจะถูกทำให้เป็นมาตรฐานและตัวติดตั้งจะครอบคลุมแอ็ตทริบิวต์ ค่าว่าง เนื้อหาแบบผสม และเนมสเปซ ถือว่าการแมปนั้นเหมือนกับอินเทอร์เฟซที่แอปพลิเคชันของคุณเป็นเจ้าของ

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

สิ่งนี้ไม่ครอบคลุม — เครื่องมือ WSDL และ XSD สำหรับการสร้างไคลเอนต์แบบพิมพ์ ซึ่งเป็นเส้นทางที่แข็งแกร่งสำหรับการบูรณาการที่มีอายุการใช้งานยาวนาน

ไม่มีเครื่องมือ WSDL หรือ XSD รวมอยู่ด้วย ตัวแปลงตรวจสอบความถูกต้องของ XML ที่มีรูปแบบดี ปฏิเสธทุก DOCTYPE และโหนดของโครงการ มันไม่ได้สร้างไคลเอนต์ที่พิมพ์ ตรวจสอบลำดับ หรือบังคับใช้แง่มุมของโดเมน งานเหล่านั้นต้องใช้ซอฟต์แวร์รับรู้สคีมา

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

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

แปลงเป็นความเข้าใจ แยกวิเคราะห์กับสัญญาที่เป็นเจ้าของเพื่อดำเนินการ มุมมอง JSON สามารถเปิดเผยเพย์โหลดได้ในไม่กี่วินาที ในขณะที่ XML ดั้งเดิมยังคงเป็นหลักฐานสำหรับการเรียงลำดับ จำนวนสมาชิก และเนมสเปซ

ตัวแปลงไวยากรณ์มีความซื่อสัตย์เกี่ยวกับการฉายภาพและคำเตือน ใช้การมองเห็นนั้นเพื่อออกแบบการทดสอบ Edge-case แทนที่จะปล่อยให้ตัวอย่างที่เป็นระเบียบเรียบร้อยกำหนดการรวมที่แยกองค์ประกอบที่ซ้ำกันถัดไป

ชุดฟิกซ์เจอร์ที่ทนทานควรมีศูนย์ หนึ่งหรือหลายรายการสำหรับองค์ประกอบที่ทำซ้ำได้ คุณลักษณะและลูกแบ่งปันชื่อ องค์ประกอบปิดตัวเอง ข้อความผสม CDATA; และคำนำหน้าเนมสเปซตามตัวอักษร เรียกใช้โปรแกรมติดตั้งเหล่านั้นผ่านการแมปที่คุณปรับใช้จริงและยืนยันออบเจ็กต์โดเมนที่ทำให้เป็นมาตรฐาน ไม่ใช่ ToolAcreมีการจัดรูปแบบแล้ว JSON ข้อความ. วิธีการดังกล่าวใช้ตัวแปลงเพื่อสำรวจรูปร่างในขณะเดียวกันก็รักษาพฤติกรรมการผลิตที่เชื่อมโยงกับสัญญาตัวแยกวิเคราะห์ที่ชัดเจน