เห็นได้ชัดว่าสิ่งที่ฉันคิดว่ารู้เกี่ยวกับ REST จำนวนมากนั้นผิด - และฉันไม่ได้อยู่คนเดียว คำถามนี้มีโอกาสในการขายที่ยาวนาน แต่ดูเหมือนว่าจำเป็นเนื่องจากข้อมูลกระจัดกระจายไปเล็กน้อย คำถามจริงจะอยู่ในตอนท้ายหากคุณคุ้นเคยกับหัวข้อนี้แล้ว
จากย่อหน้าแรกของREST APIของ Roy Fielding ต้องขับเคลื่อนด้วยไฮเปอร์เท็กซ์เป็นที่ชัดเจนว่าเขาเชื่อว่างานของเขาถูกตีความผิดอย่างกว้างขวาง:
ฉันรู้สึกไม่สบายใจกับจำนวนคนที่เรียกใช้อินเตอร์เฟสที่ใช้ HTTP เป็น REST API ตัวอย่างเช่นวันนี้เป็นSocialSite REST API นั่นคือ RPC มันกรีดร้อง RPC มีคลัปบนจอแสดงผลมากจนควรได้รับคะแนน X
Fielding จะแสดงรายการคุณลักษณะต่างๆของ REST API บางคนดูเหมือนจะขัดต่อแนวทางปฏิบัติทั่วไปและคำแนะนำทั่วไปใน SO และฟอรัมอื่น ๆ ตัวอย่างเช่น:
ควรป้อน REST API โดยไม่มีความรู้มาก่อนนอกเหนือจาก URI เริ่มต้น (บุ๊กมาร์ก) และชุดประเภทสื่อมาตรฐานที่เหมาะสมกับผู้ชมที่ต้องการ (กล่าวคือลูกค้าที่อาจใช้ API คาดว่าจะเข้าใจ) ...
REST API ต้องไม่กำหนดชื่อรีซอร์สถาวรหรือลำดับชั้น (การเชื่อมต่อระหว่างไคลเอนต์และเซิร์ฟเวอร์ที่ชัดเจน) ...
REST API ควรใช้ความพยายามในการอธิบายเกือบทั้งหมดในการกำหนดประเภทสื่อที่ใช้สำหรับแสดงทรัพยากรและขับเคลื่อนสถานะของแอปพลิเคชันหรือในการกำหนดชื่อความสัมพันธ์เพิ่มเติมและ / หรือมาร์กอัปที่เปิดใช้งานไฮเปอร์เท็กซ์สำหรับประเภทสื่อมาตรฐานที่มีอยู่ ...
แนวคิดของ "ไฮเปอร์เท็กซ์" มีบทบาทสำคัญมากกว่าโครงสร้าง URI หรือความหมายของคำกริยา HTTP "ไฮเปอร์เท็กซ์" ถูกกำหนดไว้ในหนึ่งในความคิดเห็น:
เมื่อฉัน [Fielding] พูดว่าไฮเปอร์เท็กซ์ฉันหมายถึงการนำเสนอข้อมูลพร้อมกันและการควบคุมเพื่อให้ข้อมูลกลายเป็นเงินที่ผู้ใช้ (หรืออัตโนมัติ) ได้รับทางเลือกและเลือกการดำเนินการ Hypermedia เป็นเพียงการขยายความหมายของข้อความในการรวมจุดยึดชั่วคราวไว้ในสตรีมสื่อ นักวิจัยส่วนใหญ่ลดความแตกต่าง
ไฮเปอร์เท็กซ์ไม่จำเป็นต้องเป็น HTML บนเบราว์เซอร์ เครื่องสามารถติดตามลิงก์ได้เมื่อเข้าใจรูปแบบข้อมูลและประเภทความสัมพันธ์
ฉันคาดเดา ณ จุดนี้ แต่สองประเด็นแรกข้างต้นดูเหมือนจะแนะนำว่าเอกสาร API สำหรับทรัพยากร Foo ที่มีลักษณะดังต่อไปนี้นำไปสู่การมีเพศสัมพันธ์ที่แน่นหนาระหว่างไคลเอนต์และเซิร์ฟเวอร์และไม่มีที่ใดในระบบ RESTful
GET /foos/{id} # read a Foo
POST /foos/{id} # create a Foo
PUT /foos/{id} # update a Foo
แต่ตัวแทนควรถูกบังคับให้ค้นหา URI สำหรับ Foos ทั้งหมดโดยตัวอย่างเช่นการออกคำขอ GET กับ / foos (URI เหล่านั้นอาจเป็นไปตามรูปแบบด้านบน แต่อยู่ข้างประเด็น) คำตอบใช้ประเภทสื่อที่สามารถถ่ายทอดวิธีการเข้าถึงแต่ละรายการและสิ่งที่สามารถทำได้โดยก่อให้เกิดประเด็นที่สามด้านบน . ด้วยเหตุนี้เอกสาร API จึงควรเน้นที่การอธิบายวิธีตีความไฮเปอร์เท็กซ์ที่อยู่ในการตอบกลับ
นอกจากนี้ทุกครั้งที่มีการร้องขอ URI ไปยังทรัพยากร Foo การตอบกลับจะมีข้อมูลทั้งหมดที่จำเป็นสำหรับเอเจนต์ในการค้นหาวิธีการดำเนินการตัวอย่างเช่นการเข้าถึงทรัพยากรที่เกี่ยวข้องและพาเรนต์ผ่าน URI ของพวกเขาหรือโดยการดำเนินการหลังการสร้าง / การลบทรัพยากร
กุญแจสำคัญของระบบทั้งหมดคือการตอบสนองประกอบด้วยไฮเปอร์เท็กซ์ที่มีอยู่ในชนิดสื่อที่สื่อถึงอ็อพชันเอเจนต์เพื่อดำเนินการต่อ ไม่ต่างจากวิธีที่เบราว์เซอร์ทำงานสำหรับมนุษย์
แต่นี่เป็นเพียงการคาดเดาที่ดีที่สุดของฉันในช่วงเวลานี้
ฟีลดิงโพสต์การติดตามผลซึ่งเขาตอบสนองต่อคำวิจารณ์ว่าการสนทนาของเขาเป็นนามธรรมเกินไปขาดตัวอย่างและมีศัพท์แสงที่หลากหลาย:
คนอื่น ๆ จะพยายามถอดรหัสสิ่งที่ฉันเขียนด้วยวิธีที่ตรงกว่าหรือใช้ได้กับข้อกังวลบางประการในปัจจุบัน ฉันอาจจะไม่ทำเพราะฉันยุ่งเกินไปกับการต่อสู้กับหัวข้อถัดไปการเตรียมตัวสำหรับการประชุมการเขียนมาตรฐานอื่นการเดินทางไปยังสถานที่ห่างไกลหรือเพียงแค่ทำสิ่งเล็ก ๆ น้อย ๆ ที่ทำให้ฉันรู้สึกว่าฉันได้รับเงินเดือนแล้ว
ดังนั้นคำถามง่ายๆสองข้อสำหรับผู้เชี่ยวชาญด้าน REST ที่มีแนวคิดที่ใช้ได้จริง: คุณตีความสิ่งที่ Fielding พูดอย่างไรและคุณนำไปปฏิบัติได้อย่างไรเมื่อจัดทำเอกสาร / ใช้งาน REST API
แก้ไข: คำถามนี้เป็นตัวอย่างของความยากลำบากในการเรียนรู้บางสิ่งหากคุณไม่มีชื่อสำหรับสิ่งที่คุณกำลังพูดถึง ชื่อในกรณีนี้คือ "Hypermedia as the Engine of Application State" (HATEOAS)