บทเรียนเกี่ยวกับบริการเว็บ SOAP: โปรโตคอล SOAP คืออะไร?

⚡ สรุปอย่างชาญฉลาด

SOAP (Simple Object Access Protocol) เป็นโปรโตคอลที่ใช้ XML สำหรับการเข้าถึงเว็บเซอร์วิสผ่าน HTTP เอกสารนี้จะอธิบายส่วนประกอบพื้นฐานของ SOAP โครงสร้างข้อความ ส่วนประกอบซองจดหมายและส่วนประกอบข้อผิดพลาด รูปแบบการสื่อสาร และตัวอย่างเว็บเซอร์วิส ASMX ที่ใช้งานได้จริง

  • 📦 โปรโตคอลหลัก: SOAP เป็นโปรโตคอลการส่งข้อความแบบ XML ที่ไม่ขึ้นอยู่กับวิธีการส่งข้อมูล ซึ่งช่วยให้แอปพลิเคชันที่สร้างขึ้นด้วยภาษาโปรแกรมต่างกันสามารถแลกเปลี่ยนข้อมูลผ่าน HTTP ได้
  • 🧱 การก่อสร้างตึก: ข้อความ SOAP ประกอบด้วยส่วน Envelope, ส่วน Header (ไม่บังคับ), ส่วน Body และส่วน Fault (ไม่บังคับ)
  • ✉️ องค์ประกอบซองจดหมาย: ซองจดหมายหลัก (Root Envelope) ที่จำเป็นจะห่อหุ้มข้อความและส่งสัญญาณเริ่มต้นและสิ้นสุดไปยังแอปพลิเคชันไคลเอ็นต์
  • 🔁 รูปแบบการสื่อสาร: ไคลเอนต์จะแปลงคำขอเป็นข้อความ SOAP จากนั้นเซิร์ฟเวอร์จะแยกข้อความนั้นและส่งการตอบกลับ SOAP กลับมา โดยทั้งหมดนี้เกิดขึ้นผ่านทาง HTTP
  • 🛠️ ตัวอย่างการปฏิบัติ: เว็บเซอร์วิส ASMX ใน Visual Studio จะสร้างข้อความคำขอและตอบกลับ SOAP โดยอัตโนมัติสำหรับไคลเอ็นต์ที่เรียกใช้งาน

โปรโตคอล SOAP คืออะไร

SOAP คืออะไร?

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

SOAP ย่อมาจาก Simple Object Access Protocol แต่ในภายหลังได้ย่อเหลือเพียง SOAP v1.2 SOAP เป็นโปรโตคอล หรือกล่าวอีกนัยหนึ่งคือ เป็นคำจำกัดความของวิธีการที่เว็บเซอร์วิสสื่อสารกันเอง หรือสื่อสารกับแอปพลิเคชันไคลเอ็นต์ที่เรียกใช้เว็บเซอร์วิสเหล่านั้น

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

บทนำสบู่

ในโลกปัจจุบัน มีแอปพลิเคชันจำนวนมากที่สร้างขึ้นด้วยภาษาโปรแกรมต่างๆ ตัวอย่างเช่น อาจมีเว็บแอปพลิเคชันที่ออกแบบด้วยภาษาโปรแกรมบางภาษา Javaอีกอันใน .Net และอีกอันใน PHP.

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

วิธีการหนึ่งที่ใช้ในการจัดการกับความซับซ้อนนี้คือการใช้ XML (Extensible Markup Language) เป็นภาษาตัวกลางในการแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชัน

ภาษาการเขียนโปรแกรมทุกภาษาสามารถเข้าใจภาษามาร์กอัป XML ได้ ดังนั้น XML จึงถูกใช้เป็นสื่อหลักในการแลกเปลี่ยนข้อมูล

แต่ไม่มีข้อกำหนดมาตรฐานเกี่ยวกับการใช้ XML ในภาษาโปรแกรมทั้งหมดสำหรับการแลกเปลี่ยนข้อมูล นั่นคือเหตุผลที่ซอฟต์แวร์ SOAP เข้ามามีบทบาท

