Representational state transfer (REST) ​​และ Simple Object Access Protocol (SOAP)


722

ใครสามารถอธิบายได้ว่าRESTคืออะไรและSOAPในภาษาอังกฤษธรรมดาคืออะไร และ Web Services ทำงานอย่างไร


5
คุณต้องอ่านPDFนี้เพื่อทำความเข้าใจกับ REST และ SOAP เว็บเซอร์วิส
Lalit Kumar Maurya

2
คุณสามารถตรวจสอบบล็อกนี้javapapers.com/web-service/rest-vs-soap
spideringweb

1
ฉันขอแนะนำให้อ่านการทำวิทยานิพนธ์ของ Fielding ในหัวข้อ REST: ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
Philip Couling

เป็นไปได้ที่ซ้ำกันของSOAP หรือ REST สำหรับบริการบนเว็บ?
nawfal

1
@PhilipCouling ฉันจะไม่เรียกเอกวิทยานิพนธ์ปริญญาเอกธรรมดาใด ๆ ...
stt106

คำตอบ:


1589

คำอธิบายง่ายๆเกี่ยวกับ SOAP และ REST

SOAP - "Simple Object Access Protocol"

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


ส่วนที่เหลือ - การโอนย้ายสถานะแทน

ส่วนที่เหลือเป็นวิธีที่ง่ายในการส่งและรับข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์และไม่มีมาตรฐานที่กำหนดไว้มากมาย คุณสามารถส่งและรับข้อมูลเป็น JSON, XML หรือแม้แต่ข้อความธรรมดา น้ำหนักเบาเมื่อเทียบกับ SOAP


ป้อนคำอธิบายรูปภาพที่นี่


73
SOAP เป็นมากกว่าการส่งข้อมูลในซองจดหมาย อย่างไรก็ตามส่วนใหญ่จะใช้เพื่อส่ง BLOB ไปยังเซิร์ฟเวอร์โดยไม่คำนึงถึงคุณสมบัติที่ SOAP ให้ไว้ โดยทั่วไปแล้วคนส่วนใหญ่ใช้ SOAP อย่าง REST กับซองจดหมายมาตรฐาน (SOAP เป็นตัวอย่างที่ดีกว่าวิศวกรรม)
elmuerte

15
SOAP ทำใน NO WAY บังคับให้ใช้ HTTP หรือ XML HTTP และ XML เป็นสิ่งที่กำหนดไว้ใน WS-I สำหรับการทำงานร่วมกัน แต่ก็สามารถส่ง POJO ผ่าน JMS ได้ สิ่งที่เป็นคือโปรแกรมเมอร์ไม่จำเป็นต้องดูแล: บัสบริการจัดการการขนส่งและการเข้ารหัส
koppor

56
สำหรับทุกปัญหาที่ซับซ้อนมีคำตอบที่ชัดเจนง่ายและผิด --HL Mencken
jmh

5
ตัวอย่างคือมหากาพย์!
Kaidul

18
ให้การอ่าน ในขณะที่คำตอบนี้ให้ความบันเทิง @ Pavel คำตอบด้านล่างนั้นมีความสมบูรณ์มากยิ่งขึ้น
Josh Johnson

322

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

Simple Object Access Protocol (SOAP):

  • SOAP สร้างโปรโตคอล XML ที่ด้านบนของ HTTP หรือบางครั้ง TCP / IP
  • SOAP อธิบายถึงฟังก์ชั่นและประเภทของข้อมูล
  • SOAP เป็นตัวตายตัวแทนของ XML-RPC และคล้ายกันมาก แต่อธิบายวิธีการสื่อสารมาตรฐาน
  • ภาษาการเขียนโปรแกรมหลายภาษามีการสนับสนุนดั้งเดิมสำหรับ SOAP โดยทั่วไปแล้วคุณป้อน URL ของบริการบนเว็บและคุณสามารถเรียกใช้ฟังก์ชันบริการเว็บโดยไม่จำเป็นต้องใช้รหัสเฉพาะ
  • ข้อมูลไบนารีที่ส่งจะต้องเข้ารหัสก่อนเป็นรูปแบบเช่น base64 ที่เข้ารหัส
  • มีโปรโตคอลและเทคโนโลยีหลายอย่างที่เกี่ยวข้อง: WSDL, XSDs, SOAP, WS-Addressing

การถ่ายโอนสถานะตัวแทน (REST):

  • REST ไม่จำเป็นต้องมากกว่า HTTP แต่คะแนนส่วนใหญ่ของฉันด้านล่างจะมีอคติ HTTP
  • REST นั้นมีน้ำหนักเบามากมันบอกว่าเดี๋ยวก่อนเราไม่ต้องการความซับซ้อนทั้งหมดที่ SOAP สร้างขึ้น
  • โดยทั่วไปจะใช้วิธี HTTP ปกติแทนรูปแบบ XML ขนาดใหญ่ที่อธิบายทุกอย่าง ตัวอย่างเช่นการรับทรัพยากรที่คุณใช้ HTTP GET เพื่อวางทรัพยากรบนเซิร์ฟเวอร์ที่คุณใช้ HTTP PUT ในการลบทรัพยากรบนเซิร์ฟเวอร์คุณใช้ HTTP DELETE
  • ส่วนที่เหลือเป็นวิธีที่ง่ายมากที่จะใช้วิธี HTTP GET, POST และ PUT เพื่อปรับปรุงทรัพยากรบนเซิร์ฟเวอร์
  • โดยทั่วไป REST จะใช้กับResource Oriented Architecture (ROA) ได้ดีที่สุด ในโหมดนี้ให้คิดว่าทุกสิ่งเป็นทรัพยากรและคุณจะดำเนินการกับทรัพยากรเหล่านี้
  • ตราบใดที่ภาษาการเขียนโปรแกรมของคุณมีไลบรารี HTTP และส่วนใหญ่คุณสามารถใช้โปรโตคอล REST HTTP ได้อย่างง่ายดาย
  • ข้อมูลไบนารีหรือทรัพยากรไบนารีสามารถส่งตามคำขอของพวกเขา

มีการอภิปรายที่ไม่มีที่สิ้นสุดในส่วนที่เหลือ VS สบู่ใน google

ที่ฉันชอบคือคนนี้ ปรับปรุง 27 พฤศจิกายน 2013: เว็บไซต์พอล Prescod ดูเหมือนจะได้ไปแบบออฟไลน์และบทความนี้ไม่สามารถใช้ได้อีกสำเนา แต่สามารถพบได้บนเครื่อง Waybackหรือเป็นรูปแบบไฟล์ PDF ที่CiteSeerX


