นกขมิ้นในเหมืองถ่านหิน
ฉันรอคำถามเช่นนี้มาเกือบปีแล้ว หลีกเลี่ยงไม่ได้ที่วันนี้จะมาถึงและฉันมั่นใจว่าเราจะเห็นคำถามอื่น ๆ อีกมากมายเช่นนี้ในอีกไม่กี่เดือนข้างหน้า
สัญญาณเตือนภัย
คุณถูกต้องอย่างแท้จริงมันใช้เวลานานในการสร้าง RESTful clients มากกว่า SOAP clients ชุดเครื่องมือ SOAP จะใช้รหัสสำเร็จรูปจำนวนมากและทำให้ไคลเอ็นต์พรอกซีออบเจ็กต์พร้อมใช้งานโดยแทบไม่ต้องใช้ความพยายามใด ๆ ด้วยเครื่องมือเช่น Visual Studio และ URL เซิร์ฟเวอร์ฉันสามารถเข้าถึงวัตถุระยะไกลที่มีความซับซ้อนตามอำเภอใจภายในเวลาไม่ถึงห้านาที
บริการที่ส่งคืนแอปพลิเคชัน / xml และ application / json นั้นน่ารำคาญสำหรับผู้พัฒนาไคลเอ็นต์ เราควรทำอย่างไรกับหยดข้อมูลนั้น
โชคดีที่เว็บไซต์จำนวนมากที่ให้บริการ REST ยังมีห้องสมุดลูกค้าจำนวนมากเพื่อให้เราสามารถใช้ห้องสมุดเหล่านั้นเพื่อเข้าถึงวัตถุที่พิมพ์อย่างรุนแรง ดูเหมือนว่าจะเป็นคนโง่ ถ้าพวกเขาใช้ SOAP พวกเราอาจมีโค้ดพร็อกซีคลาสเหล่านั้นเอง
สบู่โสหุ้ย มันแฝงที่ฆ่า หากผู้คนกังวลเกี่ยวกับจำนวนไบต์ที่มากเกินไปที่จะผ่านสายดังนั้น HTTP อาจไม่ใช่ตัวเลือกที่ถูกต้อง คุณเคยเห็นว่ามีผู้ใช้ส่วนหัว - เอเจนต์จำนวนไบต์กี่ไบต์?
ใช่คุณเคยลองใช้เว็บเบราว์เซอร์เป็นเครื่องมือแก้จุดบกพร่องสำหรับสิ่งอื่นที่ไม่ใช่ HTML และ javascript หรือไม่ เชื่อฉันสิมันดูด คุณสามารถใช้กริยาสองตัวเท่านั้นการแคชกำลังดำเนินไปเรื่อย ๆ การจัดการข้อผิดพลาดกลืนข้อมูลมากมายมันกำลังมองหา favicon.ico ที่อันตรายอยู่ตลอดเวลา แค่ยิงฉัน
URL ที่อ่านได้ คำนามเท่านั้นไม่มีคำกริยา ใช่มันเป็นเรื่องง่ายตราบใดที่เรากำลังดำเนินการ CRUD เท่านั้นและเราจำเป็นต้องเข้าถึงลำดับชั้นของวัตถุด้วยวิธีเดียว น่าเสียดายที่แอพพลิเคชั่นส่วนใหญ่ต้องการฟังก์ชั่นมากกว่านั้น
ภัยพิบัติที่ใกล้เข้ามา
มีนักพัฒนาซอฟต์แวร์จำนวนมากที่กำลังพัฒนาแอปพลิเคชั่นที่รวมเข้ากับบริการ REST ซึ่งกำลังอยู่ในขั้นตอนการสรุปชุดเดียวกันกับที่คุณมี พวกเขาได้รับสัญญาว่าความเรียบง่ายความยืดหยุ่นการปรับขยายได้วิวัฒนาการและจอกศักดิ์สิทธิ์ของการใช้ซ้ำโดยบังเอิญ ลักษณะของเว็บเองสิ่งต่าง ๆ จะผิดพลาดได้อย่างไร
อย่างไรก็ตามพวกเขาพบว่าการกำหนดเวอร์ชันเป็นปัญหามาก แต่คอมไพเลอร์ไม่ได้ช่วยตรวจจับปัญหา รหัสลูกค้าที่เขียนด้วยมือถือเป็นความเจ็บปวดในการรักษาเนื่องจากโครงสร้างข้อมูลมีวิวัฒนาการและ URL จะได้รับการปรับโครงสร้างใหม่ การออกแบบ APIs โดยใช้คำนามและคำกริยาสี่คำนั้นยากมากโดยเฉพาะอย่างยิ่ง Zealots RESTful Url ที่จะบอกคุณว่าคุณสามารถและไม่สามารถใช้สตริงการสืบค้นได้
นักพัฒนากำลังจะเริ่มถามว่าทำไมเราถึงพยายามสนับสนุนทั้งรูปแบบ Json และรูปแบบ Xml ทำไมไม่เพียง แต่มุ่งเน้นความพยายามของเราไปที่หนึ่งและทำมันได้ดี?
สิ่งต่าง ๆ เกิดขึ้นได้อย่างไร
ฉันจะบอกคุณว่ามีอะไรผิดปกติ เราในฐานะนักพัฒนาให้ฝ่ายการตลาดใช้ประโยชน์จากจุดอ่อนหลักของเรา การค้นหานิรันดร์ของเราสำหรับกระสุนเงินทำให้เราตาบอดต่อความเป็นจริงของ REST ที่แท้จริง บนพื้นผิวส่วนที่เหลือดูเหมือนง่ายและเรียบง่าย ตั้งชื่อทรัพยากรของคุณด้วย Urls และใช้ GET, PUT, POST และ DELETE นรกเรา devs รู้อยู่แล้วว่าจะทำอย่างไรเราได้รับการจัดการกับฐานข้อมูลสำหรับปีที่มีตารางและคอลัมน์และคำสั่ง SQL ที่มี SELECT, INSERT, UPDATE และ DELETE มันควรจะเป็นเค้กชิ้นหนึ่ง
มีส่วนอื่น ๆ ของ REST ที่บางคนพูดถึงเช่นการอธิบายตัวเองและข้อ จำกัด ของสื่อหลายมิติ แต่ข้อ จำกัด เหล่านี้ไม่ง่ายอย่างการระบุทรัพยากรและอินเตอร์เฟสแบบอินเทอร์เฟซ ดูเหมือนว่าจะเพิ่มความซับซ้อนซึ่งเป้าหมายที่ต้องการคือความเรียบง่าย
REST เวอร์ชันที่ถูกลดทอนลงนี้ได้รับการตรวจสอบในวัฒนธรรมนักพัฒนาซอฟต์แวร์ในหลาย ๆ ด้าน เฟรมเวิร์กเซิร์ฟเวอร์ถูกสร้างขึ้นที่สนับสนุนการระบุทรัพยากรและส่วนต่อประสานที่เหมือนกัน แต่ไม่ได้ทำอะไรเลยเพื่อสนับสนุนข้อ จำกัด อื่น ๆ ข้อตกลงเริ่มลอยไปรอบ ๆ สร้างความแตกต่างของวิธีการ (HI-REST กับ LO-REST, Corporate REST เทียบกับ REST เชิงวิชาการ, REST และ RESTful)
มีบางคนที่กรีดร้องออกมาว่าถ้าคุณไม่ได้ใช้ข้อ จำกัด ทั้งหมดมันก็ไม่ใช่ REST คุณจะไม่ได้รับผลประโยชน์ ไม่มีการพักครึ่ง แต่เสียงเหล่านั้นถูกตราหน้าว่าเป็นความกระตือรือร้นทางศาสนาที่ไม่พอใจที่คำล้ำค่าของพวกเขาถูกขโมยไปจากความสับสนและทำให้เป็นกระแสหลัก คนอิจฉาที่พยายามทำให้ REST ฟังดูยากขึ้นกว่าเดิม
REST คำนี้กลายเป็นกระแสหลักอย่างแน่นอน เกือบทุกพื้นที่เว็บหลักที่มี API รองรับ "REST" Twitter และ Netflix เป็นโพรไฟล์ที่สูงมากสองรายการ สิ่งที่น่ากลัวคือฉันสามารถนึกถึง API สาธารณะเดียวที่อธิบายตัวเองได้และมีกำมือที่ใช้ข้อ จำกัด ของสื่อสิ่งพิมพ์อย่างแท้จริง แน่นอนว่าบางไซต์เช่น StackOverflow และ Gowalla สนับสนุนลิงก์ในการตอบกลับ แต่มีช่องโหว่ขนาดใหญ่ในลิงก์ของพวกเขา StackOverflow API ไม่มีหน้ารูต ลองนึกภาพว่าเว็บไซต์จะประสบความสำเร็จได้อย่างไรหากไม่มีหน้าแรกสำหรับเว็บไซต์!
คุณเข้าใจผิดฉันกลัว
หากคุณทำไปได้มากคำตอบสั้น ๆ สำหรับคำถามของคุณก็คือ APIs เหล่านั้น (Netflix และ Twitter) ไม่สอดคล้องกับข้อ จำกัด ทั้งหมดดังนั้นคุณจะไม่ได้รับผลประโยชน์ที่ apis REST ควรนำมาใช้
ไคลเอนต์ REST ใช้เวลาในการสร้างนานกว่าไคลเอ็นต์ SOAP แต่ไม่ได้เชื่อมโยงกับบริการหนึ่งเดียวดังนั้นคุณควรจะสามารถใช้งานซ้ำได้ในบริการต่างๆ ยกตัวอย่างคลาสสิกของเว็บเบราว์เซอร์ เว็บเบราว์เซอร์สามารถเข้าถึงบริการได้กี่บริการ แล้ว Feed Reader ล่ะ? ตอนนี้จำนวนเฉลี่ยของการเข้าถึงไคลเอนต์ Twitter สามารถเข้าถึงบริการที่แตกต่างกันจำนวนเท่าใด ใช่เพียงหนึ่งเดียว
ไคลเอ็นต์ REST ไม่ควรถูกสร้างขึ้นเพื่อเชื่อมต่อกับบริการเดียว แต่ควรสร้างขึ้นเพื่อจัดการกับชนิดสื่อเฉพาะที่สามารถให้บริการได้โดยบริการใด ๆ คำถามที่ชัดเจนคือคุณจะสร้างไคลเอนต์ REST สำหรับบริการที่ส่งมอบ application / json หรือ application / xml ได้อย่างไร คุณทำไม่ได้ นั่นเป็นเพราะรูปแบบเหล่านั้นไร้ประโยชน์อย่างสมบูรณ์สำหรับลูกค้า REST คุณพูดด้วยตัวเอง
คุณต้อง "เดา" ว่าอะไรจะกลับมาที่ท่อเนื่องจากไม่มีสคีมาหรือเอกสารอ้างอิงจริง
คุณถูกต้องอย่างแน่นอนสำหรับบริการเช่น Twitter อย่างไรก็ตามข้อ จำกัด ที่อธิบายตัวเองใน REST บอกว่าส่วนหัวของชนิดเนื้อหา HTTP ควรอธิบายเนื้อหาที่ถูกส่งผ่านสาย การนำเสนอแอปพลิเคชัน / json และ application / xml ไม่ได้บอกอะไรเกี่ยวกับเนื้อหา
เมื่อพิจารณาถึงประสิทธิภาพของระบบที่ใช้ REST เป็นสิ่งที่จำเป็นในการมองภาพรวมที่ใหญ่ขึ้น การพูดเกี่ยวกับไบต์ของซองจดหมายก็เหมือนกับการพูดถึงการวนรอบคลี่คลายเมื่อเปรียบเทียบการเรียงลำดับแบบเร็วกับการเรียงลำดับแบบเชลล์ มีสถานการณ์ที่ SOAP สามารถทำงานได้ดีขึ้นและมีสถานการณ์ที่ REST สามารถทำงานได้ดีขึ้น บริบทคือทุกสิ่ง
ส่วนที่เหลือได้รับประโยชน์จากประสิทธิภาพการทำงานมากโดยมีความยืดหยุ่นมากเกี่ยวกับประเภทสื่อที่สนับสนุนและมีการสนับสนุนการแคชขั้นสูง สำหรับการแคชทำงานได้ดีแม้ว่าข้อ จำกัด เกือบทั้งหมดจะต้องปฏิบัติตาม
จุดสุดท้ายของคุณเกี่ยวกับ URL ที่อ่านได้คือสิ่งที่น่าขันที่สุด หากคุณยอมรับข้อ จำกัด ของไฮเปอร์มีเดียอย่างแท้จริงทุก URL อาจเป็น GUID และนักพัฒนาไคลเอ็นต์จะไม่เสียสิ่งใดในการอ่าน
ความจริงที่ว่า URIs ควรทึบแสงให้กับลูกค้าเป็นหนึ่งในสิ่งสำคัญที่สุดในการพัฒนาระบบ REST URL ที่อ่านได้สะดวกสำหรับผู้พัฒนาเซิร์ฟเวอร์และ URL ที่มีโครงสร้างที่ดีช่วยให้เฟรมเวิร์กเซิร์ฟเวอร์จัดส่งคำขอได้ง่ายขึ้น แต่สิ่งเหล่านี้คือรายละเอียดการนำไปปฏิบัติ
Twitter API นั้นไม่ได้ใกล้เคียงกับ RESTful และนั่นคือสาเหตุที่คุณไม่สามารถเห็นประโยชน์ใด ๆ ในการใช้งานผ่าน SOAP Netflix API นั้นใกล้เข้ามามาก แต่การใช้สื่อประเภททั่วไปแสดงให้เห็นว่าการไม่ปฏิบัติตามแม้กระทั่งข้อ จำกัด เพียงอย่างเดียวก็อาจส่งผลกระทบอย่างลึกซึ้งต่อผลประโยชน์ที่ได้จากบริการ
อาจไม่ใช่ความผิดทั้งหมดของพวกเขา
ฉันทำการทุ่มตลาดกับผู้ให้บริการเป็นจำนวนมาก แต่ใช้เวลาสองอย่างในการเต้นรำอย่างสงบ บริการอาจปฏิบัติตามข้อ จำกัด อย่างเคร่งครัดและลูกค้ายังสามารถยกเลิกผลประโยชน์ทั้งหมดได้อย่างง่ายดาย
หากรหัสฮาร์ไคลเอนต์ urls เพื่อเข้าถึงทรัพยากรบางประเภทก็จะป้องกันเซิร์ฟเวอร์จากการเปลี่ยน URL เหล่านั้น การสร้าง URL ประเภทใดก็ตามโดยอาศัยความรู้โดยนัยว่าโครงสร้างบริการ URL นั้นเป็นการละเมิดอย่างไร
การตั้งสมมติฐานเกี่ยวกับประเภทของการแสดงที่จะถูกส่งคืนจากลิงก์สามารถนำไปสู่ปัญหาได้ การตั้งสมมติฐานเกี่ยวกับเนื้อหาของการนำเสนอบนพื้นฐานของความรู้ที่ไม่ได้ระบุไว้อย่างชัดเจนในส่วนหัว HTTP จะสร้างการมีเพศสัมพันธ์ที่จะทำให้เกิดความเจ็บปวดในอนาคต
พวกเขาควรใช้ SOAP หรือไม่?
โดยส่วนตัวฉันไม่คิดอย่างนั้น ส่วนที่เหลือถูกต้องช่วยให้ระบบการกระจายการพัฒนาในระยะยาว หากคุณกำลังสร้างระบบแบบกระจายที่มีส่วนประกอบที่พัฒนาโดยบุคคลอื่นและจำเป็นต้องใช้เป็นเวลาหลายปี REST เป็นตัวเลือกที่ดีทีเดียว