SOAP ได้รับการออกแบบมาให้ทำงานกับ XML ผ่าน HTTP และมีข้อกำหนดบางประการที่สามารถใช้กับแอปพลิเคชันทั้งหมดได้ เราจะมาดูรายละเอียดเพิ่มเติมเกี่ยวกับโปรโตคอล SOAP ในบทต่อไป

ข้อดีของสบู่

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

  • เมื่อพัฒนาping เว็บเซอร์วิสแบบ SOAP จำเป็นต้องมีภาษาที่ใช้สำหรับให้เว็บเซอร์วิสสื่อสารกับแอปพลิเคชันไคลเอ็นต์ SOAP เป็นสื่อกลางที่เหมาะสมที่สุด ซึ่งได้รับการพัฒนาขึ้นเพื่อจุดประสงค์นี้ โปรโตคอลนี้ยังได้รับการแนะนำโดยกลุ่ม W3C ซึ่งเป็นองค์กรกำกับดูแลมาตรฐานเว็บทั้งหมดอีกด้วย
  • SOAP เป็นโปรโตคอลน้ำหนักเบาที่ใช้สำหรับการแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชัน สังเกตคำหลัก 'เบาเนื่องจากการเขียนโปรแกรม SOAP นั้นใช้ภาษา XML ซึ่งเป็นภาษาสำหรับการแลกเปลี่ยนข้อมูลที่มีน้ำหนักเบา ดังนั้นโปรโตคอล SOAP จึงจัดอยู่ในประเภทเดียวกันด้วย
  • SOAP ถูกออกแบบมาให้เป็นอิสระจากแพลตฟอร์มและระบบปฏิบัติการ ดังนั้นโปรโตคอล SOAP จึงสามารถทำงานร่วมกับแอปพลิเคชันที่ใช้ภาษาโปรแกรมใดๆ ก็ได้ทั้งบนแพลฟอร์มและระบบปฏิบัติการ Windows และ ลินุกซ์ แพลตฟอร์ม
  • SOAP ทำงานบนโปรโตคอล HTTP ซึ่งเป็นโปรโตคอลเริ่มต้นที่ใช้โดยเว็บแอปพลิเคชันทั้งหมด ดังนั้นจึงไม่จำเป็นต้องมีการปรับแต่งใดๆ เพื่อเรียกใช้เว็บเซอร์วิสที่สร้างขึ้นบนโปรโตคอล SOAP บนเวิลด์ไวด์เว็บ

สบู่สำเร็จรูป

ข้อกำหนด SOAP กำหนดสิ่งที่เรียกว่า “ข้อความสบู่ซึ่งเป็นสิ่งที่ถูกส่งไปยังเว็บเซอร์วิสและแอปพลิเคชันไคลเอ็นต์

แผนภาพด้านล่างของสถาปัตยกรรม SOAP แสดงให้เห็นองค์ประกอบต่างๆ ของข้อความ SOAP

สบู่สำเร็จรูป

ข้อความ SOAP เป็นเพียงเอกสาร XML ซึ่งมีส่วนประกอบด้านล่างนี้

  • An ซองจดหมาย องค์ประกอบที่ระบุว่าเอกสาร XML นั้นเป็นข้อความ SOAP – นี่คือส่วนที่บรรจุข้อความ SOAP และใช้เพื่อห่อหุ้มรายละเอียดทั้งหมดในข้อความ SOAP นี่คือองค์ประกอบรากในข้อความ SOAP
  • A ส่วนหัว องค์ประกอบที่ประกอบด้วยข้อมูลส่วนหัว – องค์ประกอบส่วนหัวสามารถประกอบด้วยข้อมูลต่างๆ เช่น ข้อมูลประจำตัวการตรวจสอบสิทธิ์ ซึ่งแอปพลิเคชันที่เรียกใช้งานสามารถใช้ได้ นอกจากนี้ยังสามารถประกอบด้วยคำจำกัดความของประเภทข้อมูลที่ซับซ้อนซึ่งสามารถใช้ในข้อความ SOAP ได้ โดยค่าเริ่มต้น ข้อความ SOAP สามารถมีพารามิเตอร์ซึ่งอาจเป็นประเภทข้อมูลพื้นฐาน เช่น สตริงและตัวเลข แต่ก็สามารถเป็นประเภทออบเจ็กต์ที่ซับซ้อนได้เช่นกัน

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