28
REST ไม่มีส่วนเกี่ยวข้องกับ HTTP (เป็นโปรโตคอลที่เป็นอิสระ) และ XML นั้นใช้ได้กับสถาปัตยกรรม RESTful GET / POST / PUT / DELETE ใช้ HTTP อย่างถูกต้อง - จำเป็นสำหรับ REST แต่ไม่เพียงพอ
aehlke

10
ลูกค้า REST จะรู้ได้อย่างไรว่าเขาใช้วิธีการและประเภทอย่างไร ใน SOAP มี WSDL ซึ่งเครื่องมือจำนวนมากสามารถสร้างคลาสและวิธีการได้
jlp

3
@jlp: ขึ้นอยู่กับผู้พัฒนาไคลเอ็นต์ REST เพื่อใช้อินเตอร์เฟส REST ที่เปิดเผยอย่างถูกต้อง
Brian R. Bondy

14
ส่วนที่เหลือก็พูดว่า 'ใช้อินเตอร์เฟซที่เหมือนกัน' เนื่องจากอินเตอร์เฟส HTTP [GET, POST, PUT, DELETE, (UPDATE, HEAD)] กลายเป็น 'ส่วนต่อประสานที่เหมือนกัน' ของเว็บ REST (บนเว็บ) นั้นขึ้นอยู่กับ HTTP ในความคิดของฉัน!
Andre Schweighofer

3
@aehlke REST นั้นขึ้นอยู่กับ HTTP เป็นอย่างมาก ที่จะพูดเป็นอย่างอื่นบ้า วิธี REST ถูกกำหนดไว้อย่างมั่นคงผ่าน HTTP RFC (โดย W3C TAG) ไม่มีข้อกำหนดอื่นใดนอกเหนือจากวิทยานิพนธ์ปริญญาเอกโดย Roy Fielding แห่ง UC Irvine ดู: en.wikipedia.org/wiki/Representational_state_transfer
Brenden

259

ส่วนที่เหลือ

ฉันเข้าใจว่าความคิดหลักของ REST นั้นง่ายมาก เราใช้เว็บเบราว์เซอร์มาหลายปีแล้วและเราได้เห็นว่าเว็บไซต์ที่ง่ายยืดหยุ่นและมีประสิทธิภาพนั้นเป็นอย่างไร ไซต์ HTML ใช้การเชื่อมโยงหลายมิติและแบบฟอร์มเป็นวิธีหลักในการโต้ตอบกับผู้ใช้ เป้าหมายหลักของพวกเขาคือการช่วยให้เราลูกค้าจะรู้เพียงเชื่อมโยงเหล่านั้นที่เราสามารถใช้ในสถานะปัจจุบัน และส่วนที่เหลือก็พูดว่า 'ทำไมไม่ใช้หลักการเดียวกันในการขับเคลื่อนคอมพิวเตอร์มากกว่าลูกค้ามนุษย์ผ่านแอปพลิเคชันของเรา?' รวมเข้ากับพลังของโครงสร้างพื้นฐาน WWW และคุณจะได้รับเครื่องมือนักฆ่าสำหรับการสร้างแอพพลิเคชั่นที่ยอดเยี่ยม

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

มันค่อนข้างน่าแปลกใจที่คำตอบทั้งหมดดูเหมือนจะเน้นที่รูปแบบข้อความหรือการใช้คำกริยา HTTP ในความเป็นจริงรูปแบบข้อความไม่สำคัญเลย REST สามารถใช้รูปแบบใดก็ได้โดยมีเงื่อนไขว่าผู้พัฒนาบริการจะจัดทำเอกสาร คำกริยา HTTP ทำให้บริการ CRUD เป็นเพียงบริการ แต่ยังไม่สงบ สิ่งที่เปลี่ยนบริการเป็นบริการ REST คือการเชื่อมโยงหลายมิติ (การควบคุมไฮเปอร์มีเดีย) ที่ฝังอยู่ในการตอบกลับของเซิร์ฟเวอร์พร้อมกับข้อมูลและจำนวนเงินจะต้องเพียงพอสำหรับลูกค้าที่จะเลือกการกระทำถัดไปจากลิงก์เหล่านั้น

แต่น่าเสียดายที่มันค่อนข้างยากที่จะหาข้อมูลที่ถูกต้องในส่วนที่เหลือบนเว็บยกเว้นสำหรับวิทยานิพนธ์รอยฝ่าย (เขาเป็นคนที่ได้รับส่วนที่เหลือ) ฉันอยากจะแนะนำหนังสือ'REST in Practice'เพราะจะให้การสอนทีละขั้นตอนอย่างละเอียดเกี่ยวกับวิธีการพัฒนาจาก SOAP เป็น REST

สบู่

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

เมื่อเทียบกับ

รายละเอียดเช่นโปรโตคอลการขนส่งรูปแบบข้อความ xsd, wsdl ฯลฯ ไม่สำคัญเมื่อเปรียบเทียบรูปแบบของ RPC กับ REST ข้อแตกต่างที่สำคัญคือบริการ RPC นำเสนอจักรยานด้วยการออกแบบโพรโทคอลแอปพลิเคชันของตัวเองใน RPC API ด้วยความหมายที่รู้เท่านั้น ดังนั้นลูกค้าทุกคนต้องเข้าใจโปรโตคอลนี้ก่อนที่จะใช้บริการและไม่สามารถสร้างโครงสร้างพื้นฐานทั่วไปเช่นแคชได้เนื่องจากความหมายที่เป็นกรรมสิทธิ์ของคำขอทั้งหมด นอกจากนี้ RPC APIs ไม่แนะนำการกระทำที่ได้รับอนุญาตในสถานะปัจจุบันนี้จะต้องได้รับจากเอกสารเพิ่มเติม ส่วนที่เหลือหมายถึงการใช้อินเตอร์เฟสแบบสม่ำเสมอเพื่อให้ลูกค้าหลายรายมีความเข้าใจเกี่ยวกับความหมายของ API และตัวควบคุมไฮเปอร์สื่อ (ลิงก์) เพื่อเน้นตัวเลือกที่มีในแต่ละรัฐ ดังนั้น,

ในทางที่ SOAP (เช่นเดียวกับ RPC อื่น ๆ ) เป็นความพยายามที่จะขุดอุโมงค์ผ่านขอบเขตการให้บริการรักษาสื่อการเชื่อมต่อเป็นกล่องดำที่สามารถส่งข้อความเท่านั้น ส่วนที่เหลือเป็นการตัดสินใจที่จะรับทราบว่าเว็บเป็นระบบข้อมูลที่มีการกระจายขนาดใหญ่เพื่อยอมรับโลกอย่างที่เป็นอยู่และเรียนรู้ที่จะเป็นผู้เชี่ยวชาญแทนที่จะต่อสู้กับมัน

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

