Hipermedinin (HATEOAS) faydası nedir?


18

HATEOAS'ın programlar tarafından kullanılması amaçlanan API'ların (doğrudan API'nıza göz atan insanların aksine) faydasını anlamıyorum. Elbette, müşteri bir URL şemasına bağlı değil, ancak aklımdaki aynı şey olan bir veri şemasına bağlı.

Örneğin, bir siparişteki bir öğeyi görüntülemek istediğimi varsayalım, sipariş URL'sini zaten keşfettiğimi veya bildiğimizi varsayalım.

HATEOAS:

order = get(orderURL);
item = get(order.itemURL[5]);

olmayan HATEOAS:

order = get(orderURL);
item = get(getItemURL(order,5));

İlk modelde sipariş nesnesinin itemURL alanına sahip olduğunu bilmek zorundayım. İkinci modelde, bir öğe URL'sinin nasıl oluşturulacağını bilmek zorundayım. Her iki durumda da önceden bir şey "bilmek" zorundayım ki HATEOAS benim için gerçekten ne yapıyor?


1
get(orderURL);sana söylemeliyim the fact that the order object has an itemURL field.
yannis

İstemci uygulamasını yazarken, alanın ne olduğunu önceden bilmeniz gerekir.
Hız


8
Bir uygulamanın, bir siparişin bir kalemi olduğunu bile bilmemesi durumunda, uygulamanın bir siparişten ürünü alması nasıl gerekir? Keşif elle tarama için çalışır, ancak otomatik uygulamalar için çalışmaz.
Pace

Yanıtlar:


7

Bir fark şemanın umarım standart olması ya da en azından başkaları tarafından tekrar kullanılabilmesidir.

Örneğin, Twitter API'sını kullandığınızı ve StatusNet'i de (veya bunun yerine) desteklemek istediğinizi varsayalım. Twitter ile aynı veri modelini kullandıklarından, API HATEOAS'ı takip ediyorsa şimdi ana URL'yi değiştirmeniz yeterlidir. Değilse, şimdi her bir URL'yi koddan değiştirmeniz gerekir .

Tabii ki, yine de hizmetin giriş noktası URL'sini koymak için kodu değiştirmeniz gerekirse, o kadar yararlı görünmeyebilir. Bu URL dinamik olarak eklenmişse gerçekten parlıyor; örneğin Twillio gibi kullanıcının kendi API'siyle etkileşime girecek bir hizmet oluşturuyorsanız.


Bu hiç düşünmediğim ilginç bir nokta.
Hız

@YannisRizos: Hmm, HATEOAS'un standart olduğunu söylediğim yeri göremiyorum. Dedim ki "(veri) şeması umarım bir standarttır". REST terminolojisinde medya türü budur.
André Paramés

İkinci okumada kesinlikle haklısın.
yannis

2
Bağlantıların rel adlarının aynı olduğunu varsayarsanız, Evet. Ancak genel olarak konuşmak gerekirse ve sadece bahsettiğiniz spesifik örnekle değil, dünyadaki her programcı benzer veya eşdeğer eylemler için aynı isimleri seçmeyebilir. Bu avantaj, ortak bir arabirim adlandırma ve parametreleri üzerinde anlaşan programcılar tarafından sağlanır.
derloopkat

9
  1. Keşfedilebilir API: Önemsiz gelebilir, ancak keşfedilebilir bir API'nın gücünü hafife almaz. Verilere göz atma yeteneği, istemci geliştiricilerin API ve veri yapılarının zihinsel bir modelini oluşturmalarını çok daha kolay hale getirir.

  2. Satır içi belgeler: URL'lerin bağlantı ilişkileri olarak kullanılması, istemci geliştiricileri belgelere yönlendirebilir.

  3. Basit istemci mantığı: URL'leri kendisi oluşturmak yerine basitçe izleyen bir istemcinin uygulanması ve bakımı daha kolay olmalıdır.

  4. Sunucu URL yapılarının sahipliğini alır: Hiper medya kullanımı, istemcinin sunucu tarafından kullanılan URL yapıları hakkındaki sabit kodlanmış bilgisini kaldırır.

  5. İçeriği diğer hizmetlere yüklerken: İçeriği diğer sunuculara yüklerken hiper ortam gereklidir (örneğin bir CDN).

  6. Bağlantılarla sürüm oluşturma: Hiper Ortam API'lerin sürümlendirilmesine yardımcı olur.

  7. Aynı hizmetin birden çok uygulaması: Aynı hizmetin birden çok uygulaması olduğunda (ve bir istemcinin birden fazlasına erişmesi gerektiğinde) hiper medya bir zorunluluktur.

Bu madde işaretlerinin ayrıntılı bir açıklamasını burada bulabilirsiniz: http://soabits.blogspot.no/2013/12/selling-benefits-of-hypermedia.html


> İçeriği diğer hizmetlere yüklerken: İçeriği diğer sunuculara yüklerken hiper ortam gereklidir (örneğin bir CDN). Hayır değil. Aynı bağlantıları saklayabilir ve CDN kullanabilirsiniz.
Bruno Costa
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.