8.1 แนวทาง API ระยะไกล
โปรแกรมเมอร์ทุกคนทำผิดพลาดเหมือนกันเมื่อสร้างสถาปัตยกรรมไคลเอ็นต์เซิร์ฟเวอร์ พวกเขาเริ่มจัดการกับคำขอไปยังเซิร์ฟเวอร์เป็นการเรียกใช้เมธอด
คุณต้องการเริ่มต้นกระบวนการสร้างรายงานบนเซิร์ฟเวอร์ ทำไมไม่ส่งคำขอเช่น:
http://server.com/startDocumentGeneration?params
แล้วจะดาวน์โหลดรายงานหลังจากทำเสร็จแล้วได้อย่างไร? ในการทำเช่นนี้เราจะเขียนวิธีอื่น:
http://server.com/getDocument
เซิร์ฟเวอร์จะHttpSession
เก็บข้อมูลในเอกสารของเรา และทันทีที่เอกสารถูกสร้างขึ้น เซิร์ฟเวอร์จะคืนเอกสารนั้นให้
วิธีการที่ดี หรือไม่?
วิธีการนี้แย่มากจริงๆ สิ่งที่เซิร์ฟเวอร์ต้องจำหมายเลขเอกสาร กล่าวอีกนัยหนึ่ง เพื่อที่จะประมวลผลการเรียกใช้เมธอดใหม่ได้อย่างถูกต้อง เซิร์ฟเวอร์ต้องจดจำผลลัพธ์ของการเรียกใช้เมธอดก่อนหน้านี้
บนเว็บ นี่เป็นปัญหาใหญ่ อินเทอร์เน็ตอาจหายไป เบราว์เซอร์อาจปิด หน้าเว็บสามารถโหลดซ้ำหรือคลิกลิงก์โดยไม่ตั้งใจได้ เป็นต้น และเซิร์ฟเวอร์จะยังคงจัดเก็บข้อมูลเมกะไบต์จากคำขอของผู้ใช้ก่อนหน้า ...
สำหรับการทำงานกับเซิร์ฟเวอร์อย่างสะดวกสบาย คุณไม่สามารถคาดหวังได้ว่าคุณจะมีข้อมูลของคำขอก่อนหน้านี้ไปยังเซิร์ฟเวอร์อยู่เสมอ
แล้วจะเรียกเมธอดของเซิร์ฟเวอร์ได้อย่างไร? คำตอบที่ถูกต้องจะแย่มาก: ไม่มีทาง!
8.2 วิธีที่เหลือ
โปรแกรมเมอร์กลับไปสู่พื้นฐานและจำได้ว่าในขั้นต้นคำขอมีเส้นทางไปยังไฟล์บนเซิร์ฟเวอร์:
http://server.com/path?params
และเราตัดสินใจที่จะใช้แนวทางนี้ให้เกิดประโยชน์สูงสุด
ตอนนี้เซิร์ฟเวอร์ถือเป็นที่เก็บข้อมูลที่มองเห็นได้จากภายนอกในรูปแบบของต้นไม้
หากคุณต้องการรับรายชื่อผู้ใช้ทั้งหมด ให้เรียกแบบสอบถาม:
http://server.com/users
หากคุณต้องการรับข้อมูลเกี่ยวกับผู้ใช้ 113 ให้เรียกใช้แบบสอบถาม:
http://server.com/users/113
และอื่น ๆ ทั้งหมดในเส้นเลือดเดียวกัน
เซิร์ฟเวอร์ถูกมองว่าเป็นที่เก็บข้อมูลที่มองเห็นได้จากภายนอกในรูปแบบของต้นไม้
สามารถ รับข้อมูลได้ - ร้องขอGETแก้ไข - ร้องขอ POSTและลบ - ร้องขอ DELETE
8.3 ไม่มีสถานะ
โปรโตคอล REST ของการโต้ตอบระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ต้องมีเงื่อนไขต่อไปนี้: ระหว่างช่วงเวลาระหว่างคำขอจากลูกค้า จะไม่มีข้อมูลเกี่ยวกับสถานะของไคลเอ็นต์ถูกเก็บไว้บนเซิร์ฟเวอร์
คำขอทั้งหมดจากลูกค้าต้องสร้างขึ้นในลักษณะที่เซิร์ฟเวอร์ได้รับข้อมูลทั้งหมดที่จำเป็นในการดำเนินการตามคำขอใน แต่ละครั้ง สถานะเซสชันถูกบันทึกไว้ในฝั่งไคลเอ็นต์
ในระหว่างการประมวลผลคำขอของไคลเอ็นต์ จะถือว่าไคลเอ็นต์อยู่ในสถานะเปลี่ยนผ่าน สถานะแอปพลิเคชันแต่ละสถานะจะแสดงด้วยลิงก์ที่สามารถเรียกใช้ได้ในครั้งต่อไปที่ไคลเอ็นต์เข้าชม
8.4 ความสม่ำเสมอของอินเทอร์เฟซ
เส้นทางทั้งหมดที่ใช้ในการดึงวัตถุจากเซิร์ฟเวอร์เป็นมาตรฐาน ซึ่งสะดวกมาก โดยเฉพาะอย่างยิ่งหากคุณได้รับข้อมูลจากเซิร์ฟเวอร์ REST อื่น
อินเทอร์เฟซวัตถุทั้งหมดต้องเป็นไปตามเงื่อนไขสามประการ:
การระบุทรัพยากร
ทรัพยากรทั้งหมดถูกระบุในคำขอโดยใช้ URI ทรัพยากรภายในเซิร์ฟเวอร์แยกจากมุมมองที่ส่งคืนไปยังไคลเอนต์ ตัวอย่างเช่น เซิร์ฟเวอร์อาจส่งข้อมูลจากฐานข้อมูลเป็น HTML, XML หรือ JSON ซึ่งไม่ใช่ประเภทการจัดเก็บภายในเซิร์ฟเวอร์
จัดการทรัพยากรผ่านมุมมอง
หากไคลเอนต์จัดเก็บการเป็นตัวแทนของทรัพยากร รวมถึงข้อมูลเมตา ก็จะมีข้อมูลเพียงพอที่จะแก้ไขหรือลบทรัพยากรบนเซิร์ฟเวอร์
ข้อความ "อธิบายตนเอง"
แต่ละข้อความมีข้อมูลเพียงพอที่จะเข้าใจวิธีจัดการ ตัวอย่างเช่น หากคุณต้องการข้อมูลเกี่ยวกับผู้ใช้ เซิร์ฟเวอร์จะส่งคืนวัตถุ JSON ให้คุณ ซึ่งจะมีช่องชื่อและที่อยู่
ไม่ควรมีสถานการณ์ที่ลูกค้าจำเป็นต้องรู้ว่าตัวเลขตัวแรกในการตอบกลับคืออายุ และตัวที่สองคือวันเดือนปีเกิด
8.5 การแคช
วิธีการ REST จะถือว่ามีการร้องขอข้อมูลผ่านโปรโตคอล HTTP ดังนั้นวัตถุจะได้รับโดยการเรียกคำขอ GET ซึ่งหมายความว่าทรัพยากรทั้งหมดที่ได้รับผ่านคำขอ GET จะต้องอยู่ภายใต้กฎทั้งหมดสำหรับการแคชทรัพยากร HTTP เช่นเดียวกับทรัพยากรทั้งหมด
นั่นคือ ข้อมูลที่ได้รับผ่าน REST API จะถูกแคชในลักษณะเดียวกับทรัพยากรแบบสแตติกใดๆ บนเว็บเซิร์ฟเวอร์ ความงาม :)