ปรับปรุง

ประสบการณ์ของฉันแสดงให้เห็นถึงการพัฒนา REST โดยไม่คาดคิดยากกว่า SOAP อย่างน้อยสำหรับ. NET ในขณะที่มีเฟรมเวิร์กที่ยอดเยี่ยมเช่น ASP.NET Web API ไม่มีเครื่องมือที่จะสร้างพร็อกซีฝั่งไคลเอ็นต์โดยอัตโนมัติ ไม่มีอะไรที่เหมือนกับ 'เพิ่มการอ้างอิงบริการเว็บ' หรือ 'เพิ่มการอ้างอิงบริการ WCF' หนึ่งมีการเขียนทั้งหมดเป็นอันดับและบริการสอบถามรหัสด้วยมือ และผู้ชายนั่นเป็นรหัสสำเร็จรูปจำนวนมาก ฉันคิดว่าการพัฒนา REST ต้องการสิ่งที่คล้ายกับ WSDL และการนำเครื่องมือมาใช้สำหรับแต่ละแพลตฟอร์มการพัฒนา ในความเป็นจริงดูเหมือนว่าจะมีพื้นฐานที่ดี: WADLหรือWSDL 2.0แต่ไม่มีมาตรฐานใดที่ได้รับการสนับสนุนอย่างดี

อัพเดท (ม.ค. 2559)

ปรากฎว่าขณะนี้มีเครื่องมือหลากหลายสำหรับการกำหนด REST API ความชอบส่วนบุคคลของฉันอยู่ในขณะนี้Raml

บริการบนเว็บทำงานอย่างไร

นี่เป็นคำถามที่กว้างเกินไปเพราะมันขึ้นอยู่กับสถาปัตยกรรมและเทคโนโลยีที่ใช้ในบริการเว็บเฉพาะ แต่โดยทั่วไปบริการเว็บเป็นเพียงแอปพลิเคชั่นบางอย่างในเว็บที่สามารถรับคำขอจากลูกค้าและตอบกลับ มันสัมผัสกับเว็บจึงจะเป็นเว็บบริการและก็มักจะใช้ได้ 24/7 ที่ว่าทำไมมันเป็นบริการ แน่นอนมันแก้ปัญหาบางอย่าง (มิฉะนั้นทำไมคนที่เคยใช้บริการเว็บ) สำหรับลูกค้า


45
นี่ควรเป็นคำตอบที่ถูกโหวตมากที่สุดในตอนนี้! ฉันมีอารมณ์ขัน แต่มันก็น่าหดหู่เมื่อคำตอบตลกเกี่ยวกับคนที่ถือว่าดีของ StackOverflow
Tom W Hall

3
@ TomHall ฉันเดาว่าสถานการณ์นี้ค่อนข้างเฉพาะกับการอภิปราย REST - RPC ไม่ใช่เฉพาะใน SO เท่านั้น ฉันเดาว่าเป็นเหตุผลที่เราไม่มีเครื่องมือที่เหมาะสมสำหรับลูกค้า REST อย่างน้อยใน. NET การใช้ไคลเอ็นต์บริการ REST ได้พิสูจน์แล้วว่าเป็นวิธีที่ยากกว่าการสร้างการอ้างอิงบริการ SOAP หนึ่งมีการเขียนคลาสพร็อกซี่ด้วยมือ ด้วยเหตุผลบางอย่างที่คนคิดเกี่ยวกับ REST ราวกับว่าไม่มีกฎใด ๆ ในขณะที่ความคิดดั้งเดิมในทางตรงกันข้ามทำให้ข้อ จำกัด มากขึ้นในสถาปัตยกรรม ฉันหวังว่าชุมชนจะเข้าใจ REST - จากนั้นเราจะได้รับเครื่องมือและการยอมรับที่ดี
Pavel Gatilov

2
@PavelGatilov คำตอบนี้ยอดเยี่ยม ฉันได้อ่านคำอธิบายของ REST อื่น ๆ และไม่เคย "เข้าใจ" ว่าหลักการขับขี่คือการเปลี่ยนสถานะที่เป็นไปได้เป็นส่วนหนึ่งของการตอบสนอง ความจริงที่ว่าคุณใช้เวลาในการไตร่ตรองจากประสบการณ์ของคุณและยอมรับว่าความยากลำบากนั้นมีค่ามากสำหรับทุกคนของเรา

คำตอบที่ยอดเยี่ยม ฉันสงสัยว่าจะใช้เวลานานแค่ไหนสำหรับ REST-I ในการพัฒนาในขณะนี้โดยเริ่มที่จะมอง SOAP มากขึ้นเรื่อย ๆ เช่น RAML, Swagger และ WADL ทำให้มันออกมาตามมาตรฐานของ REST ฉันพบว่าการขาดเครื่องมือใน REST เมื่อเปรียบเทียบกับ SOAP เป็นปัญหาใหญ่เมื่อพัฒนาระบบการเงินที่ค่อนข้างบอบบางและซับซ้อน ทั้ง REST และ SOAP นั้นยอดเยี่ยมเมื่อใช้อย่างถูกต้อง ปู่ของฉันบอกเสมอว่าคุณสามารถใช้ไขควงในการตอกตะปู แต่มันจะไม่ทำงานได้ดี เช่นเดียวกับที่นี่ เครื่องมือที่เหมาะสมสำหรับความคิดในการทำงานไม่ใช่วิธีของฉันเป็นวิธีเดียว \
Namphibian

โอ้ฉันชอบ RAML และฉันชอบการพัฒนาจากบนลงล่างสิ่งหนึ่งที่ฉันคิดว่าน่ารำคาญที่สุดเกี่ยวกับ REST ก็คือการขาดวิธีการแบบบนลงล่างที่มีโครงสร้าง ฉันชอบคิดก่อนทำ
Namphibian

40

นี่คือคำอธิบายที่ง่ายที่สุดที่คุณจะพบได้

บทความนี้จะเล่าเรื่องของสามีต่อภรรยาโดยที่สามีอธิบายให้ภรรยาฟังเกี่ยวกับ REST ในแง่คนธรรมดาบริสุทธิ์ ต้องอ่าน!

