Đại diện tham chiếu RESTful - liên kết ngữ nghĩa với uri


9

Chúng tôi đang thiết kế API RESTful để mở thông tin tài khoản của khách hàng. Chúng tôi có các đại diện có chứa các tham chiếu đến các tài nguyên khác liên quan đến tài nguyên hiện tại. Đây là từ một số thực tiễn tốt nhất mà chúng tôi có thể tìm thấy trong các API công khai cũng như các tài liệu được xuất bản. Các đại diện có thể là XML hoặc JSON.

Ví dụ: đối với tài nguyên tài khoản, chúng tôi sẽ có các tham chiếu đến địa chỉ của tài khoản và đối với tài nguyên danh sách được phân trang, chúng tôi sẽ có các tham chiếu đến các trang đầu tiên, tiếp theo và trước đó.

API lần đầu tiên được thiết kế bằng các liên kết ngữ nghĩa <link title="" rel="" href="" />như được mô tả trong sách O'Reilly và được sử dụng trong API của Netflix và Google. Khi đến lúc các kỹ sư QA của chúng tôi viết bộ phần mềm tự động hóa, họ gặp vấn đề trong việc giải nén các liên kết. Bây giờ chúng tôi đã đề xuất các thành phần chuỗi uri đơn giản hơn đã được sử dụng trong API của Facebook và Twitter.

Kể từ đó, những người tham gia QA của chúng tôi đã giải quyết vấn đề khử lưu huỳnh, nhưng tôi vẫn lo ngại về việc dễ sử dụng thông số API hiện tại với các liên kết ngữ nghĩa. API của chúng tôi chủ yếu sẽ được sử dụng bởi khách hàng của chúng tôi và một số đối tác bên thứ ba và chúng tôi đã đến REST vì API XML-RPC trước đó quá khó đối với người tiêu dùng của chúng tôi.

tl; dr;

Câu hỏi:

Có ai đã thực hiện một đại diện liên kết ngữ nghĩa có vấn đề người tiêu dùng gặp khó khăn?


Cập nhật (21/21): Tôi đã quyết định ở lại với các liên kết ngữ nghĩa và hy vọng rằng sự nhầm lẫn là một trường hợp cạnh. Tôi sẽ cố gắng nhớ trả lời câu hỏi bằng kinh nghiệm của chúng tôi khi API tồn tại với một số người tiêu dùng.


Chỉnh sửa: thêm ví dụ

Tài khoản ngữ nghĩa 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 tài khoản ngữ nghĩa:

<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>

Tài khoản JSON đơn giản:

{
    "username": "paul",
    "addresses": "http://example.com/account/paul/addresses"
    "history": "http://example.com/account/paul/history"
}

Tài khoản XML đơn giản:

<account>
    <username>paul</username>
    <addresses>http://example.com/account/paul/addresses</addresses>
    <history>http://example.com/account/paul/history</history>
</account>

Bạn có thể cho chúng tôi ví dụ cụ thể về các liên kết ngữ nghĩa ban đầu và "các phần tử chuỗi uri đơn giản hơn" không? Nó không thực sự rõ ràng những gì bạn có nghĩa là những điều khoản, đặc biệt là sau này.
Tom Anderson

Cập nhật với các ví dụ cụ thể. Tôi cũng có thể thêm các ví dụ cho danh sách / bộ sưu tập được phân trang nếu điều đó có ích.
Paul

Câu trả lời:


3

Tôi thà có:

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

Điều này giúp loại bỏ mảng và làm cho đối tượng có thể đi qua được (để lấy địa chỉ của một tài khoản, ví dụ như trong JavaScript, người ta có thể nói account.address.href thay vì lặp qua tất cả các liên kết và tìm một địa chỉ trông giống như một địa chỉ). XML tương ứng:

<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>

Bạn nghĩ sao?


1

Ước mơ của web ngữ nghĩa là các liên kết có thể được phát hiện tự động. Vì phần khó là hiểu các mối liên kết và cách sử dụng chúng, tôi tin rằng thông tin ngữ nghĩa không hữu ích.

Tôi hơi nghiêng về các dạng XML ngữ nghĩa vì thuộc tính "rel" có cơ chế mở rộng được xác định của các trường được phân tách bằng dấu cách và "liên kết" được hiểu rõ.

Là người tiêu dùng các API như vậy, tôi không thấy nhiều sự khác biệt khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.