<xsd:complexType>
   <xsd:sequence>
      <xsd:element name="Tutorial Name" type="string"/>
      <xsd:element name="Tutorial Description" type="string"/>
   </xsd:sequence>
</xsd:complexType>

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

<soap:Body>
   <GetTutorialInfo>
      <TutorialName>Web Services</TutorialName>
      <TutorialDescription>All about web services</TutorialDescription>
   </GetTutorialInfo>
</soap:Body>

โครงสร้างข้อความสบู่

สิ่งหนึ่งที่ควรทราบก็คือ ข้อความ SOAP มักจะสร้างขึ้นโดยอัตโนมัติโดยบริการบนเว็บเมื่อมีการเรียกใช้

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

ดังที่ได้กล่าวไว้ในหัวข้อก่อนหน้านี้ของบทเรียน SOAP นี้ ข้อความ SOAP อย่างง่ายประกอบด้วยองค์ประกอบดังต่อไปนี้:

  • องค์ประกอบซองจดหมาย
  • องค์ประกอบส่วนหัว และ
  • องค์ประกอบของร่างกาย
  • องค์ประกอบข้อบกพร่อง (ไม่บังคับ)

เรามาดูตัวอย่างข้อความ SOAP อย่างง่ายด้านล่างนี้ และดูว่าแต่ละองค์ประกอบทำหน้าที่อะไรบ้าง

โครงสร้างข้อความสบู่
โครงสร้างข้อความสบู่

  1. ตามที่เห็นจากข้อความ SOAP ข้างต้น ส่วนแรกของข้อความ SOAP คือองค์ประกอบซองจดหมายซึ่งใช้ในการห่อหุ้มข้อความ SOAP ทั้งหมด
  2. องค์ประกอบถัดไปคือเนื้อหา SOAP ซึ่งประกอบด้วยรายละเอียดของข้อความจริง
  3. ข้อความของเรามีบริการเว็บที่มีชื่อว่า “Guru99WebService”
  4. "Guruฟังก์ชัน “99Webservice” รับพารามิเตอร์ประเภท 'int' และมีชื่อว่า TutorialID

ตอนนี้ข้อความ SOAP ข้างต้นจะถูกส่งผ่านระหว่างบริการเว็บและแอปพลิเคชันไคลเอนต์

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

องค์ประกอบซองจดหมายสบู่

ส่วนแรกของ Building Block คือ SOAP Envelope

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

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

สามารถสังเกตจุดต่อไปนี้ได้บนองค์ประกอบซองจดหมาย SOAP

  • ข้อความ SOAP ทุกข้อความจำเป็นต้องมีองค์ประกอบ Envelope เป็นองค์ประกอบหลัก การมีองค์ประกอบ Envelope ในข้อความ SOAP นั้นเป็นสิ่งที่จำเป็นอย่างยิ่ง
  • องค์ประกอบซองจดหมายทุกรายการต้องมีองค์ประกอบตัวสบู่อย่างน้อยหนึ่งองค์ประกอบ
  • หากองค์ประกอบ Envelope มีองค์ประกอบส่วนหัว จะต้องมีองค์ประกอบไม่เกิน 1 รายการ และจะต้องปรากฏเป็นองค์ประกอบย่อยแรกของ Envelope ก่อนองค์ประกอบเนื้อหา
  • ซองจดหมายจะเปลี่ยนไปเมื่อเวอร์ชัน SOAP เปลี่ยนไป
  • โปรเซสเซอร์ SOAP ที่สอดคล้องกับ v1.1 จะสร้างข้อผิดพลาดเมื่อได้รับข้อความที่มีเนมสเปซซองจดหมาย v1.2
  • ตัวประมวลผล SOAP ที่สอดคล้องกับ v1.2 สร้างข้อบกพร่องเวอร์ชันไม่ตรงกันหากได้รับข้อความที่ไม่มีเนมสเปซซองจดหมาย v1.2