How-i-อธิบายให้กับภรรยาของฉัน (ลิงค์เดิม)
How-i-อธิบายให้กับภรรยาของฉัน (ลิงค์การทำงานของHow-i-อธิบายให้กับภรรยาของฉัน (2013-07-19)


2
ส่วนที่เกี่ยวกับความหลากหลายมีความสวยงาม
Profpatsch

38

SOAP - Simple Object Access Protocolเป็นโปรโตคอล !

REST - การถ่ายโอนสถานะของการนำเสนอเป็นรูปแบบสถาปัตยกรรม !

SOAP เป็นโปรโตคอล XML ที่ใช้ในการถ่ายโอนข้อความโดยทั่วไปผ่านทาง HTTP

RESTและSOAPเป็นเนื้อหาที่ ไม่ได้เกิดร่วมกัน สถาปัตยกรรม RESTful อาจใช้HTTPหรือSOAPโปรโตคอลการสื่อสารอื่น ๆ RESTเหมาะสำหรับเว็บและจึงHTTPเป็นตัวเลือกที่สมบูรณ์แบบ HTTPยังเป็นโปรโตคอลเดียวที่กล่าวถึงในเอกสารของ Roy Fielding

แม้ว่า REST และ SOAP จะแตกต่างกันอย่างชัดเจน แต่คำถามก็ให้ความกระจ่างถึงความจริงที่ว่าRESTและHTTPมักใช้ควบคู่กัน สาเหตุหลักมาจากความเรียบง่ายของ HTTP และการจับคู่ที่เป็นธรรมชาติกับหลักการ RESTful

หลักการ REST พื้นฐาน

การสื่อสารกับไคลเอนต์ - เซิร์ฟเวอร์

สถาปัตยกรรมไคลเอนต์ - เซิร์ฟเวอร์มีการแยกความกังวลอย่างชัดเจน แอปพลิเคชันทั้งหมดที่สร้างในสไตล์ RESTful จะต้องเป็นไคลเอนต์ - เซิร์ฟเวอร์ด้วย

ไร้สัญชาติ

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

แคชได้

อาจมีการใช้ข้อ จำกัด แคชจึงทำให้สามารถทำเครื่องหมายข้อมูลตอบกลับว่าเป็นแคชหรือไม่สามารถเข้าถึงได้ ข้อมูลใด ๆ ที่ทำเครื่องหมายเป็นแคชสามารถนำมาใช้ใหม่เป็นการตอบสนองต่อคำขอที่ตามมาเหมือนกัน

ชุดอินเตอร์เฟส

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

แนวคิดข้างต้นแสดงถึงการกำหนดลักษณะของ REST และสร้างความแตกต่างของสถาปัตยกรรม REST จากสถาปัตยกรรมอื่น ๆ เช่นบริการบนเว็บ มันจะมีประโยชน์ที่จะต้องทราบว่าบริการ REST เป็นบริการเว็บ แต่บริการเว็บไม่จำเป็นต้องเป็นบริการ REST

ดูโพสต์บล็อกนี้ในหลักการออกแบบ RESTสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับRESTและสัญลักษณ์แสดงหัวข้อย่อยที่ระบุไว้ด้านบน


แค่คิดว่ามันน่าจะเป็น HATEOAS โดยสิ้นเชิงที่จะขอทรัพยากร RESTful และรับการตอบกลับซึ่งรวมถึงลิงค์ไปยัง WSDL เพื่ออธิบายว่าการดำเนินการใดที่มีอยู่ในทรัพยากรนั้นในสถานะปัจจุบัน ถึงแม้ว่าผมเดาว่าบริการเว็บ SOAP สงบจะเป็นบิตเช่นข้ามผ่านระดับ RMM ที่ 3 และจะตรงไปยังระดับ 4 :)
สตีฟ

3
นี่เป็นคำตอบที่ดีที่สุดสำหรับการสะท้อนว่าไม่ได้เป็น / หรือกับ REST และ SOAP +1 สำหรับการสังเกตส่วนที่เหลือที่มีสไตล์
ABMagil

12

ฉันชอบคำตอบของ Brian R. Bondy ฉันแค่อยากจะเพิ่มที่วิกิพีเดียให้คำอธิบายที่ชัดเจนของREST บทความแตกต่างจาก SOAP

REST เป็นการแลกเปลี่ยนข้อมูลสถานะทำได้ง่ายที่สุด

SOAP เป็นโปรโตคอลข้อความที่ใช้ XML

หนึ่งในเหตุผลหลักที่ผู้คนจำนวนมากย้ายจาก SOAP เป็น REST ก็คือมาตรฐาน WS- * (เรียกว่า WS splat) ที่เกี่ยวข้องกับบริการเว็บที่ใช้ SOAP นั้นมีความซับซ้อนอย่างมาก ดูวิกิพีเดียสำหรับรายการข้อกำหนด ข้อมูลจำเพาะแต่ละข้อมีความซับซ้อนมาก

แก้ไข: ด้วยเหตุผลบางอย่างลิงค์ไม่แสดงอย่างถูกต้อง REST = http://en.wikipedia.org/wiki/REST

WS- * = http://en.wikipedia.org/wiki/WS- *


SOAP ไม่ใช่โปรโตคอล SOAP เกี่ยวกับการเข้ารหัส SOAP ถูกใช้กับโปรโตคอลจำนวนมาก: JMS, http, ...
koppor

16
@ koppor คุณหมายถึงความจริงที่ว่ามันเป็น "Simple Object Access Protocol" หรือไม่? นอกจากนี้คุณรู้หรือไม่ว่าโปรโตคอลคืออะไร โปรโตคอลนั้นเป็นชุดของกฎว่าควรสื่อสารสองสิ่งหรือมากกว่านั้นซึ่งเป็นสิ่งที่ SOAP ใช้เพื่อเป็นวิธีมาตรฐานในการสื่อสาร
kyrias

