ผู้อ่านใหม่ในหัวข้อนี้จะได้รับการพูดคุยอย่างไม่มีที่สิ้นสุดเกี่ยวกับสิ่งที่คุณควรทำและการไม่มีบทเรียนจากประสบการณ์ ความจริงที่ว่า REST นั้น "ชอบ" มากกว่า SOAP คือฉันคิดว่าการเรียนรู้ระดับสูงจากประสบการณ์ แต่ความดีที่เราต้องก้าวหน้าไปจากที่นั่น? ปี 2559 วิทยานิพนธ์ของ Roy อยู่ในปี 2000 เราพัฒนาอะไรบ้าง มันสนุกไหม? มันง่ายที่จะรวมกับ? ให้การช่วยเหลือ? มันจะรองรับการเพิ่มขึ้นของสมาร์ทโฟนและการเชื่อมต่อมือถือที่ไม่สม่ำเสมอหรือไม่?
เครือข่ายชีวิตจริงไม่น่าเชื่อถือ ขอหมดเวลา การเชื่อมต่อถูกรีเซ็ต เครือข่ายลดจำนวนครั้งต่อวันหรือหลายชั่วโมง รถไฟเข้าสู่อุโมงค์ด้วยผู้ใช้มือถือในต่างประเทศ สำหรับการร้องขอใด ๆ ที่ได้รับ (ตามที่ได้รับการยอมรับเป็นครั้งคราวในการสนทนาทั้งหมด) คำขอสามารถตกลงไปในน้ำในทางของมันหรือการตอบสนองอาจตกอยู่ในน้ำในทางกลับ ในเงื่อนไขเหล่านี้การออกคำขอ PUT, POST และ DELETE โดยตรงกับแหล่งข้อมูลสำคัญทำให้ฉันเป็นคนที่โหดร้ายและไร้เดียงสาอยู่เสมอ
HTTP ไม่ทำอะไรเลยเพื่อให้มั่นใจว่าการตอบสนองคำขอเสร็จสมบูรณ์และน่าเชื่อถือเพราะมันเป็นหน้าที่ของแอปพลิเคชันที่รับรู้เครือข่ายอย่างเหมาะสม การพัฒนาแอพพลิเคชั่นดังกล่าวคุณสามารถข้ามผ่านห่วงเพื่อใช้ PUT แทนที่จะเป็น POST จากนั้นจึงมีห่วงเพิ่มเติมเพื่อให้เกิดข้อผิดพลาดบางอย่างบนเซิร์ฟเวอร์หากคุณตรวจพบคำขอซ้ำ กลับไปที่ไคลเอนต์จากนั้นคุณต้องข้ามห่วงเพื่อตีความข้อผิดพลาดเหล่านี้เรียกคืนตรวจสอบและ repost
หรือคุณสามารถทำสิ่งนี้ได้ : พิจารณาคำขอที่ไม่ปลอดภัยของคุณเป็นทรัพยากรผู้ใช้รายเดียวแบบชั่วคราว (ลองเรียกการกระทำเหล่านี้) ลูกค้าร้องขอ "การกระทำ" ใหม่บนทรัพยากรที่สำคัญพร้อมกับ POST ที่ว่างเปล่าไปยังทรัพยากร POST จะใช้สำหรับสิ่งนี้เท่านั้น เมื่อได้อย่างปลอดภัยในความครอบครองของ URI ของการกระทำที่สร้างเสร็จใหม่ ๆ สดใหม่ทำให้ลูกค้าร้องขอไม่ปลอดภัยในการการกระทำ URI, ไม่ทรัพยากรเป้าหมาย การแก้ไขการกระทำและการอัปเดตทรัพยากร "ของจริง" เป็นหน้าที่ของ API ของคุณอย่างถูกต้องและจะถูกแยกออกจากเครือข่ายที่ไม่น่าเชื่อถือ
เซิร์ฟเวอร์ดำเนินธุรกิจส่งคืนการตอบกลับและเก็บไว้กับ URI การดำเนินการที่ตกลงกันไว้ หากมีสิ่งใดผิดพลาดไคลเอนต์ร้องขอซ้ำ (พฤติกรรมตามธรรมชาติ!) และหากเซิร์ฟเวอร์ได้เห็นแล้วมันจะตอบสนองที่เก็บไว้ซ้ำแล้วซ้ำอีกและไม่ทำอะไรเลย
คุณจะพบความคล้ายคลึงกันอย่างรวดเร็วพร้อมกับสัญญา: เราสร้างและส่งคืนตัวยึดตำแหน่งสำหรับผลลัพธ์ก่อนที่จะทำอะไร เช่นเดียวกับสัญญาการกระทำสามารถประสบความสำเร็จหรือล้มเหลวเพียงครั้งเดียว แต่ผลลัพธ์นั้นสามารถนำมาใช้ซ้ำได้
เหนือสิ่งอื่นใดเราให้โอกาสในการส่งและรับแอปพลิเคชันเพื่อเชื่อมโยงการดำเนินการที่ไม่ซ้ำกันที่ระบุถึงเอกลักษณ์ในสภาพแวดล้อมที่เกี่ยวข้อง และเราสามารถเริ่มเรียกร้องและบังคับใช้! พฤติกรรมที่รับผิดชอบจากลูกค้า: ทำตามคำขอของคุณซ้ำตามที่คุณต้องการ แต่อย่าไปดำเนินการใหม่จนกว่าคุณจะได้รับผลลัพธ์ที่ชัดเจนจากสิ่งที่มีอยู่เดิม
เช่นนี้ปัญหาที่ยุ่งยากมากมายก็หายไป คำขอแทรกซ้ำจะไม่สร้างรายการซ้ำและเราจะไม่สร้างทรัพยากรจริงจนกว่าเราจะได้รับข้อมูล (คอลัมน์ฐานข้อมูลสามารถอยู่ได้ไม่เป็นโมฆะ) คำขออัปเดตซ้ำแล้วซ้ำอีกจะไม่เข้ากับสถานะที่เข้ากันไม่ได้และจะไม่เขียนทับการเปลี่ยนแปลงที่ตามมา ลูกค้าสามารถดึงข้อมูลและดำเนินการยืนยันต้นฉบับได้อย่างราบรื่นไม่ว่าด้วยเหตุผลใดก็ตาม (ไคลเอ็นต์ขัดข้องการตอบสนองก็หายไป ฯลฯ )
คำขอลบต่อเนื่องสามารถดูและประมวลผลการยืนยันดั้งเดิมโดยไม่ต้องกดปุ่มข้อผิดพลาด 404 หากสิ่งต่าง ๆ ใช้เวลานานกว่าที่คาดไว้เราสามารถตอบสนองชั่วคราวและเรามีสถานที่ที่ลูกค้าสามารถตรวจสอบผลลัพธ์ที่ชัดเจนได้ ส่วนที่ดีที่สุดของรูปแบบนี้คือคุณสมบัติของ Kung-Fu (Panda) เรารับจุดอ่อนความชอบสำหรับลูกค้าที่จะทำซ้ำการร้องขอเมื่อใดก็ตามที่พวกเขาไม่เข้าใจคำตอบและเปลี่ยนเป็นจุดแข็ง :-)
ก่อนที่จะบอกฉันว่านี่ไม่ใช่ RESTful โปรดพิจารณาวิธีการมากมายที่หลักการ REST ได้รับการเคารพ ลูกค้าไม่ได้สร้าง URL API ยังคงค้นหาได้แม้ว่าจะมีการเปลี่ยนแปลงเล็กน้อยในความหมาย ใช้คำกริยา HTTP อย่างเหมาะสม หากคุณคิดว่านี่เป็นการเปลี่ยนแปลงครั้งใหญ่ที่จะนำไปปฏิบัติฉันสามารถบอกคุณได้จากประสบการณ์ที่ไม่ใช่
หากคุณคิดว่าคุณมีข้อมูลจำนวนมากที่จะจัดเก็บลองพูดคุยโวลุ่ม: การยืนยันการอัปเดตทั่วไปเป็นเพียงเศษเสี้ยวของกิโลไบต์ ปัจจุบัน HTTP ให้เวลาคุณหนึ่งหรือสองนาทีในการตอบกลับอย่างชัดเจน แม้ว่าคุณจะเก็บการกระทำไว้เพียงสัปดาห์เดียวลูกค้าก็มีโอกาสมากมายที่จะตามหา หากคุณมีปริมาณมากคุณอาจต้องการเก็บค่าคีย์ที่สอดคล้องกับกรดโดยเฉพาะหรือโซลูชันในหน่วยความจำ