ด้านล่างนี้คือตัวอย่าง SOAP API เวอร์ชัน 1.2 ขององค์ประกอบซองจดหมาย SOAP (SOAP envelope element)

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope" SOAP-ENV:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
   <soap:Body>
      <Guru99WebService xmlns="http://tempuri.org/">
         <TutorialID>int</TutorialID>
      </Guru99WebService>
   </soap:Body>
</SOAP-ENV:Envelope>

ข้อความแสดงข้อผิดพลาด

เมื่อมีการส่งคำขอไปยังเว็บเซอร์วิส SOAP การตอบกลับจะมีได้ 2 รูปแบบ คือ การตอบกลับที่สำเร็จหรือการตอบกลับที่เกิดข้อผิดพลาด หากเป็นการตอบกลับที่สำเร็จ การตอบกลับจากเซิร์ฟเวอร์จะเป็นข้อความ SOAP เสมอ แต่หากเกิดข้อผิดพลาด SOAP จะส่งกลับมาเป็นข้อผิดพลาด “HTTP 500”

ข้อความข้อผิดพลาด SOAP ประกอบด้วยองค์ประกอบต่อไปนี้

  1. <faultCode> – นี่คือรหัสที่ระบุรหัสของข้อผิดพลาด รหัสข้อผิดพลาดอาจเป็นค่าใดค่าหนึ่งต่อไปนี้:
    1. SOAP-ENV:VersionMismatch – นี่คือเมื่อพบเนมสเปซที่ไม่ถูกต้องสำหรับองค์ประกอบ SOAP Envelope
    2. SOAP-ENV:MustUnderstand – ไม่เข้าใจองค์ประกอบย่อยขององค์ประกอบส่วนหัว ซึ่งมีแอตทริบิวต์ mustUnderstand ตั้งค่าเป็น "1" ไม่เข้าใจ
    3. SOAP-ENV: ไคลเอ็นต์ – ข้อความมีรูปแบบไม่ถูกต้องหรือมีข้อมูลที่ไม่ถูกต้อง
    4. SOAP-ENV: เซิร์ฟเวอร์ - เกิดปัญหากับเซิร์ฟเวอร์ ดังนั้นข้อความจึงไม่สามารถดำเนินการต่อได้
  2. – นี่คือข้อความที่ให้คำอธิบายโดยละเอียดของข้อผิดพลาด
  3. (ไม่จำเป็น) – นี่คือสตริงข้อความที่ระบุว่าใครเป็นสาเหตุของความผิด
  4. (ไม่จำเป็น) – นี่คือองค์ประกอบสำหรับข้อความแสดงข้อผิดพลาดเฉพาะแอปพลิเคชัน ดังนั้นแอปพลิเคชันอาจมีข้อความแสดงข้อผิดพลาดเฉพาะสำหรับสถานการณ์ตรรกะทางธุรกิจที่แตกต่างกัน

ตัวอย่างข้อความแสดงข้อผิดพลาด

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

<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
      <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode>
      <faultstring xsi:type="xsd:string">
         Failed to locate method (GetTutorialID) in class (GetTutorial)
      </faultstring>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Output:

เมื่อคุณรันโค้ดข้างต้น จะแสดงข้อผิดพลาดว่า “ไม่พบเมธอด (GetTutorialID) ในคลาส (GetTutorial)”

แบบจำลองการสื่อสารสบู่