4
@Demizey คุณอ้างถึง SOAP เวอร์ชันล่าสุดซึ่งเป็น 1.2? w3.org/TR/soap12-part1 "SOAP" ในตอนนี้ย่อมาจากของตัวเองเช่นเดียวกับในทางปฏิบัติมันไม่ได้ใช้เป็นโปรโตคอล "SOAP 1.2 จะไม่ใช้คำย่อ" ( w3.org/TR/2007/REC-soap12-part0-20070427/#L4697 ) คุณทราบถึงเลเยอร์ของ Web Service stack ดังที่อธิบายไว้ใน Book "สถาปัตยกรรมแพลตฟอร์มบริการเว็บ: Soap, Wsdl, Ws -Policy, Ws-Addressing, Ws-Bpel, Ws- การส่งข้อความที่เชื่อถือได้และอื่น ๆ "? การสื่อสารผ่านเลเยอร์ขนส่งทำได้ผ่าน HTTP, SMTP, RMI / IIOP, JMS หรืออื่น ๆ SOAP ใช้ในเลเยอร์การส่งข้อความ
koppor

ตามแนวของการเชื่อมต่อ SOAP ตัวกลางหลายคนอาจอยู่ระหว่าง สิ่งนี้ถูกเปิดใช้งานโดยโมเดลการประมวลผล SOAP ซึ่งแยกแยะระหว่างตัวรับ SOAP ขั้นสุดท้ายและศูนย์ SOAP ตัวกลางหรือมากกว่า โปรโตคอลการขนส่งอาจมีการเปลี่ยนแปลงในระหว่าง เส้นทางข้อความ SOAP ยังช่วยให้การนำรูปแบบ EAI ไปใช้อย่างโปร่งใส ( eaipatterns.com )
koppor

12
มันยังคงเป็นโปรโตคอลการส่งข้อความ
kyrias

7

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

สบู่

SOAP ("ง่าย" โปรโตคอลการเข้าถึงวัตถุ) เป็นโปรโตคอล (และมาตรฐาน W3C ) มันกำหนดวิธีการสร้างส่งและประมวลผลข้อความสบู่

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

  • ข้อความ SOAP จะเดินทางเป็นข้อความ HTTP ที่มีประเภทย่อย SOAP + XML MIME ข้อความ HTTP เหล่านี้สามารถเป็นส่วนได้หลายทางเลือกดังนั้นเราสามารถแนบไฟล์กับข้อความ SOAP

  • เห็นได้ชัดว่าเราใช้สถาปัตยกรรมไคลเอนต์ - เซิร์ฟเวอร์ดังนั้นลูกค้า SOAP ส่งคำขอไปยังเว็บเซิร์ฟเวอร์ SOAP และบริการส่งคำตอบกลับไปยังลูกค้า เว็บเซอร์ส่วนใหญ่ใช้ไฟล์ WSDL เพื่ออธิบายบริการ ไฟล์ WSDL มี XML Schema (XSD ต่อจากนี้) ของข้อมูลที่เราต้องการส่งและการเชื่อมโยง WSDL ซึ่งกำหนดวิธีการที่เว็บเซอร์ถูกผูกไว้กับโปรโตคอล HTTP มีสองรูปแบบที่มีผลผูกพัน: RPC และเอกสาร โดยการโยงลักษณะ RPC เนื้อความ SOAP จะมีการแสดงการเรียกใช้การดำเนินการด้วยพารามิเตอร์ (คำร้องขอ HTTP) หรือค่าส่งคืน (การตอบกลับ HTTP) พารามิเตอร์และค่าส่งคืนได้รับการตรวจสอบกับ XSD โดยลักษณะเอกสารที่มีผลผูกพันร่างกาย SOAP มีเอกสาร XML ซึ่งมีการตรวจสอบกับ XSD ฉันคิดว่ารูปแบบการรวมเอกสารนั้นเหมาะสมกับระบบที่ใช้เหตุการณ์เป็นหลัก แต่ฉันไม่เคยใช้รูปแบบการผูกนั้น ลักษณะการโยง RPC นั้นแพร่หลายมากขึ้นดังนั้นคนส่วนใหญ่ใช้ SOAP สำหรับวัตถุประสงค์ XML / RPC โดยแอปพลิเคชันแบบกระจาย เว็บเซอร์มักจะพบกันโดยขอเซิร์ฟเวอร์UDDI เซิร์ฟเวอร์ UDDI เป็นการลงทะเบียนซึ่งเก็บตำแหน่งของเว็บเซอร์

สบู่ RPC

ดังนั้น - ในความคิดของฉัน - เว็บเซอร์วิส SOAP ที่แพร่หลายที่สุดใช้สไตล์การผูก RPC และการเข้ารหัสตามตัวอักษรและมีคุณสมบัติดังต่อไปนี้:

  • มันแมป URL กับการดำเนินงาน
  • มันส่งข้อความด้วยชนิดย่อย SOAP + XML MIME
  • มันสามารถมีร้านเซสชั่นฝั่งเซิร์ฟเวอร์ไม่มีข้อ จำกัด เกี่ยวกับเรื่องนั้น
  • ไดรเวอร์ไคลเอนต์ SOAP ใช้ไฟล์ WSDL ของบริการเพื่อแปลงการดำเนินงาน RPC เป็นวิธีการ แอปพลิเคชันฝั่งไคลเอ็นต์สื่อสารกับเว็บเซอร์วิส SOAP โดยเรียกวิธีการเหล่านี้ ดังนั้นไคลเอนต์ SOAP ส่วนใหญ่จะแยกตามการเปลี่ยนแปลงอินเทอร์เฟซ (ชื่อเมธอดที่เป็นผลลัพธ์และ / หรือการเปลี่ยนแปลงพารามิเตอร์)
  • มีความเป็นไปได้ที่จะเขียน SOAP ไคลเอ็นต์ซึ่งจะไม่แตกโดยการเปลี่ยนแปลงอินเตอร์เฟสโดยใช้ RDF และค้นหาการดำเนินการตามความหมาย แต่webservice ความหมายนั้นหายากมากและพวกเขาไม่จำเป็นต้องมีไคลเอ็นต์ที่ไม่ทำลาย

ส่วนที่เหลือ

REST (Representational State Transfer) เป็นรูปแบบสถาปัตยกรรมที่อธิบายไว้ในวิทยานิพนธ์ของ Roy Fielding ไม่กังวลเกี่ยวกับโปรโตคอลเช่น SOAP มันเริ่มต้นด้วยรูปแบบสถาปัตยกรรมแบบ null โดยไม่มีข้อ จำกัด และกำหนดข้อ จำกัด ของสถาปัตยกรรม REST ทีละตัว คนใช้ระยะสงบสำหรับ webservices ซึ่งตอบสนองทุกความ จำกัด ส่วนที่เหลือ แต่ตามรอยฟิลดิงไม่มีสิ่งต่างๆเช่นระดับ REST เมื่อเว็บเซอร์ไม่พบกับข้อ จำกัด ของ REST ทุก ๆ ครั้งมันจะไม่ใช่เว็บเซอร์ของ REST

ข้อ จำกัด ส่วนที่เหลือ

  • ลูกค้า - สถาปัตยกรรมเซิร์ฟเวอร์ - ฉันคิดว่าทุกคนคุ้นเคยกับส่วนนี้ ไคลเอ็นต์ REST สื่อสารกับ REST webservices เว็บเซอร์จะรักษาข้อมูลทั่วไป - สถานะทรัพยากรต่อจากนี้ - และให้บริการกับลูกค้า
  • ไร้สัญชาติ - ส่วน "การโอนสถานะ" ของตัวย่อ: REST ลูกค้ารักษาสถานะไคลเอนต์ (สถานะเซสชัน / แอปพลิเคชัน) ดังนั้นบริการต้องไม่มีที่เก็บข้อมูลเซสชัน ลูกค้าโอนส่วนที่เกี่ยวข้องของสถานะลูกค้าโดยทุกคำขอไปยังบริการที่ตอบสนองกับส่วนที่เกี่ยวข้องของสถานะทรัพยากร (ดูแลโดยพวกเขา) ดังนั้นคำขอไม่มีบริบทจึงมีข้อมูลที่จำเป็นในการประมวลผลเสมอ ตัวอย่างเช่นโดย HTTP การตรวจสอบขั้นพื้นฐานชื่อผู้ใช้และรหัสผ่านจะถูกเก็บไว้โดยลูกค้าและมันจะส่งพวกเขาพร้อมกับทุกคำขอ สิ่งนี้แตกต่างจาก webapplications ทั่วไปที่มีการตรวจสอบสิทธิ์เกิดขึ้นจากการเข้าสู่ระบบเท่านั้น เราสามารถใช้กลไกการจัดเก็บข้อมูลด้านลูกค้าเช่นในหน่วยความจำ (จาวาสคริปต์), คุกกี้, localStorage และอื่น ๆ ... เพื่อยืนยันบางส่วนของสถานะไคลเอนต์ถ้าเราต้องการ เหตุผลของข้อ จำกัด เกี่ยวกับการไร้สัญชาติที่เซิร์ฟเวอร์มีขนาดที่ดี - แม้จะมีการโหลดสูงมาก (ผู้ใช้นับล้าน) - เมื่อไม่จำเป็นต้องดูแลเซสชันของไคลเอนต์เดี่ยวทุกตัว
  • แคช - การตอบสนองจะต้องมีข้อมูลเกี่ยวกับมันสามารถถูกแคชโดยลูกค้าหรือไม่ สิ่งนี้ช่วยปรับปรุงความสามารถในการขยายเพิ่มเติม
  • ชุดอินเตอร์เฟส

    • การระบุทรัพยากร - ทรัพยากร REST เหมือนกับทรัพยากรRDF ตาม Fielding ถ้าคุณสามารถตั้งชื่อบางอย่างได้มันอาจเป็นทรัพยากรตัวอย่างเช่น "สภาพอากาศในท้องถิ่นปัจจุบัน" สามารถเป็นทรัพยากรได้หรือ "โทรศัพท์มือถือของคุณ" สามารถเป็นทรัพยากรได้หรือ "เอกสารเว็บเฉพาะ" ทรัพยากร ในการระบุทรัพยากรคุณสามารถใช้ตัวระบุทรัพยากร: URL และ URNs (เช่นหมายเลข ISBN โดยหนังสือ ) ตัวระบุเดียวควรอยู่เฉพาะกับทรัพยากรที่เฉพาะเจาะจง แต่ทรัพยากรเดียวสามารถมีตัวบ่งชี้จำนวนมากซึ่งเรามักใช้ประโยชน์เช่นโดยการแบ่งหน้ามี URL https://example.com/api/v1/users?offset=50&count=25เช่น URL มีข้อกำหนดบางอย่างตัวอย่างเช่น URL ที่มีเส้นทางเดียวกัน แต่แบบสอบถามที่แตกต่างกันไม่เหมือนกันหรือส่วนเส้นทางควรมีข้อมูลแบบลำดับชั้นของ URL และส่วนแบบสอบถามควรมีข้อมูลที่ไม่ใช่ลำดับชั้น นี่คือพื้นฐานของวิธีการสร้าง URL โดย REST Btw โครงสร้าง URL นั้นสำคัญสำหรับนักพัฒนาบริการเท่านั้นไคลเอ็นต์ REST จริงไม่เกี่ยวข้องกับมัน อีกคำถามที่ถามบ่อยคือการกำหนดเวอร์ชัน API ซึ่งเป็นคำถามที่ง่ายเพราะตาม Fielding สิ่งเดียวที่คงที่โดยทรัพยากรคือซีแมนทิกส์ หากซีแมนทิกส์เปลี่ยนคุณสามารถเพิ่มหมายเลขเวอร์ชันใหม่ได้ คุณสามารถใช้การกำหนดเวอร์ชันคลาสสิค3 หมายเลขและเพิ่มเฉพาะหมายเลขหลักใน URL (https://example.com/api/v1/) https://example.com/api/v2/ดังนั้นโดยย้อนกลับการเปลี่ยนแปลงที่เข้ากันได้ไม่มีอะไรเกิดขึ้นจากการเปลี่ยนแปลงที่เข้ากันได้ย้อนหลังไม่ใช่คุณจะมีความหมายที่ไม่เข้ากันได้ย้อนหลังกับรากใหม่ API ดังนั้นลูกค้าเก่าจะไม่แตกเพราะพวกเขาสามารถใช้https://example.com/api/v1/กับความหมายเก่า
    • การจัดการทรัพยากรผ่านการเป็นตัวแทน - คุณสามารถจัดการข้อมูลที่เกี่ยวข้องกับทรัพยากร (สถานะทรัพยากร) โดยการส่งการเป็นตัวแทนที่ต้องการของทรัพยากร - พร้อมกับวิธีการ HTTP และตัวระบุทรัพยากร - ไปยังบริการ REST ตัวอย่างเช่นหากคุณต้องการเปลี่ยนชื่อผู้ใช้หลังการแต่งงานคุณสามารถส่งPATCH https://example.com/api/v1/users/1 {name: "Mrs Smith"}คำขอโดยที่การ{name: "Mrs Smith"}แสดงของ JSON ของสถานะทรัพยากรที่ตั้งใจไว้คืออีกชื่อใหม่ สิ่งนี้เกิดขึ้นในทางกลับกันบริการส่งการมอบทรัพยากรให้ลูกค้าเพื่อเปลี่ยนสถานะของพวกเขา ตัวอย่างเช่นหากเราต้องการอ่านชื่อใหม่เราสามารถส่งGET https://example.com/api/v1/users/1?fields="name"คำขอดึงข้อมูลซึ่งส่งผลให้200 ok, {name: "Mrs Smith"}คำตอบ ดังนั้นเราจึงสามารถใช้การเป็นตัวแทนนี้เพื่อเปลี่ยนสถานะลูกค้าตัวอย่างเช่นเราสามารถแสดง "ยินดีต้อนรับสู่หน้าของเรา Mrs Smith!" ข่าวสาร ทรัพยากรสามารถมีการรับรองมากมายขึ้นอยู่กับตัวระบุทรัพยากร (URL) หรือacceptส่วนหัวที่เราส่งไปพร้อมกับคำขอ ตัวอย่างเช่นเราสามารถส่งภาพของ Mrs Smith (อาจจะไม่ใช่ภาพเปลือย) หากimage/jpegมีการร้องขอ
    • ข้อความอธิบายตนเอง - ข้อความต้องมีข้อมูลเกี่ยวกับวิธีดำเนินการ ตัวอย่างเช่นวิธี URI และ HTTP, ส่วนหัวของชนิดเนื้อหา, ส่วนหัวของแคช, RDF ซึ่งอธิบายความหมายของข้อมูล, ฯลฯ ... มันเป็นสิ่งสำคัญที่จะใช้วิธีการมาตรฐาน สิ่งสำคัญคือต้องทราบข้อกำหนดของวิธีการ HTTP ตัวอย่างเช่น GET หมายถึงการดึงข้อมูลที่ระบุโดย URL คำขอ DELETE หมายถึงการขอให้เซิร์ฟเวอร์ลบทรัพยากรที่ระบุโดย URL ที่กำหนดเป็นต้น ... รหัสสถานะ HTTP มีข้อกำหนดเช่นกันเช่น 200 หมายถึงสำเร็จ 201 หมายถึง มีการสร้างทรัพยากรใหม่ 404 หมายความว่าไม่พบทรัพยากรที่ร้องขอบนเซิร์ฟเวอร์ ฯลฯ ... การใช้มาตรฐานที่มีอยู่เป็นส่วนสำคัญของ REST
    • Hypermedia เป็นเอ็นจินของสถานะแอปพลิเคชัน (HATEOAS ต่อจากนี้) - Hypermedia เป็นประเภทสื่อที่สามารถมีไฮเปอร์ลิงก์ โดยเว็บเราตามลิงค์ - อธิบายโดยรูปแบบสื่อสิ่งพิมพ์ (ปกติคือ HTML) - เพื่อให้บรรลุเป้าหมายแทนที่จะพิมพ์ URL ลงในแถบที่อยู่ ส่วนที่เหลือเป็นไปตามแนวคิดเดียวกันการรับรองที่ส่งโดยบริการสามารถมีการเชื่อมโยงหลายมิติ เราใช้ไฮเปอร์ลิงก์เหล่านี้เพื่อส่งคำขอไปยังบริการ ด้วยการตอบสนองเราได้รับข้อมูล (และอาจมีลิงก์มากกว่า) ซึ่งเราสามารถใช้ในการสร้างสถานะไคลเอนต์ใหม่และอื่น ๆ ... นั่นคือเหตุผลที่ไฮเปอร์มีเดียเป็นกลไกของสถานะแอปพลิเคชัน (สถานะลูกค้า) คุณอาจสงสัยว่าลูกค้าจดจำและติดตามไฮเปอร์ลิงก์ได้อย่างไร โดยมนุษย์มันค่อนข้างง่ายเราอ่านชื่อของลิงก์อาจเติมฟิลด์อินพุตและหลังจากนั้นเพียงคลิกเดียวJSON-LDกับHydra ) หรือกับโซลูชันเฉพาะของสื่อหลายมิติ (ตัวอย่างเช่นการเชื่อมโยงของ IANAและประเภท MIME เฉพาะของผู้ขายโดยHAL + JSON ) มีหลายรูปแบบXMLและJSON ไฮเปอร์มีเดียที่สามารถอ่านได้ของเครื่องมีเพียงรายการสั้น ๆ :

      บางครั้งมันก็ยากที่จะเลือก ...

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

