ตัวอย่างจริงสำหรับ HATEOAS (REST-architecture) [ปิด]


140

ดังที่ทุกคนอาจสังเกตเห็นมี REST-APIs ของปลอม / เป็นพื้นฐานจำนวนมากใน wild (ซึ่งใช้ HTTP-API และเรียกมันว่า REST โดยไม่ปฏิบัติตามข้อกำหนดของ ผู้ที่โด่งดังของ Roy T. Fieldingคนที่ระบุกระบวนทัศน์ REST เป็นครั้งแรก)

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

มีตัวอย่างของการติดตั้งใช้งานที่เปิดเผยต่อสาธารณะหรือไม่?


3
ฉันพบว่าสิ่งนี้น่าสนใจเนื่องจากหลายคนอ้างว่า REST นั้น "ง่าย" แต่ฟีลดิงเองบอกว่าถึงแม้ว่ามันจะเป็นสถาปัตยกรรมที่เรียบง่าย แต่ก็ไม่ง่ายที่จะออกแบบแอปพลิเคชันด้วย
aehlke

3
อย่างไรก็ตามมันควรจะเป็น HATEOAS ไม่ใช่ HATEOS แต่ภายหลังก็ไม่ค่อยดีเท่า Google
David Roussel


2
Paypal ดูเหมือนจะใช้มัน: developer.paypal.com/docs/integration/direct/…
Andrew Thaddeus Martin

Roy Fielding เคยสร้างแอปพลิเคชั่นด้วย HATEOAS หรือไม่?
systemovich

คำตอบ:


102

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


5
หนังสือ "Rest in Practice" โดย Jim Webber, Sayas Parastatidis และ Ian Robinson ค่อนข้างเป็นประโยชน์อย่างมาก
DomreiRoam

2
บทความนี้เป็นเรื่องดี แต่น่าเสียดายที่ API ที่อธิบายไม่ได้ปฏิบัติตามหลักการ HATEOAS อย่างเคร่งครัดเพราะไม่ได้ใช้ประเภทสื่อที่กำหนดเอง ลูกค้าจะรู้วิธีจัดการ (เช่น deserialize, แจง, แสดง) แต่ละทรัพยากรได้อย่างไรถ้าทุกอย่างเป็น application / xml? มันจะขึ้นอยู่กับวิธีการที่ไม่ได้มาตรฐานในการส่งผ่านข้อมูลนี้เช่นเอกสารที่มนุษย์ต้องการอ่าน
ygormutti

21

วิธีการเกี่ยวกับดวงอาทิตย์เมฆ API ? จากการแนะนำ:

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

backstoryยังอาจจะเป็นประโยชน์


2
มันเป็น backstory ที่ทำให้ฉันเริ่มต้นเส้นทาง HATEAOS
CyberFonic

3
ลิงก์ทั้งหมดตายไปแล้ว
Roeland Van Heddegem

"ขออภัยเว็บไซต์ kenai.com ปิดแล้ว"
Nick Rolando

@NickRolando ฉันแทนที่ลิงค์
Apodaca ที่อุดมไปด้วย

@ RichApodaca ลิงก์ย้อนหลังนั้นตายแล้ว
Vasantha Ganesh K

7

Netflix มีREST APIตาม HATEOAS ที่มีลิงก์ซึ่งเป็นส่วนหนึ่งของทรัพยากร


1
และตอนนี้รหัสสถานะคือ 404
naXa

1
@ ลิงก์ Sargent เสียหายโปรดอัปเดต
Govi S

ขออภัยดูเหมือนว่า Netflix จะเอาออกไปและไปกับสิ่งอื่น
Will Sargent

2
คำตอบสำหรับลิงก์เท่านั้นมีแนวโน้มที่จะมีความเกี่ยวข้องน้อยลงเมื่อลิงก์นั้นตาย
nyedidikeke

@nyididikeke เป็นลิงก์ แต่เป็นคำตอบสำหรับบริบทนี้คุณเพียงแค่ต้องแก้ไขลิงก์โดยแก้ไขโพสต์!
Al-Mothafar

3

RESTfulness of Sun Cloud API ไม่ใช่การกล่าวถึงในจุดที่ 4 ของ Roy:

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

ตัวอย่างที่ 1ชื่อทรัพยากรคงที่ใน heirachy ที่กำหนด:

จาก Sun Cloud API: "... การเป็นตัวแทนของ VDC จะรวมถึงการเป็นตัวแทนของ Clusters ที่อาศัยอยู่ซึ่งจะรวมถึงการเป็นตัวแทนของ VMs ภายในแต่ละคลัสเตอร์"

ตัวอย่างที่ 2ข้อมูลนอกแบนด์เช่นมาตรฐานเฉพาะโดเมน:

คุณต้องมีเนื้อหาของหน้า wiki (ข้อมูลนอกวง) เพื่อที่จะรู้ว่า "กลไกการสื่อสารทรัพยากร" สำหรับเขตข้อมูลทรัพยากรเมฆ "uri" คือ GET


2
คุณถูกต้องซึ่งเป็นสิ่งที่ทำให้เข้าใจผิดมาก อย่างไรก็ตาม Roy กำลังพูดถึงชื่อทรัพยากรในพื้นที่ uri ไม่ใช่เนื้อหาของประเภทสื่อ อาทิตย์มีอิสระที่จะเปลี่ยน uri ที่ใช้ในการเข้าถึงกลุ่มได้ตลอดเวลา เห็นได้ชัดว่ามันไม่สามารถเปลี่ยนคำว่า "cluster" เป็น "group" ภายในการเป็นตัวแทนได้โดยไม่ต้องสร้างประเภทสื่อเวอร์ชันใหม่ แต่สามารถเปลี่ยน URI ให้เป็นอะไรก็ได้
Darrel Miller

4
เรารู้ว่า Sun API ใช้ HTTP เป็นอินเทอร์เฟซที่เหมือนกันดังนั้นลูกค้าไม่จำเป็นต้องดูหน้า wiki เพื่อทราบว่า GET เป็นคำกริยาที่ถูกต้องสำหรับทรัพยากรคลาวด์ มันสามารถลองดูก็ได้เพราะรู้ว่า GET นั้นเป็นกริยาที่ปลอดภัยหรืออาจใช้ OPTIONS เพื่อตรวจสอบว่ามันใช้ได้หรือไม่
Darrel Miller

3

ฉันรู้ว่าสิ่งนี้ถูกถามเมื่อไม่นานมานี้ แต่ฉันเอาแทงไปแสดงให้เห็นถึงการไหลของ REST API ที่ "เหมาะสม" เป็นตัวอย่างง่ายๆ ฉันพยายามปฏิบัติตามกฎของ Roy สำหรับ REST - อาจช่วยได้: ตัวอย่าง API โดยใช้ REST

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