การสื่อสารทั้งหมดด้วย SOAP กระทำผ่านโปรโตคอล HTTP ก่อนที่จะมี SOAP มากมาย บริการเว็บ ใช้รูปแบบ RPC (Remote Procedure Call) มาตรฐานสำหรับการสื่อสาร นี่เป็นการสื่อสารประเภทที่ง่ายที่สุด แต่ก็มีข้อจำกัดมากมาย

ในบทเรียน SOAP API นี้ เราจะพิจารณาแผนภาพด้านล่างเพื่อดูว่าการสื่อสารนี้ทำงานอย่างไร ในตัวอย่างนี้ สมมติว่าเซิร์ฟเวอร์ให้บริการเว็บเซอร์วิสซึ่งมี 2 เมธอดดังนี้:

  • รับพนักงาน – คำสั่งนี้จะดึงข้อมูลพนักงานทั้งหมด
  • ตั้งพนักงาน – การดำเนินการนี้จะกำหนดค่าของรายละเอียดต่างๆ เช่น แผนก เงินเดือนของพนักงาน เป็นต้น ตามนั้น

ในการสื่อสารสไตล์ RPC ปกติ ไคลเอนต์จะเรียกใช้วิธีการในคำขอและส่งพารามิเตอร์ที่ต้องการไปยังเซิร์ฟเวอร์ จากนั้นเซิร์ฟเวอร์จะส่งการตอบกลับที่ต้องการ

รูปแบบการสื่อสาร SOAP แบบ RPC

รูปแบบการสื่อสารข้างต้นมีข้อจำกัดที่สำคัญดังต่อไปนี้:

  1. ไม่ขึ้นกับภาษา – เซิร์ฟเวอร์ที่โฮสต์เมธอดเหล่านั้นจะเขียนด้วยภาษาโปรแกรมเฉพาะ และโดยปกติแล้วการเรียกใช้เซิร์ฟเวอร์ก็จะใช้ภาษาโปรแกรมนั้นเท่านั้น
  2. ไม่ใช่โปรโตคอลมาตรฐาน – เมื่อมีการเรียกไปยังขั้นตอนระยะไกล การโทรจะไม่ดำเนินการผ่านโปรโตคอลมาตรฐาน นี่เป็นปัญหาเนื่องจากการสื่อสารทั้งหมดบนเว็บส่วนใหญ่ต้องทำผ่านโปรโตคอล HTTP
  3. ไฟร์วอลล์ – เนื่องจากการเรียก RPC ไม่ได้ดำเนินการผ่านโปรโตคอลปกติ จึงจำเป็นต้องเปิดพอร์ตแยกต่างหากบนเซิร์ฟเวอร์เพื่อให้ไคลเอ็นต์สามารถสื่อสารกับเซิร์ฟเวอร์ได้ โดยปกติไฟร์วอลล์ทั้งหมดจะบล็อกการรับส่งข้อมูลประเภทนี้ และโดยทั่วไปจำเป็นต้องมีการกำหนดค่าจำนวนมากเพื่อให้แน่ใจว่าการสื่อสารประเภทนี้ระหว่างไคลเอนต์และเซิร์ฟเวอร์จะทำงานได้

เพื่อเอาชนะข้อจำกัดทั้งหมดที่กล่าวมาข้างต้น SOAP จึงจะใช้รูปแบบการสื่อสารดังต่อไปนี้

แบบจำลองการสื่อสาร SOAP รูปแบบ SOAP

  1. ไคลเอนต์จะจัดรูปแบบข้อมูลเกี่ยวกับการเรียกใช้ฟังก์ชันและอาร์กิวเมนต์ต่างๆ ลงในข้อความ SOAP แล้วส่งไปยังเซิร์ฟเวอร์เป็นส่วนหนึ่งของคำขอ HTTP กระบวนการห่อหุ้มข้อมูลลงในข้อความ SOAP นี้เรียกว่า นายอำเภอ.
  2. จากนั้นเซิร์ฟเวอร์จะแกะข้อความที่ส่งมาจากไคลเอนต์ ตรวจสอบว่าไคลเอนต์ร้องขออะไร แล้วจึงส่งคำตอบที่เหมาะสมกลับไปยังไคลเอนต์ในรูปแบบข้อความ SOAP กระบวนการแกะข้อความ (unwrap) นี้เรียกว่าอะไรping คำขอที่ส่งมาจากลูกค้าเรียกว่า... การดีมาร์แชลล์.