REST webservice - SOAP RPC webservice

ดังนั้นเว็บเซอร์ REST จึงแตกต่างจาก SOAP webservice (ด้วยสไตล์การผูก RPC และการเข้ารหัสตามตัวอักษร)

  • มันกำหนดอินเทอร์เฟซที่เหมือนกัน (intead ของโปรโตคอล)
  • มันแมป URL กับทรัพยากร (และไม่ดำเนินการ)
  • มันส่งข้อความที่มีประเภท MIME ใด ๆ (แทนที่จะเป็นเพียง SOAP + XML)
  • มีการสื่อสารที่ไร้สัญชาติดังนั้นจึงไม่มีที่เก็บข้อมูลเซสชันฝั่งเซิร์ฟเวอร์ (SOAP ไม่มีข้อ จำกัด เกี่ยวกับเรื่องนี้)
  • มันทำหน้าที่สื่อสิ่งพิมพ์และลูกค้าใช้ลิงค์ที่มีอยู่ในสื่อสิ่งพิมพ์นั้นเพื่อขอบริการ (SOAP RPC ใช้การเชื่อมโยงการดำเนินการที่อธิบายไว้ในไฟล์ WSDL)
  • มันไม่ได้แบ่งตามการเปลี่ยนแปลง URL โดยการเปลี่ยนแปลงความหมายเท่านั้น (ไคลเอ็นต์ SOAP RPC โดยไม่ใช้การหยุดพัก semantics RDF โดยการเปลี่ยนแปลงไฟล์ WSDL)
  • มันชั่งได้ดีกว่าเว็บเซอร์วิส SOAP เนื่องจากพฤติกรรมไร้สัญชาติ

