มีกลยุทธ์ในการค้นหาบริการ REST โดยใช้ HATEOAS หรือไม่


10

เมื่อสร้างบริการ REST ด้วยข้อ จำกัดHATEOASมันง่ายมากที่จะโฆษณาการมีอยู่ของทรัพยากรผ่านการเชื่อมโยง คุณทำGETถึงรูทของเว็บไซต์ของฉันและฉันตอบกลับด้วยเอกสารรูทที่แสดงรายการทรัพยากรระดับแรกทั้งหมด:

{
    users: { href: "/users" }
    questions { href: "/questions" }
}

ลูกค้าที่เข้าใจวิธีการอ่านhrefค่าเหล่านี้สามารถดำเนินการGETตามคำขอและค้นหาทรัพยากรปัจจุบันทั้งหมดที่มีอยู่ในแอปพลิเคชัน

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

GET /users?surname=Smith

มีรูปแบบใดบ้างที่สามารถแสดงความสามารถในการสืบค้นด้วยข้อมูลที่เพียงพอที่ลูกค้าสามารถสร้างแบบสอบถามแบบเชื่อมโยงกันโดยไม่จำเป็นต้องมีความรู้มาก่อนเกี่ยวกับทรัพยากรหรือไม่

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

POST /questions

{
    title: "Are there strategies for discovering REST services using HATEOAS?",
    body: "When building a REST service with the HATEOAS constraint, it's very..."
}

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

มีรูปแบบใดบ้างที่มีความคล้ายคลึงกันสำหรับลูกค้า?


2
ปัญหาเกี่ยวกับการค้นพบบริการ REST ได้รับการพูดคุยและตอบที่นี่: stackoverflow.com/questions/9101494/วิธีแก้ปัญหาที่ง่ายที่สุดคือการใช้เทมเพลต XHTML ด้วยแบบฟอร์มที่ไม่เพียง แต่บอกวิธีการที่คุณสามารถใช้ แต่ยัง โครงสร้างวัตถุที่จะส่งผ่านองค์ประกอบแบบฟอร์ม (อินพุตเลือก ฯลฯ ) ลูกค้าจำเป็นต้องมีโปรแกรมแยกวิเคราะห์ XML เพื่อค้นหาสิ่งที่ต้องการ อีกวิธีหนึ่งคือใช้เทมเพลต URL แต่ช่วยได้เฉพาะกับแหล่งข้อมูลที่ใช้สตริงการสืบค้น
Spoike

เกี่ยวกับประเภทเนื้อหา แก้ไขได้ด้วยการเจรจาต่อรองเนื้อหาซึ่งทำในส่วนหัว HTTP หากเซิร์ฟเวอร์ไม่สามารถให้บริการประเภทเนื้อหาที่ร้องขอได้ก็ควรส่งคืนข้อผิดพลาด HTTP (เช่น 300 หรือ 406) ที่ระบุประเภทเนื้อหาที่สามารถส่งคืนได้
Spoike

คำตอบ:


1

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

ฉันคิดว่ามันมีประโยชน์มากกว่าที่จะคาดหวังให้ลูกค้าของคุณเข้าใจความหมายของประเภท mime ที่มีชื่อเสียง พูดเช่น "text / vcard" สำหรับคน


ฉันคิดว่าการใช้ประเภทเนื้อหาเป็นวิธีที่จะไป ฉันสามารถเปลี่ยนแอปพลิเคชันของฉันเพื่อใช้งานapplication/atomapp+xmlและทำให้พร้อมใช้งานสำหรับลูกค้าทั้งหมดที่เข้าใจรูปแบบนี้แล้ว มีประเภทเนื้อหาที่เป็นที่รู้จักมากพอที่จะทำให้วิธีนี้เป็นทางปฏิบัติ
Paul Turner

ฉันคิดว่าความคิดเห็นโดย @Spoike เป็นวิธี REST-ian ที่สง่างามต่ออีกครึ่งหนึ่งของปัญหา แม้ว่าลูกค้าจะรู้ว่า (ตัวอย่าง) ผู้ใช้จะถูกแสดงเป็น vCard แต่ก็ยังจำเป็นต้องรู้ว่าคุณสมบัติย่อยของคุณสมบัติของผู้ใช้สำหรับการค้นหา
Stephen J. Anderson

4

คุณสามารถเผยแพร่รายละเอียดเกี่ยวกับบริการของคุณผ่าน "WADL"

http://en.wikipedia.org/wiki/Web_Application_Description_Language

มันเป็นทางเลือกและไม่ใช่เทคโนโลยี่ส่วนหลังของ REST ทุกตัวที่รองรับสิ่งนี้ Jersey การใช้งานจาวาอย่างเป็นทางการของ jax-rs สนับสนุนตัวอย่างเช่นมันสามารถสร้างขึ้นได้โดยอัตโนมัติสำหรับคุณ

มันค่อนข้างยากที่จะเห็นมันใช้

ฉันไม่รู้ของใหญ่ที่ใช้มัน โดยทั่วไปคุณมีหน้าเว็บที่อธิบาย API


1
CXF เป็นอีกหนึ่งการนำ Java JAX-RS ที่ยิ่งใหญ่ที่สนับสนุน WADL และคุณก็เริ่มเห็นผู้บริโภค WADL บุคคลที่สามที่น่าสนใจเช่นกัน
Donal Fellows

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