ข้อดีข้อเสียของสถาปัตยกรรมสงบ [ปิด]


20

การสนทนาที่พบบ่อยที่สุดที่ฉันเคยเห็นเกี่ยวกับข้อดีและข้อเสียของ REST มีแนวโน้มที่จะกำหนดกรอบการสนทนาที่สัมพันธ์กับ SOAP ฉันไม่มีประสบการณ์อย่างใดอย่างหนึ่ง ขณะนี้ฉันกำลังเผชิญหน้ากับการตัดสินใจซึ่งการขาดประสบการณ์ของฉันกำลังทำให้ฉันประเมินยาก ฉันเริ่มพัฒนาแอปพลิเคชั่นที่มีองค์ประกอบหลายอย่าง - ส่วนใหญ่เป็นแง่มุมการจัดการที่อนุญาตให้เจ้าของดูแลหลายไซต์ - และส่วนต่อประสานผู้ใช้สาธารณะที่อนุญาตให้ผู้ใช้โต้ตอบกับข้อมูลที่อยู่ในโฮสต์ ฉันต้องประเมินผลกระทบของการอนุญาตให้ส่วนหลังเป็นโฮสต์ที่ใดก็ได้และสื่อสารกับอดีตผ่านสถาปัตยกรรมสงบ - ​​หรือเรียกร้องให้ส่วนประกอบทั้งสองอยู่ในโฮสต์เดียวกัน อะไรคือนัยสำคัญของการพัฒนาสถาปัตยกรรม RESTful โดยเฉพาะอย่างยิ่งเมื่อคำนึงถึงความสามารถในด้านต่อไปนี้:

1: ความปลอดภัย 2: ประสิทธิภาพ 3: ความซับซ้อนของส่วนต่อประสาน

แก้ไข: ดูที่คำตอบของคำถามนี้ - ฉันควรชี้แจง ฉันไม่ได้มองหาการเปรียบเทียบกับ SOAP - เป็นภาพรวมของแอปพลิเคชัน REST และแอปพลิเคชันที่มีส่วนประกอบทั้งหมดอยู่ในโฮสต์เดียว (ขอบคุณสำหรับคำตอบเหล่านั้นแม้ว่า!)


3
แนะนำให้เปิดใหม่ คำถามนั้นเป็นเรื่องธรรมดาและชัดเจนพร้อมขอบเขตที่เหมาะสมของคำตอบที่เป็นไปได้
minghua

คำตอบ:


13

เมื่อพิจารณาถึงพื้นที่เหล่านั้นฉันสามารถให้ภาพรวมคร่าวๆ แต่ฉันไม่สามารถสรุปข้อสรุปของคุณให้คุณได้ มีสองพื้นที่หัวหน้าที่แตกต่างกันสองโปรโตคอล:

  • รูปแบบข้อความ
  • การค้นพบบริการ

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

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

แยกตามหมวดหมู่ที่คุณให้:

ความปลอดภัย

ไม่มีความปลอดภัยมากกว่าอีกแบบโดยเนื้อแท้ ใช้หลักการความปลอดภัยที่ดี:

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

จำความสับสน! = ความปลอดภัย

ประสิทธิภาพ

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

ความซับซ้อน

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

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

การตั้งค่าของฉัน

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


1
+1 สำหรับคำตอบโดยละเอียด สำหรับการติดตั้ง Java JAX-RS ที่ดีให้ใช้ RESTEasy เมื่อรวมกับบริการเว็บ JAXB ก็กลายเป็นเรื่องเล็กน้อย
Gary Rowe

2
"ส่วนที่เหลือให้คะแนนที่คาดเดาได้และเนื้อหาของคำขอเป็นคำขอ HTTP แบบง่ายประโยชน์คือไม่มีค่าใช้จ่ายเพิ่มเติมและผู้ใช้สามารถคาดเดาได้ว่าจะทำสิ่งที่ต้องการได้อย่างไรเมื่อพวกเขาเข้าใจ โครงสร้าง URL ของเว็บไซต์ของคุณ " ที่จริงแล้วมันตรงกันข้ามกับข้อ จำกัด HATEOAS ของ REST ("Hypermedia เป็น Engine ของ Application State")หากคุณกำลังพูดถึง REST อย่างเหมาะสม มีส่วนหนึ่งของผู้สนับสนุน REST ที่จะพูดคุยกับคุณเพื่อแสดงว่าการจัดวาง URL นั้นเป็นส่วนหนึ่งของ REST ฉันไม่รู้สึกอย่างนั้น แต่คนอื่น ๆ ทำ
MikeSchinkel

1
และยังมีลักษณะที่สามารถคาดการณ์ได้ของจุดสิ้นสุดทำให้การออกแบบและสร้างแอปง่ายขึ้น หมายเหตุ: เฟรมเวิร์กที่สนับสนุนแอ็พพลิเคชัน REST มีรูปแบบ URL ที่สอดคล้องกัน แต่ไม่จำเป็นต้องสอดคล้องกันจากกรอบงานไปยังกรอบงาน รูปแบบปกติของ URL นั้นเป็นเพียงเรื่องของการสร้างโปรแกรมและความสะดวกสบาย รูปแบบ URL ที่คุณเห็นในแอป Ruby on Rails นั้นคล้ายคลึงกันในการดำเนินการที่ได้รับการสนับสนุน แต่ชื่อนั้นแตกต่างกันใน ASP.NET MVC
Berin Loritsch