และอื่น ๆ ...

เว็บเซอร์วิส SOAP RPC ไม่ตรงตามข้อ จำกัด REST ทั้งหมด:

  • สถาปัตยกรรมไคลเอนต์ - เซิร์ฟเวอร์เสมอ
  • ไร้สัญชาติ - เป็นไปได้
  • แคช - เป็นไปได้
  • อินเตอร์เฟซที่เหมือนกัน - ไม่เคย
  • ระบบเลเยอร์ - ไม่เคย
  • รหัสตามต้องการ (เป็นทางเลือก) - เป็นไปได้

6

ฉันจะเริ่มด้วยคำถามที่สอง: Web Services คืออะไร ด้วยเหตุผลที่ชัดเจน

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

ลิงค์ต่อไปนี้บอกว่าทั้งหมดนี้เกี่ยวกับREST & SOAPในลักษณะที่ชัดเจนมาก

REST กับสบู่

หากคุณต้องการทราบว่าจะเลือก (REST หรือ SOAP) เมื่อใดควรเลือกเหตุผลอื่น ๆ เพิ่มเติม!


5

SOAP และ REST อ้างถึงวิธีที่ระบบต่าง ๆ จะพูดคุยซึ่งกันและกัน

ส่วนที่เหลือทำสิ่งนี้โดยใช้เทคนิคที่คล้ายกับการสื่อสารที่เบราว์เซอร์ของคุณมีกับเว็บเซิร์ฟเวอร์: ใช้ GET เพื่อขอหน้าเว็บโพสต์ในฟิลด์แบบฟอร์ม ฯลฯ

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


