ในการพูดจา REST ความแตกต่างระหว่างทรัพยากรและการเป็นตัวแทนคืออะไร?


9

ความเข้าใจของฉันเกี่ยวกับ REST ที่เปิดใช้งานการสร้างแบบจำลองการบริการเป็นการแสดงสถานะและการเปลี่ยนจากสถานะหนึ่งไปสู่อีกสถานะหนึ่งทำให้ใช้ HTTP ฉันมักจะเข้าใจแหล่งข้อมูลว่าเป็นตัวแทนของสถานะด้านบริการจนกระทั่งเมื่อไม่นานมานี้เมื่อฉันอ่านบทความนี้โดย Jimmy Bogard ซึ่งฉันรู้ว่าเป็นนักพัฒนา / สถาปนิกที่ชาญฉลาดซึ่งเป็นที่เคารพของชุมชน เพื่ออ้างอิงข้อความเฉพาะจากโพสต์นั้น

การเป็นตัวแทนแตกต่างกันเล็กน้อย - มันอธิบายถึง สถานะปัจจุบันของทรัพยากร (เมื่อมีการร้องขอ)

นี่ทำให้ฉันสับสน ความคิดเห็นที่ยอมรับโดยทั่วไปในหัวข้อคืออะไร?


1
คุณอาจต้องการตรวจสอบ: ฉันสามารถถามหัวข้อใดได้บ้างที่นี่ . การสำรวจความคิดเห็นไม่ได้อยู่ในหัวข้อสำหรับ Programmers.SE
Adam Zuckerman

2
ทุกอย่างที่ระบุไว้ในหน้านั้นไม่มีคำตอบในสีดำและสีขาว แต่ความคิดเห็นทั้งหมด นอกจากนี้ฉันไม่แน่ใจว่าคำถามนี้เกี่ยวกับความคิดเห็นอย่างไร เป็นเพราะฉันใช้คำว่า "ความเห็น" ในคำถามของฉันหรือไม่
Suhas

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

1
สำหรับคำถามของคุณทรัพยากรเป็นเพียง "บางสิ่งบางอย่างบนอินเทอร์เน็ตพร้อมที่อยู่" ในขณะที่การเป็นตัวแทนคือ "ลักษณะที่สิ่งนั้นบนอินเทอร์เน็ตถูกนำเสนออีกครั้ง" มันอาจเป็นไฟล์หน้าเว็บหรือเอกสาร JSON มันอาจเป็นไฟล์ประเภทใดประเภทหนึ่งเช่นเอกสาร Word หรือสเปรดชีต ในทุกกรณีเหล่านี้การเป็นตัวแทนคือสิ่งที่คุณกำลังเรียกคืน "สถานะปัจจุบันของทรัพยากร" เป็นการยอมรับว่าสิ่งนั้นอาจมีการเปลี่ยนแปลงตั้งแต่ครั้งสุดท้ายที่คุณดึงข้อมูลมา
Robert Harvey

คำตอบ:


14

คำตอบสั้น ๆ

แผนที่ไม่ใช่อาณาเขต

คำตอบอีกต่อไป - เช่นเดียวกับสิ่งที่เหลือสถานที่ที่จะเริ่มต้นอยู่กับรอยฝ่ายวิทยานิพนธ์ ; โดยเฉพาะอย่างยิ่งบทที่ 5 สำหรับคำถามปัจจุบันของคุณคุณต้องการส่วนที่ 5.2.1

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

ทรัพยากร

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

การแสดง

คอมโพเนนต์ REST ดำเนินการกับทรัพยากรโดยใช้การเป็นตัวแทนในการจับภาพสถานะปัจจุบันหรือที่ตั้งใจไว้ของทรัพยากรนั้นและถ่ายโอนการเป็นตัวแทนนั้นระหว่างส่วนประกอบ การแทนคือลำดับของไบต์รวมทั้งการแทนข้อมูลเมตาเพื่ออธิบายไบต์เหล่านั้น ชื่อที่ใช้กันทั่วไป แต่มีความแม่นยำน้อยกว่าสำหรับการเป็นตัวแทน ได้แก่ : เอกสารไฟล์และเอนทิตีข้อความ HTTP, อินสแตนซ์หรือตัวแปร