ตัวอย่างสบู่เชิงปฏิบัติ

ตอนนี้อยู่ในนี้ SoapUI ในบทเรียนนี้ เรามาดูตัวอย่าง SOAP ในทางปฏิบัติกัน วิธีที่ดีที่สุดวิธีหนึ่งในการทำความเข้าใจวิธีการสร้างข้อความ SOAP คือการดูเว็บเซอร์วิสทำงานจริง

หัวข้อนี้จะดูการใช้ Microsoftกรอบงาน .Net เพื่อสร้างบริการเว็บ ASMX บริการเว็บประเภทนี้รองรับทั้ง SOAP เวอร์ชัน 1.1 และเวอร์ชัน 1.2

บริการเว็บ ASMX จะสร้างไฟล์ ภาษานิยามบริการเว็บ (WSDL) เอกสาร. เอกสาร WSDL นี้จำเป็นสำหรับแอปพลิเคชันไคลเอ็นต์ที่เรียก เพื่อให้แอปพลิเคชันทราบว่าบริการเว็บสามารถทำอะไรได้บ้าง

ในตัวอย่างนี้ เราจะสร้างเว็บเซอร์วิสอย่างง่าย ซึ่งจะใช้ในการส่งสตริงกลับไปยังแอปพลิเคชันที่เรียกใช้เว็บเซอร์วิสนี้ เว็บเซอร์วิสนี้จะถูกโฮสต์อยู่ใน... Asp.Net แอปพลิเคชันเว็บ จากนั้นเราจะเรียกใช้บริการเว็บและดูผลลัพธ์ที่บริการเว็บส่งคืน

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

ขั้นตอน 1) ขั้นตอนแรกคือการสร้างแอปพลิเคชันเว็บ ASP.Net ที่ว่างเปล่า จาก Visual Studio 2013 คลิกที่ตัวเลือกเมนู File->New project

ตัวอย่างข้อความ SOAP สำหรับโปรเจกต์ใหม่

เมื่อคุณคลิกที่ตัวเลือก New Project แล้ว Visual Studio จะแสดงกล่องโต้ตอบอีกอันให้คุณเลือกประเภทของโครงการและให้รายละเอียดที่จำเป็นของโครงการ ซึ่งจะอธิบายในขั้นตอนต่อไป

ขั้นตอน 2) ในขั้นตอนนี้

  1. ให้แน่ใจว่าได้เลือกก่อน C# เทมเพลตเว็บของแอปพลิเคชันเว็บ ASP.NET โครงการต้องเป็นประเภทนี้เพื่อสร้างโครงการบริการ SOAP เมื่อเลือกตัวเลือกนี้ Visual Studio จะดำเนินการขั้นตอนที่จำเป็นเพื่อเพิ่มไฟล์ที่จำเป็นสำหรับแอปพลิเคชันบนเว็บทุกประเภท
  2. ตั้งชื่อโปรเจ็กต์ของคุณ ซึ่งในกรณีของเราตั้งชื่อว่า webservice.asmx จากนั้นอย่าลืมระบุตำแหน่งที่จะจัดเก็บไฟล์ของโปรเจ็กต์ด้วย

รายละเอียดโครงการตัวอย่างข้อความ SOAP

เมื่อดำเนินการเสร็จสิ้น คุณจะเห็นไฟล์โปรเจ็กต์ที่สร้างขึ้นใน Solution Explorer ของ Visual Studio 2013

ตัวอย่างข้อความ SOAP ใน Solution Explorer