1
ที่มีอะไรจะทำอย่างไรกับส่วนที่เหลือเป็นเพียง 'การใช้งานที่ถูกต้องของ HTTP'
aehlke

HTTP เป็นตัวอย่างที่ดีที่สุดของระบบ RESTful
pbreitenbach

1
@pbreitenbach ไม่ HTTP ไม่ใช่โดยทั่วไปจะไม่มีความคิดของสื่อบันทึก แต่ HTML ที่มีไฮเปอร์ลิงก์และฟอร์มเป็นระบบที่สงบ อันที่จริงมันเป็นต้นแบบของข้อกำหนด 'REST'
Pavel Gatilov

SOAP ไม่ได้บังคับให้คุณใช้การเข้ารหัส XML การเข้ารหัส XML ใช้เฉพาะในกรณีที่บริการมีการทำงานร่วมกัน ภายใน POJO อาจถูกส่งโดยไม่มีการเข้ารหัสใน XML
koppor

2

ฉันคิดว่ามันง่ายเหมือนที่ฉันจะอธิบายได้ ได้โปรดใครก็ตามยินดีที่จะแก้ไขฉันหรือเพิ่มในนี้

SOAP เป็นรูปแบบข้อความที่ใช้โดยระบบที่ตัดการเชื่อมต่อ (เช่นผ่านอินเทอร์เน็ต) เพื่อแลกเปลี่ยนข้อมูล / ข้อมูล มันทำกับข้อความ XML ที่ไปและกลับ

บริการเว็บส่งหรือรับข้อความ SOAP พวกเขาทำงานแตกต่างกันไปขึ้นอยู่กับภาษาที่พวกเขาเขียน


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

บริการบนเว็บทำงานแตกต่างกันไปตามภาษาที่ใช้เขียนสิ่งเหล่านี้เป็นเพียงรายละเอียดเพิ่มเติมที่ไม่สำคัญ
StingyJack

โอเคฉันไม่แน่ใจว่าคุณกำลังพูดถึงสิ่งที่ขัดขวางการทำงานร่วมกันหรือไม่
MyItchyChin

2

ปัญหาของ SOAP คือมันขัดแย้งกับอุดมคติที่อยู่เบื้องหลัง HTTP stack มิดเดิลแวร์ใด ๆ ควรสามารถทำงานกับคำร้องขอ HTTP โดยไม่เข้าใจเนื้อหาของคำร้องขอหรือการตอบกลับ แต่ตัวอย่างเช่นเซิร์ฟเวอร์แคช HTTP ปกติจะไม่ทำงานกับคำร้องขอ SOAP โดยไม่ทราบว่าส่วนใดของเนื้อหา SOAP สำหรับการแคช SOAP ใช้ HTTP เป็น wrapper สำหรับโปรโตคอลการสื่อสารของตนเองเช่น proxy


2
มันขัดกับอุดมคติและเราเพิ่งสังเกตเห็นเท่านั้น มันมีมาตั้งแต่ปี 1998 หรือมากกว่านั้นและเราแค่หยิบมันขึ้นมา ประณามพวกเราโง่!
John Saunders

ไม่มีจอห์น "เรา" ในฐานะชุมชนนักพัฒนาเว็บที่ได้รับข้อมูลมาเป็นที่รู้จักมาโดยตลอด เป็นเพียงเด็กที่ช้าและเด็กที่มาจากโรงเรียน CS โดยไม่ได้รับการศึกษาที่เหมาะสม
Nicholas Shanks

"เรา" ไม่ใช่นักพัฒนาเว็บทั้งหมด พวกเราบางคนกำลังพยายามทำให้สิ่งที่ดีที่สุดเท่าที่จะทำได้และไม่สนใจว่าเรา "ไม่ได้ใช้ศักยภาพของเว็บอย่างเต็มที่"
John Saunders

"stupif" แค่ผลรวมมันใช่
Rob Grant

2

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


1

SOAP - "Simple Object Access Protocol"

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

REST - "การโอนย้ายสถานะของการนำเสนอ"

RESTเป็นการดำเนินการขั้นพื้นฐานของเหตุการณ์ที่ไม่แน่นอนและการรับข้อมูลระหว่างพัดลมและเซิร์ฟเวอร์และมันไม่ได้มีมาตรฐานที่กำหนดไว้มากมาย คุณสามารถส่งและรับข้อมูลเป็นJSON , XMLหรือแม้แต่ข้อความธรรมดา มันน้ำหนักเบาเมื่อเทียบกับสบู่


-4

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

เรายังสามารถเชื่อมโยง SOAP กับ XMLbased Remote Procedure Calls ได้ แต่เทคโนโลยี SOAPbased Web Services ได้กลายเป็นรูปแบบการส่งข้อความที่ยืดหยุ่นและทรงพลัง

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

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

REST - การถ่ายโอนสถานะของการนำเสนอ โปรโตคอลทางกายภาพคือ HTTP โดยทั่วไป REST คือทรัพยากรที่แตกต่างกันทั้งหมดบนเว็บที่สามารถระบุได้โดย URL การดำเนินการทั้งหมดที่สามารถดำเนินการกับทรัพยากรเหล่านี้สามารถอธิบายได้ด้วยชุดคำกริยาที่ จำกัด (กริยา“ CRUD”) ซึ่งจะเปลี่ยนแผนที่เป็นกริยา HTTP

ส่วนที่เหลือเป็น "เฮฟวี่เวท" น้อยกว่า SOAP มาก

การทำงานของบริการเว็บ


2
-1 เกือบทุกสิ่งที่คุณพูดไม่ถูกต้อง SOAP ไม่มีคำอธิบาย WSDL ทำ WSDL เป็นรูปแบบ XML - มันไม่ได้ "รัน" บนโปรโตคอลใด ๆ SOAP ไม่ต้องการมิดเดิลแวร์ REST ไม่ใช่ "บริการบนเว็บรุ่นที่สอง" WADL ไม่ใช่มาตรฐาน ดูen.wikipedia.org/wiki/Web_Application_Description_Language
John Saunders
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.