การเป็นตัวแทนประกอบด้วยข้อมูลเมตาดาต้าที่อธิบายข้อมูลและในบางครั้งเมทาดาทาเพื่ออธิบายเมทาดาทา (โดยปกติจะมีวัตถุประสงค์เพื่อตรวจสอบความสมบูรณ์ของข้อความ)

ดังนั้น: "สภาพอากาศในวันนี้ในลอสแองเจลิส" เป็นแหล่งข้อมูล ตัวแทนผู้สมัครจะรวมถึง: เอกสารข้อความที่มีการคาดการณ์ล่าสุดจากบริการสภาพอากาศแห่งชาติ ภาพแทนเรดาร์สภาพอากาศและการบันทึกเสียงของการพยากรณ์


2

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

การเป็นตัวแทนของทรัพยากรคือวิธีการที่บริการของคุณสื่อสารสถานะของทรัพยากรเช่น XML, JSON ที่แสดงสถานะของหลอดไฟ

ใน REST API จะมีการระบุทรัพยากรโดยตัวระบุแบบฟอร์มเดียวกัน (เช่น URI) ทรัพยากรเดียวสามารถมีการรับรองหลายรายการใน HTTP REST API ตามปกติคุณจะระบุการเป็นตัวแทนที่คุณต้องการใช้ในส่วนหัวเนื้อหา HTTP และยอมรับประเภท

การรับรู้คีย์หนึ่งในสถาปัตยกรรมเซิร์ฟเวอร์ลูกค้าคือคุณไม่สามารถนำทรัพยากรมาให้ลูกค้าได้และคุณไม่ควรพยายามทำให้มันเป็นเหมือนที่คุณทำ แต่ใน REST API คุณจัดการทรัพยากรจากระยะไกลโดยการโอนการรับรองทรัพยากร ลองคิดดูเช่นนี้คุณไม่ส่งหลอด FedEx เพื่อให้ลูกค้าสามารถจัดการหลอดไฟได้โดยตรง แต่บริการจะสร้างการแสดง XML / JSON / protobuf / CSV ของหลอดไฟและไคลเอนต์ส่งตัวแทนของการจัดการที่ตั้งใจไว้ จากนั้นบริการจะจัดการกับสถานะที่แท้จริงของหลอดไฟในนามของลูกค้าหรือปฏิเสธคำขอบอกว่าลูกค้าไม่ได้รับอนุญาตให้ดำเนินการกับหลอดไฟ เรื่องนี้อาจดูเหมือนชัดเจน / ผมแตก แต่สิ่งสำคัญที่ควรทราบคือเนื่องจากการแสดงไม่ใช่ทรัพยากรเอง


1

ทรัพยากรอาจเป็นใบแจ้งหนี้

การแสดงคือใบแจ้งหนี้ ณ เวลาที่ระบุในรูปแบบ JSON หรือในรูปแบบ XML คุณอาจได้รับใบแจ้งหนี้เดียวกันแน่นอนในภายหลังมันจะเป็นทรัพยากรเดียวกัน แต่อยู่ในสถานะที่อาจแตกต่างกัน (ยกเลิกชำระเงิน ฯลฯ )

คุณใช้สถานะปัจจุบันของใบแจ้งหนี้ (เช่น: ข้อมูลใบแจ้งหนี้ทั้งหมดในฐานข้อมูล) และให้การแสดงที่เฉพาะเจาะจง (เช่น: html, xml, json) ณ เวลาที่กำหนดสำหรับการถ่ายโอนไปยังอุปกรณ์อื่น (เช่น: เบราว์เซอร์)

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