การทำ "ออกแบบโดย URL" เป็นวิธีที่ไม่ดีในการออกแบบ RESTful ที่ได้รับการสนับสนุนจากกรอบงานเนื่องจากเป็นเรื่องง่ายสำหรับกรอบที่จะทำเช่นนั้น อย่างไรก็ตามมันมักจะแบ่งออกไม่ดีคนที่คุณได้รับจากพฤติกรรม CRUD ปกติ
Darrel Miller

12
  1. ความปลอดภัย:ใช้ HTTPS สิ่งนี้ใช้ได้กับทั้งสอง
  2. ประสิทธิภาพ: . REST นั้นมีราคาแพงกว่า CPU (แยกวิเคราะห์น้อยกว่า marshalling, unwrapping) นอกจากนี้การแคชด้วย REST ก็เป็นเค้กชิ้นหนึ่ง
  3. ความซับซ้อน: REST ต้องการน้อยกว่ามากในแง่ของการตั้งค่าเป็นเพียง GET / POST หลังจากทั้งหมด SOAP ต้องการการดูแลรักษาที่มากขึ้น (wsdl และอื่น ๆ ) แต่จะง่ายกว่านิดหน่อยถ้า IDE ของคุณรองรับ

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

ทุกวันนี้มี REST API ที่ดีมากที่จะใช้ หากคุณเข้าสู่ Java แล้ว Jax-RS นั้นยอดเยี่ยมจริงๆ สำหรับคนบางนี้เป็นเหมือนหนังโป๊


2
+1 เพราะสบู่เป็นป่อง ส่วนที่เหลือเป็นวิธีที่จะไปแน่นอน และลิงค์สำหรับ JAX-RS นั้นแสดงให้เห็นว่าทำไม
Gary Rowe

1
มี. NET REST ที่ดีหรือไม่
BlackICE


8

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

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

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


1
+1 สำหรับ idempotency ฉันเคยเห็นมันมาก่อน แต่ไม่สามารถหามันได้จนถึงตอนนี้ ใครรู้ว่ามีการสอนเกี่ยวกับการออกแบบที่เงียบสงบในรูปแบบไฟล์ PDF กล่าวถึงมันได้หรือไม่
minghua

3

มาตรฐาน WS- * ส่วนใหญ่เกี่ยวกับการใช้ RPC ผ่าน SOAP / HTTP ดังนั้นความคิดทั้งหมดที่เข้าสู่ CORBA และ J2EE และรุ่นก่อน ๆ ของพวกเขาส่วนใหญ่ย้ายไปทำสิ่งเดียวกันใน XML ซึ่งหมายความว่าสิ่งต่าง ๆ เช่นการประกาศประเภทและสัญญาการบริการการแลกเปลี่ยนข้อมูลเมตาความปลอดภัยที่ประกาศ ฯลฯ สิ่งที่ "enterprisey" ที่แท้จริงทั้งหมด มันใช้มากเกินไปแม้ในองค์กรตรงไปตรงมา

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


แน่นอน: ประสบการณ์ของฉันเกี่ยวกับมาตรฐาน WS- * นั้นเป็นตัวอย่างที่ยอดเยี่ยมของ "มาตรฐาน" ที่การดำเนินการทุกอย่างแตกต่างและไม่เข้ากัน ทำให้เป็นเรื่องง่าย imho สำหรับบริการสาธารณะและใช้ SOAP สำหรับการสื่อสารส่วนตัวระหว่างระบบที่ทำงานบนแพลตฟอร์มเดียวกันเท่านั้น
Carson63000

0

ข้อได้เปรียบที่ยิ่งใหญ่ของ SOAP ในการใช้งาน REST ในปัจจุบันคือ SOAP นั้นได้รับการออกแบบให้ง่ายขึ้น - ไคลเอนต์ RESTful ส่วนใหญ่ต้องการให้ฉันเข้าใจอินเตอร์เฟสและเขียนไคลเอนต์บางประเภท สำหรับสบู่ฉันแค่ชี้ wsdl.exe แล้วสร้างคลาสให้ฉัน


1
เคยเขียนเครื่องมือวิปัสสนาสบู่ด้วยตัวเอง? เป็นประสบการณ์ที่ไม่พึงประสงค์ที่จะเปลี่ยนเป็น REST
pydanny

1
ไม่ แต่แพลตฟอร์มส่วนใหญ่ที่หนึ่งดู SOAP บนได้กล่าวว่าเครื่องมือวิปัสสนาสร้างขึ้น ถ้าฉันกำลังดูการสร้างหรือพักผ่อนฉันจะทำสิ่งที่เหลือ
ไวแอตต์บาร์เน็ตต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.