ขั้นตอน 3) ในขั้นตอนนี้ เราจะเพิ่มไฟล์เว็บเซอร์วิสลงในโปรเจ็กต์ของเรา

  1. ขั้นแรก ให้คลิกขวาที่ไฟล์โปรเจ็กต์ดังที่แสดงด้านล่าง

ตัวอย่างข้อความ SOAP คลิกขวาที่โปรเจ็กต์

  1. เมื่อคุณคลิกขวาที่ไฟล์โปรเจ็กต์ คุณจะมีโอกาสเลือกตัวเลือก “เพิ่ม->บริการเว็บ (ASMX)” เพื่อเพิ่มไฟล์บริการเว็บ เพียงตั้งชื่อไฟล์บริการเว็บว่า Tutorial Service

ตัวอย่างข้อความ SOAP เพิ่มบริการเว็บ

ขั้นตอน 4) เพิ่มโค้ดต่อไปนี้ลงในไฟล์ asmx ของบริการการสอนของคุณ

ตัวอย่างโค้ดเว็บเซอร์วิสข้อความ SOAP

Code คำอธิบาย:

  1. โค้ดบรรทัดนี้ระบุชื่อไฟล์บริการเว็บของคุณ นี่เป็นขั้นตอนสำคัญเนื่องจากจะทำให้แอปพลิเคชันไคลเอ็นต์สามารถเรียกใช้บริการเว็บผ่านชื่อของบริการเว็บได้
  2. โดยปกติไฟล์คลาสจะใช้ในการสรุปการทำงานของบริการเว็บ ดังนั้นไฟล์คลาสจะมีคำจำกัดความของวิธีการเว็บทั้งหมดซึ่งจะมอบฟังก์ชันการทำงานบางอย่างให้กับแอปพลิเคชันไคลเอนต์
  3. ในที่นี้ [WebMethod] เป็นที่รู้จักในฐานะแอตทริบิวต์ที่อธิบายฟังก์ชัน ขั้นตอนต่อไปคือการสร้างฟังก์ชันที่เรียกว่า “Guru99WebService” แต่การเพิ่มแอตทริบิวต์ [WebMethod] เข้ามาทำให้มั่นใจได้ว่าเมธอดนี้สามารถเรียกใช้ได้โดยแอปพลิเคชันไคลเอ็นต์ หากไม่มีแอตทริบิวต์นี้ เมธอดจะไม่สามารถเรียกใช้ได้โดยแอปพลิเคชันไคลเอ็นต์
  4. ในที่นี้เรากำลังกำหนดฟังก์ชันที่ชื่อว่า 'Guruฟังก์ชัน '99WebService' จะใช้ส่งสตริงกลับไปยังแอปพลิเคชันไคลเอ็นต์ที่เรียกใช้ ฟังก์ชันนี้เป็นเว็บเซอร์วิสที่แอปพลิเคชันไคลเอ็นต์ใดๆ ก็สามารถเรียกใช้ได้
  5. เราใช้คำสั่ง return เพื่อส่งคืนสตริง “นี่คือ Guru99. บริการเว็บ” ให้กับแอปพลิเคชันไคลเอ็นต์

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

Output:

ตัวอย่างผลลัพธ์ข้อความ SOAP

  • ผลลัพธ์แสดงให้เห็นอย่างชัดเจนว่าชื่อของเว็บเซอร์วิสของเราคือ “Guru"99 Web Service" ซึ่งเป็นผลมาจากการตั้งชื่อให้กับเว็บเซอร์วิสของเรา
  • นอกจากนี้เรายังสามารถเรียกใช้บริการเว็บได้ หากเราคลิกปุ่ม "เรียกใช้" เราจะได้รับข้อความตอบกลับด้านล่างในเว็บเบราว์เซอร์

ตัวอย่างข้อความ SOAP เรียกใช้การตอบสนอง

