RESTful referans gösterimleri - semantik link vs uri


9

Müşterilerimizin hesap bilgilerini açmak için RESTful API tasarlıyoruz. Mevcut kaynakla ilgili diğer kaynaklara referanslar içeren temsillerimiz var. Bu, herkese açık API'larda ve yayınlanmış materyallerde bulabildiğimiz en iyi uygulamalardan. Temsiller XML veya JSON olabilir.

Örneğin, bir hesap kaynağı için hesabın adreslerine ve sayfalandırılmış liste kaynağına referanslarımız olur, ilk, sonraki ve önceki sayfalara referanslarımız olur.

API ilk <link title="" rel="" href="" />olarak bir O'Reilly kitabında açıklandığı gibi anlamsal bağlantılar kullanılarak tasarlandı ve Netflix ve Google tarafından API'larda kullanıldı. KG mühendislerimizin otomasyon paketini yazma zamanı geldiğinde, bağlantıların serileştirilmesinde sorunlar yaşadılar. Artık Facebook ve Twitter tarafından API'larda kullanılan daha basit uri dize öğeleri öneriyoruz.

KG mühendislerimiz o zamandan beri serpiştirme sorunlarını çözdüler, ancak hala mevcut API spesifikasyonunun semantik bağlantılar ile kullanım kolaylığı konusunda bir endişem var. API'mız öncelikle müşterilerimiz ve bazı üçüncü taraf ortaklıkları tarafından tüketilecek ve önceki XML-RPC API'sı tüketicilerimiz için çok zor olduğu için REST'e gittik.

tl; dr;

Soru:

Anlamsal bağlantı temsili uygulayan herhangi biri zorlukla tüketici sorunları yaşadı mı?


Güncelleme (6/21): Anlamsal bağlantılarla kalmaya karar verdim ve karışıklığın bir uç dava olduğunu umuyorum. API bazı tüketicilerle yayınlandıktan sonra soruyu deneyimlerimizle yanıtlamayı hatırlamaya çalışacağım.


Düzenle: örnekler ekleyin

Anlamsal Hesap 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"
        }
    ]
}

Anlamsal Hesap XML'si:

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

Basit Hesap JSON:

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

Basit Hesap XML'si:

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

Bize orijinal semantik bağlantılar ve "daha basit uri string elemanları" hakkında somut örnekler verebilir misiniz? Bu terimlerle, özellikle de ikincisiyle ne demek istediğiniz çok net değil.
Tom Anderson

Somut örneklerle güncellendi. Ayrıca, yardımcı olan sayfalar / koleksiyonlar için de örnekler ekleyebilirim.
Paul

Yanıtlar:


3

İsterim:

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

Bu, diziyi ortadan kaldırır ve nesneyi izlenebilir hale getirir (örneğin, JavaScript'te bir hesabın adresini almak için, tüm bağlantılarda döngü yapmak ve adrese benzeyen bir hesap bulmak yerine account.address.href diyebiliriz). Karşılık gelen 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>

Ne düşünüyorsun?


1

Anlamsal ağın hayali, bağlantıların otomatik olarak keşfedilebilmesidir. Zor kısım, bağlantıları ve bunların nasıl kullanılacağını anlamak olduğundan, anlambilimsel bilgilerin o kadar da kullanışlı olmadığına inanıyorum.

Ben "Anlam" özniteliği boşlukla ayrılmış alanların tanımlanmış bir genişletilebilirlik mekanizması vardır ve "bağlantı" iyi anlaşılır çünkü Anlamsal XML formları doğru hafif bir eğilerek var.

Bu tür API'ların bir tüketicisi olarak, başka bir fark görmüyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.