SOAP กับ REST API: ความแตกต่างระหว่างบริการบนเว็บ
ความแตกต่างที่สำคัญระหว่าง SOAP และ REST API
- SOAP ย่อมาจาก Simple Object Access Protocol ในขณะที่ REST ย่อมาจาก Representational State Transfer
- SOAP เป็นโปรโตคอล ในขณะที่ REST เป็นรูปแบบสถาปัตยกรรม
- SOAP ใช้อินเทอร์เฟซบริการเพื่อแสดงฟังก์ชันการทำงานกับแอปพลิเคชันไคลเอนต์ ในขณะที่ REST ใช้ตัวระบุตำแหน่งบริการเครื่องแบบเพื่อเข้าถึงส่วนประกอบบนอุปกรณ์ฮาร์ดแวร์
- SOAP ต้องการแบนด์วิดท์เพิ่มขึ้นสำหรับการใช้งานในขณะที่ REST ไม่ต้องการแบนด์วิธมากนัก
- เมื่อเปรียบเทียบ SOAP กับ REST API แล้ว SOAP จะใช้ได้กับรูปแบบ XML เท่านั้น ในขณะที่ REST จะทำงานกับข้อความธรรมดา, XML, HTML และ JSON
- SOAP ไม่สามารถใช้ REST ได้ในขณะที่ REST สามารถใช้ SOAP ได้
SOAP คืออะไร?
สบู่ เป็นโปรโตคอลที่ออกแบบก่อน REST และเข้ามาในรูปภาพ แนวคิดหลักเบื้องหลังการออกแบบ SOAP คือเพื่อให้แน่ใจว่าโปรแกรมที่สร้างขึ้นบนแพลตฟอร์มและภาษาการเขียนโปรแกรมที่แตกต่างกันสามารถแลกเปลี่ยนข้อมูลได้อย่างง่ายดาย สบู่ ย่อมาจาก โปรโตคอลการเข้าถึงวัตถุอย่างง่าย.
REST คืออะไร?
REST ได้รับการออกแบบมาโดยเฉพาะสำหรับการทำงานกับส่วนประกอบต่างๆ เช่น ส่วนประกอบสื่อ ไฟล์ หรือแม้แต่วัตถุบนอุปกรณ์ฮาร์ดแวร์เฉพาะ เว็บเซอร์วิสใดๆ ที่กำหนดตามหลักการของ REST สามารถเรียกได้ว่าเป็น บริการเว็บ RestFul- บริการ Restful จะใช้กริยา HTTP ปกติของ GET, POST, PUT และ DELETE สำหรับการทำงานกับส่วนประกอบที่จำเป็น REST ย่อมาจาก Representational State Transfer
ความแตกต่างระหว่าง SOAP และ REST
แต่ละเทคนิคมีข้อดีและข้อเสียของตัวเอง ดังนั้นจึงเป็นการดีที่จะทำความเข้าใจว่าการออกแบบแต่ละอย่างควรใช้ในสถานการณ์ใด บทช่วยสอนเกี่ยวกับความแตกต่าง REST และ SOAP API นี้จะอธิบายความแตกต่างที่สำคัญบางประการระหว่าง REST และ SOAP API รวมถึงความท้าทายที่คุณอาจพบขณะใช้งาน
ด้านล่างนี้เป็นข้อแตกต่างหลักระหว่าง SOAP และ REST API
สบู่ | REST |
---|---|
SOAP ย่อมาจาก Simple Object Access Protocol | REST ย่อมาจาก Representational State Transfer |
SOAP เป็นโปรโตคอล SOAP ถูกออกแบบให้มีข้อกำหนดเฉพาะ ประกอบด้วยไฟล์ WSDL ซึ่งมีข้อมูลที่จำเป็นว่าบริการบนเว็บทำอะไรได้บ้าง นอกเหนือจากตำแหน่งของบริการบนเว็บ | ส่วนที่เหลือคือ Archiรูปแบบเทคเจอร์ซึ่งบริการเว็บสามารถถือเป็นบริการ RESTful ได้ก็ต่อเมื่อเป็นไปตามข้อจำกัดของการเป็น
|
SOAP ไม่สามารถใช้ REST ได้ เนื่องจาก SOAP เป็นโปรโตคอล และ REST เป็นรูปแบบสถาปัตยกรรม | REST สามารถใช้งาน SOAP เป็นโปรโตคอลพื้นฐานสำหรับเว็บเซอร์วิส เนื่องจากท้ายที่สุดแล้ว มันเป็นเพียงรูปแบบสถาปัตยกรรมเท่านั้น |
SOAP ใช้อินเทอร์เฟซบริการเพื่อแสดงฟังก์ชันการทำงานของแอปพลิเคชันไคลเอ็นต์ ใน SOAP ไฟล์ WSDL จะให้ข้อมูลที่จำเป็นแก่ลูกค้า ซึ่งสามารถใช้เพื่อทำความเข้าใจว่าบริการเว็บสามารถนำเสนอบริการใดได้บ้าง | REST ใช้ตัวระบุตำแหน่ง Uniform Service เพื่อเข้าถึงส่วนประกอบต่างๆ บนอุปกรณ์ฮาร์ดแวร์ ตัวอย่างเช่น หากมีออบเจ็กต์ที่แสดงข้อมูลของพนักงานที่โฮสต์บน URL เป็น http://demo.guru99 ด้านล่างนี้คือ URI บางส่วนที่สามารถเข้าถึงได้ |
SOAP ต้องการแบนด์วิธมากขึ้นสำหรับการใช้งาน เนื่องจากข้อความ SOAP มีข้อมูลอยู่ภายในจำนวนมาก ปริมาณการถ่ายโอนข้อมูลโดยใช้ SOAP โดยทั่วไปจึงมีจำนวนมาก
<?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> <Demo.guru99WebService xmlns="http://tempuri.org/"> <EmployeeID>int</EmployeeID> </Demo.guru99WebService> </soap:Body> </SOAP-ENV:Envelope> |
REST ไม่ต้องการแบนด์วิธมากนักเมื่อส่งคำขอไปยังเซิร์ฟเวอร์ ข้อความ REST ส่วนใหญ่ประกอบด้วยข้อความ JSON ด้านล่างนี้เป็นตัวอย่างข้อความ JSON ที่ส่งไปยังเว็บเซิร์ฟเวอร์ คุณจะเห็นว่าขนาดของข้อความนั้นเล็กกว่าเมื่อเปรียบเทียบกับ SOAP
{"city":"Mumbai","state":"Maharastra"} |
SOAP สามารถทำงานได้กับรูปแบบ XML เท่านั้น เท่าที่เห็นจากข้อความ SOAP ข้อมูลทั้งหมดที่ส่งผ่านจะอยู่ในรูปแบบ XML | REST อนุญาตให้มีรูปแบบข้อมูลที่แตกต่างกัน เช่น ข้อความธรรมดา, HTML, XML, JSON เป็นต้น แต่รูปแบบที่ต้องการมากที่สุดสำหรับการถ่ายโอนข้อมูลคือ JSON. |
ควรใช้ REST เมื่อใด
หนึ่งในหัวข้อที่มีการถกเถียงกันมากที่สุดคือเมื่อใดควรใช้ REST หรือเมื่อใดควรใช้ SOAP ในขณะที่ออกแบบบริการเว็บ ด้านล่างนี้คือปัจจัยสำคัญบางประการที่กำหนดว่าเมื่อใดควรใช้เทคโนโลยี REST และ SOAP API สำหรับบริการเว็บ ควรใช้บริการ REST ในกรณีต่อไปนี้
- ทรัพยากรและแบนด์วิธมีจำกัด – เนื่องจากข้อความ SOAP มีเนื้อหาหนักกว่าและใช้แบนด์วิธที่มากกว่ามาก REST จึงควรใช้ในกรณีที่แบนด์วิดท์เครือข่ายมีข้อจำกัด
- การเป็นไร้สัญชาติ – หากไม่จำเป็นต้องรักษาสถานะของข้อมูลจากคำขอหนึ่งไปยังอีกคำขอหนึ่ง ก็ควรใช้ REST หากคุณต้องการการไหลของข้อมูลที่เหมาะสมโดยที่ข้อมูลบางอย่างจากคำขอหนึ่งจำเป็นต้องไหลไปยังอีกคำขอหนึ่ง SOAP จะเหมาะสมกว่าสำหรับจุดประสงค์นั้น เราสามารถนำตัวอย่างของเว็บไซต์ซื้อของออนไลน์ใดๆ โดยปกติไซต์เหล่านี้ต้องการให้ผู้ใช้เพิ่มสินค้าที่ต้องซื้อลงในรถเข็นก่อน รายการในรถเข็นทั้งหมดจะถูกโอนไปยังหน้าการชำระเงินเพื่อทำการซื้อให้เสร็จสมบูรณ์ นี่คือตัวอย่างของแอปพลิเคชันที่ต้องการฟีเจอร์สถานะ สถานะของรายการในตะกร้าจะต้องโอนไปยังหน้าการชำระเงินเพื่อดำเนินการต่อไป
- แคช – หากมีความจำเป็นต้องแคชคำขอจำนวนมาก REST ถือเป็นโซลูชั่นที่สมบูรณ์แบบ ในบางครั้ง ลูกค้าสามารถขอทรัพยากรเดียวกันได้หลายครั้ง ซึ่งสามารถเพิ่มจำนวนคำขอที่ส่งไปยังเซิร์ฟเวอร์ได้ ด้วยการใช้แคช ผลลัพธ์ของการสืบค้นที่พบบ่อยที่สุดสามารถจัดเก็บไว้ในตำแหน่งระดับกลางได้ ดังนั้นเมื่อใดก็ตามที่ไคลเอ็นต์ร้องขอทรัพยากร ระบบจะตรวจสอบแคชก่อน หากมีทรัพยากรอยู่ ก็จะไม่ดำเนินการไปยังเซิร์ฟเวอร์ ดังนั้นการแคชจึงสามารถช่วยลดจำนวนการเดินทางที่เกิดขึ้นกับเว็บเซิร์ฟเวอร์ได้
- ง่ายต่อการเข้ารหัส – การเข้ารหัสบริการ REST และการใช้งานในภายหลังนั้นง่ายกว่า SOAP มาก ดังนั้นหากจำเป็นต้องใช้โซลูชันการชนะอย่างรวดเร็วสำหรับบริการบนเว็บ REST คือหนทางไป
ต่อไปในบทช่วยสอนเกี่ยวกับความแตกต่างของ SOAP และ REST นี้ เราจะเรียนรู้ว่าเมื่อใดจึงควรใช้ SOAP API
ควรใช้ SOAP เมื่อใด
ควรใช้ SOAP ในกรณีต่อไปนี้
- การประมวลผลแบบอะซิงโครนัสและการเรียกใช้งานตามมา – หากมีข้อกำหนดที่ลูกค้าต้องการระดับความน่าเชื่อถือและความปลอดภัยที่รับประกัน มาตรฐาน SOAP ใหม่ของ SOAP 1.2 จะมอบคุณสมบัติเพิ่มเติมมากมาย โดยเฉพาะอย่างยิ่งในเรื่องความปลอดภัย
- วิธีการสื่อสารที่เป็นทางการ – หากทั้งไคลเอนต์และเซิร์ฟเวอร์มีข้อตกลงเกี่ยวกับรูปแบบการแลกเปลี่ยน SOAP 1.2 จะให้ข้อกำหนดที่เข้มงวดสำหรับการโต้ตอบประเภทนี้ ตัวอย่างคือไซต์ซื้อออนไลน์ที่ผู้ใช้เพิ่มสินค้าลงในรถเข็นก่อนชำระเงิน สมมติว่าเรามีบริการทางเว็บที่ทำการชำระเงินครั้งสุดท้าย อาจมีข้อตกลงที่แน่ชัดว่าบริการบนเว็บจะยอมรับเฉพาะชื่อสินค้าในรถเข็น ราคาต่อหน่วย และปริมาณเท่านั้น หากเกิดสถานการณ์เช่นนี้ ควรใช้โปรโตคอล SOAP เสมอ
- การดำเนินการตามสถานะ – หากแอปพลิเคชันมีข้อกำหนดที่ต้องรักษาสถานะจากคำขอหนึ่งไปยังอีกคำขอหนึ่ง มาตรฐาน SOAP 1.2 จะจัดเตรียมโครงสร้าง WS* เพื่อรองรับข้อกำหนดดังกล่าว
ถัดไปในความแตกต่างระหว่าง REST กับ SOAP API เราจะเรียนรู้เกี่ยวกับความท้าทายของ SOAP API
ความท้าทายใน SOAP API
API เป็นที่รู้จักในชื่อ อินเตอร์เฟซการเขียนโปรแกรมประยุกต์ และนำเสนอโดยทั้งไคลเอนต์และเซิร์ฟเวอร์ ในโลกไคลเอนต์สิ่งนี้นำเสนอโดยเบราว์เซอร์ในขณะที่ในโลกเซิร์ฟเวอร์เป็นสิ่งที่ให้บริการทางเว็บซึ่งอาจเป็น SOAP หรือ REST
ความท้าทายกับ SOAP API
- ไฟล์ WSDL – หนึ่งในความท้าทายหลักของ SOAP API คือเอกสาร WSDL เอง เอกสาร WSDL คือสิ่งที่แจ้งให้ไคลเอ็นต์ทราบถึงการดำเนินการทั้งหมดที่เว็บเซอร์วิสสามารถดำเนินการได้ เอกสาร WSDL จะมีข้อมูลทั้งหมด เช่น ประเภทข้อมูลที่ใช้ในข้อความ SOAP และการดำเนินการทั้งหมดที่มีให้ใช้งานผ่านเว็บเซอร์วิส ตัวอย่างโค้ดด้านล่างนี้เป็นเพียงส่วนหนึ่งของไฟล์ WSDL ตัวอย่าง
<?xml version="1.0"?> <definitions name="Tutorial" targetNamespace=https://demo.guru99.com/Tutorial.wsdl xmlns:tns=https://demo.guru99.com/Tutorial.wsdl xmlns:xsd1=https://demo.guru99.com/Tutorial.xsd xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap/ xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <schema targetNamespace=https://Demo.guru99.com/Tutorial.xsd xmlns="http://www.w3.org/2000/10/XMLSchema"> <element name="TutorialNameRequest"> <complexType> <all> <element name="TutorialName" type="string"/> </all> </complexType> </element> <element name="TutorialIDRequest"> <complexType> <all> <element name="TutorialID" type="number"/> </all> </complexType> </element> </schema> </types>
ตามไฟล์ WSDL ข้างต้น เรามีองค์ประกอบที่เรียกว่า “TutorialName” ซึ่งเป็นประเภท String ซึ่งเป็นส่วนหนึ่งขององค์ประกอบ TutorialNameRequest
ตอนนี้ สมมติว่าไฟล์ WSDL มีการเปลี่ยนแปลงตามความต้องการทางธุรกิจ และ TutorialName จะต้องกลายเป็น Tutorial หรือไม่Descriptไอออน. ซึ่งหมายความว่าไคลเอ็นต์ทั้งหมดที่กำลังเชื่อมต่อกับบริการเว็บนี้จะต้องทำการเปลี่ยนแปลงโค้ดที่สอดคล้องกันเพื่อรองรับการเปลี่ยนแปลงในไฟล์ WSDL
สิ่งนี้แสดงให้เห็นถึงความท้าทายที่ใหญ่ที่สุดของไฟล์ WSDL ซึ่งเป็นสัญญาที่แน่นแฟ้นระหว่างไคลเอนต์และเซิร์ฟเวอร์ และการเปลี่ยนแปลงเพียงครั้งเดียวอาจส่งผลกระทบอย่างมากต่อแอปพลิเคชันไคลเอนต์ทั้งหมด
- ขนาดเอกสาร – ความท้าทายที่สำคัญอีกประการหนึ่งคือขนาดของข้อความ SOAP ที่ได้รับการถ่ายโอนจากไคลเอนต์ไปยังเซิร์ฟเวอร์ เนื่องจากข้อความขนาดใหญ่ การใช้ SOAP ในตำแหน่งที่แบนด์วิดท์เป็นข้อจำกัดอาจเป็นปัญหาใหญ่ได้
ถัดไปในความแตกต่าง RESTful กับ SOAP เราจะเรียนรู้เกี่ยวกับความท้าทายของ REST API
ความท้าทายใน REST API
- ขาดความปลอดภัย – REST ไม่ได้กำหนดความปลอดภัยใดๆ เช่น SOAP นี่คือเหตุผลว่าทำไม REST จึงเหมาะสมมากสำหรับ URL ที่เปิดเผยต่อสาธารณะ แต่เมื่อเป็นเรื่องของข้อมูลที่เป็นความลับที่ถูกส่งผ่านระหว่างไคลเอนต์และเซิร์ฟเวอร์ REST จึงเป็นกลไกที่แย่ที่สุดที่จะใช้สำหรับบริการบนเว็บ
- ขาดรัฐ – เว็บแอปพลิเคชันส่วนใหญ่ต้องการกลไกสถานะ ตัวอย่างเช่น หากคุณมีไซต์จัดซื้อที่มีกลไกของการมีตะกร้าสินค้า จำเป็นต้องทราบจำนวนสินค้าในตะกร้าสินค้าก่อนที่จะทำการซื้อจริง น่าเสียดายที่ภาระในการรักษาสถานะนี้ตกอยู่กับไคลเอนต์ ซึ่งทำให้แอปพลิเคชันไคลเอนต์มีน้ำหนักมากขึ้นและยากต่อการดูแลรักษา
ความแตกต่างระหว่าง SOAP กับ CORBA กับ DCOM กับ Java RMI
เทคนิคการเข้าถึงระยะไกลเช่น RPC (การเรียกขั้นตอนระยะไกล) มีการใช้งานกันทั่วไปก่อนที่ SOAP และ REST API จะเข้ามา เทคนิคการเข้าถึงระยะไกลต่างๆ ที่มีอยู่มีดังต่อไปนี้
- คอร์บา – สิ่งนี้เรียกว่า Common Oขงเบ้ง REquest Bร็อกเกอร์ Aสถาปัตยกรรม ระบบนี้ถูกสร้างขึ้นเพื่อให้แน่ใจว่าแอปพลิเคชันที่สร้างบนแพลตฟอร์มต่างๆ สามารถสื่อสารถึงกันได้ CORBA มีพื้นฐานมาจากสถาปัตยกรรมเชิงวัตถุ แต่ไม่จำเป็นที่แอปพลิเคชันที่เรียกใช้งานจะต้องอิงตามสถาปัตยกรรมนี้ ข้อเสียเปรียบหลักของเทคนิคนี้คือต้องพัฒนาด้วยภาษาแยกต่างหากที่เรียกว่า Interface Definition Language และมีเพียงภาษาเพิ่มเติมที่นักพัฒนาต้องเรียนรู้เพื่อใช้งานระบบ CORBA
- DCOM - นี้เป็น Dมีการกระจาย Cส่วนประกอบ Oขงเบ้ง Model ซึ่งเป็นกรรมสิทธิ์ Microsoft เทคโนโลยีสำหรับลูกค้าในการเข้าถึงส่วนประกอบระยะไกล ปัญหาที่ใหญ่ที่สุดของกลไกนี้คือมันขึ้นอยู่กับแอปพลิเคชันไคลเอนต์ในการเพิ่มทรัพยากรเมื่อไม่ต้องการอีกต่อไป ประการที่สอง เมื่อไคลเอนต์ส่งคำขอ มันก็ขึ้นอยู่กับไคลเอนต์เพื่อให้แน่ใจว่าคำขอนั้นถูกห่อหรือรวมเข้าด้วยกันอย่างถูกต้อง เพื่อให้เว็บเซอร์วิสสามารถเข้าใจคำขอที่ส่งไป ปัญหาอีกประการหนึ่งคือถ้าแอปพลิเคชันไคลเอนต์เป็น Java แอปพลิเคชันพื้นฐานซึ่งต้องทำงาน DCOM (Microsoft เทคโนโลยี) จำเป็นต้องมีการเข้ารหัสเพิ่มเติมเพื่อให้แน่ใจว่าแอปพลิเคชันที่สร้างขึ้นในภาษาการเขียนโปรแกรมอื่นสามารถทำงานร่วมกับบริการเว็บที่ใช้ DCOM ได้
- Java RMI – รู้จักกันในนาม Java Remote Method Iการร้องขอนี่คือ Java การใช้งานเกี่ยวกับวิธีการเรียกวัตถุระยะไกลผ่านการเรียกขั้นตอนระยะไกล ข้อจำกัดที่ใหญ่ที่สุดของเทคโนโลยีนี้คือ Java RMI สามารถรันได้บน a Java เครื่องเสมือน ซึ่งหมายความว่าจะต้องเรียกใช้แอปพลิเคชันการโทรบน Java กรอบเพื่อนำไปใช้ประโยชน์ Java อาร์เอ็มไอ
ความแตกต่างที่สำคัญระหว่าง SOAP และเทคนิคเหล่านี้มีดังนี้
- ทำงานผ่าน HTTP – เทคนิค RPC ทั้งหมดมีข้อจำกัดสำคัญประการหนึ่ง นั่นคือเทคนิคเหล่านี้ไม่ทำงานโดยใช้โปรโตคอล HTTP เนื่องจากแอปพลิเคชันทั้งหมดบนเว็บต้องทำงานโดยใช้โปรโตคอลนี้ จึงเคยเป็นอุปสรรคสำคัญสำหรับไคลเอนต์ที่ต้องเข้าถึงบริการเว็บในรูปแบบ RPC เหล่านี้
- การทำงานกับพอร์ตที่ไม่ได้มาตรฐาน – เนื่องจากบริการเว็บสไตล์ RPC ไม่ทำงานโดยใช้โปรโตคอล HTTP จึงต้องเปิดพอร์ตแยกต่างหากเพื่อให้ไคลเอ็นต์เข้าถึงฟังก์ชันการทำงานจากบริการเว็บเหล่านี้