ผลลัพธ์ข้างต้น:

  • แสดงให้เห็นอย่างชัดเจนว่า เมื่อเรียกใช้เมธอดเว็บ สตริง “นี่คือ Guru99 บริการเว็บ” ถูกส่งกลับมา
  • นอกจากนี้ Visual Studio ยังช่วยให้คุณสามารถดูคำขอและการตอบสนองข้อความ SOAP ซึ่งสร้างขึ้นเมื่อเรียกใช้บริการเว็บข้างต้น

คำขอ SOAP ซึ่งสร้างขึ้นเมื่อมีการเรียกใช้บริการเว็บแสดงไว้ด้านล่าง

ตัวอย่างข้อความ SOAP คำขอ SOAP

Code คำอธิบาย:

  1. ส่วนแรกของข้อความ SOAP คือองค์ประกอบซองจดหมาย (envelope element) ซึ่งได้กล่าวถึงไปแล้วในบทก่อนหน้า องค์ประกอบนี้เป็นองค์ประกอบที่ห่อหุ้มข้อมูล (encapsulating element) ซึ่งมีอยู่ในทุกข้อความ SOAP
  2. SOAP Body เป็นองค์ประกอบถัดไปและประกอบด้วยรายละเอียดที่แท้จริงของข้อความ SOAP
  3. ส่วนที่สามคือองค์ประกอบที่ระบุว่าเราต้องการเรียกใช้บริการที่ชื่อว่า 'Guru99WebService'

ตัวอย่างข้อความ SOAP การตอบสนอง SOAP

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soap:Body>
      <Guru99WebServiceResponse xmlns="http://tempuri.org/">
         <Guru99WebServiceResult>string</Guru99WebServiceResult>
      </Guru99WebServiceResponse>
   </soap:Body>
</soap:Envelope>

Code คำอธิบาย:

  1. ส่วนแรกของข้อความ SOAP คือองค์ประกอบซองจดหมาย (envelope element) ซึ่งได้กล่าวถึงไปแล้วในบทก่อนหน้า องค์ประกอบนี้เป็นองค์ประกอบที่ห่อหุ้มข้อมูล (encapsulating element) ซึ่งมีอยู่ในทุกข้อความ SOAP
  2. SOAP Body เป็นองค์ประกอบถัดไปและประกอบด้วยรายละเอียดที่แท้จริงของข้อความ SOAP
  3. ส่วนที่น่าสนใจที่คุณจะได้เห็นต่อไปนี้คือแอตทริบิวต์ 'string' แอตทริบิวต์นี้บอกแอปพลิเคชันไคลเอ็นต์ว่าเว็บเซอร์วิสที่ถูกเรียกใช้นั้นส่งคืนอ็อบเจ็กต์ประเภทสตริง ซึ่งมีประโยชน์มากเพราะมิเช่นนั้นแอปพลิเคชันไคลเอ็นต์จะไม่ทราบว่าเว็บเซอร์วิสส่งคืนอะไร

คำถามที่พบบ่อย

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

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

SOAP เป็นโปรโตคอล XML ที่เข้มงวด มีมาตรฐานในตัวสำหรับการรักษาความปลอดภัยและการจัดการข้อผิดพลาด ในขณะที่ REST เป็นรูปแบบสถาปัตยกรรมที่เบากว่า โดยใช้วิธีการของ HTTP และมักใช้ JSON SOAP เหมาะสำหรับการผสานรวมระบบระดับองค์กรที่เป็นทางการ ในขณะที่ REST เป็นที่นิยมสำหรับ API เว็บสาธารณะ

ใช่แล้ว แม้ว่า REST จะครองตลาด API สาธารณะใหม่ๆ แต่ SOAP ก็ยังคงใช้กันทั่วไปในระบบองค์กร ธนาคาร ระบบชำระเงิน และระบบโทรคมนาคม ที่ต้องการความปลอดภัยสูงและข้อตกลงที่เป็นทางการtracts (WSDL) และระบบส่งข้อความที่เชื่อถือได้ การผสานรวมระบบเดิมจำนวนมากยังคงพึ่งพาบริการเว็บ SOAP อยู่

สรุปโพสต์นี้ด้วย: