เรากำลังออกแบบ RESTful API เพื่อเปิดข้อมูลบัญชีลูกค้าของเรา เรามีตัวแทนที่มีการอ้างอิงถึงทรัพยากรอื่น ๆ ที่เกี่ยวข้องกับทรัพยากรปัจจุบัน นี่เป็นวิธีปฏิบัติที่ดีที่สุดหลายประการที่เราพบได้ใน API สาธารณะและวัสดุที่เผยแพร่ การเป็นตัวแทนสามารถเป็น XML หรือ JSON
ตัวอย่างเช่นสำหรับทรัพยากรบัญชีเราจะมีการอ้างอิงไปยังที่อยู่ของบัญชีและสำหรับรายการทรัพยากรที่มีเลขหน้าเราจะมีการอ้างอิงไปยังหน้าแรกหน้าถัดไปและหน้าก่อนหน้า
API ได้รับการออกแบบครั้งแรกโดยใช้ลิงก์ความหมาย<link title="" rel="" href="" />
ตามที่อธิบายไว้ในหนังสือ O'Reilly และใช้ใน APIs โดย Netflix และ Google เมื่อถึงเวลาสำหรับวิศวกรควบคุมคุณภาพของเราที่จะเขียนชุดระบบอัตโนมัติพวกเขามีปัญหาในการยกเลิกการเชื่อมโยง ตอนนี้เราได้แนะนำองค์ประกอบสตริง uri ที่เรียบง่ายซึ่งใช้ใน API โดย Facebook และ Twitter
ผู้ชำนาญการควบคุมคุณภาพของเราได้แก้ไขปัญหา deserialization ของพวกเขาแล้ว แต่ฉันยังคงมีความกังวลเกี่ยวกับความง่ายในการใช้งานของข้อมูลจำเพาะ API ปัจจุบันที่มีการเชื่อมโยงความหมาย API ของเราส่วนใหญ่จะถูกใช้โดยลูกค้าของเราและพันธมิตรบุคคลที่สามบางส่วนและเราได้ไปที่ REST เนื่องจาก XML-RPC API ก่อนหน้านี้เป็นเรื่องยากสำหรับผู้บริโภคของเรา
TL; DR;
คำถาม:
มีใครบ้างที่ใช้การนำเสนอลิงค์ความหมายพบปัญหาผู้บริโภคด้วยความยากลำบาก?
อัปเดต (6/21): ฉันได้ตัดสินใจที่จะอยู่กับการเชื่อมโยงความหมายและหวังว่าความสับสนเป็นกรณีที่ทันสมัย ฉันจะพยายามอย่าลืมตอบคำถามด้วยประสบการณ์ของเราเมื่อ API พร้อมใช้งานกับผู้บริโภคบางส่วน
แก้ไข: เพิ่มตัวอย่าง
JSON บัญชีความหมาย:
{
"username": "paul",
"links": [
{
"title": "addresses",
"rel": "related",
"href": "http://example.com/account/paul/addresses"
},
{
"title": "history",
"rel": "related",
"href": "http://example.com/account/paul/history"
}
]
}
XML บัญชี Semantic:
<account>
<username>paul</username>
<link title="addresses" rel="related" href="http://example.com/account/paul/addresses" />
<link title="history" rel="related" href="http://example.com/account/paul/history" />
</account>
บัญชีง่าย ๆ JSON:
{
"username": "paul",
"addresses": "http://example.com/account/paul/addresses"
"history": "http://example.com/account/paul/history"
}
Simple บัญชี XML:
<account>
<username>paul</username>
<addresses>http://example.com/account/paul/addresses</addresses>
<history>http://example.com/account/paul/history</history>
</account>