การอ้างอิงการอ้างอิงที่สงบ - ​​การเชื่อมโยงความหมายกับ uri


9

เรากำลังออกแบบ 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>

คุณช่วยยกตัวอย่างที่เป็นรูปธรรมของลิงก์ความหมายดั้งเดิมและ "องค์ประกอบสตริง uri ที่ง่ายกว่า" ได้ไหม? ยังไม่ชัดเจนว่าคุณหมายถึงอะไรโดยเฉพาะอย่างยิ่งคำเหล่านี้
Tom Anderson

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

คำตอบ:


3

ฉันอยากจะมี:

{
  "username": "paul",
  "address": {
      "rel": "related",
      "href": "http://example.com/account/paul/addresses"
  },
  "history" {
      "rel": "related",
      "href": "http://example.com/account/paul/history"
  }
}

สิ่งนี้จะกำจัดอาร์เรย์และทำให้วัตถุเคลื่อนที่ได้ (เพื่อรับที่อยู่ของบัญชีเช่นใน JavaScript เราสามารถพูดได้ว่า account.address.href แทนที่จะวนลูปผ่านลิงก์ทั้งหมดและค้นหาหนึ่งที่ดูเหมือนที่อยู่) XML ที่เกี่ยวข้อง:

<account>
    <username>paul</username>
    <addresses>
        <link rel="related" href="http://example.com/account/paul/addresses" />
    </addresses>
    <history>
        <link rel="related" href="http://example.com/account/paul/history" />
    </history>
</account>

คุณคิดอย่างไร?


1

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

ฉันเอนตัวไปทาง Semantic XML เล็กน้อยเนื่องจากแอตทริบิวต์ "rel" มีกลไกการขยายที่กำหนดไว้ของเขตข้อมูลที่คั่นด้วยช่องว่างและ "ลิงก์" นั้นเป็นที่เข้าใจกันดี

ในฐานะผู้บริโภค API ดังกล่าวฉันไม่เห็นความแตกต่างอื่น ๆ อีกมาก

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