HATEOAS

HATEOAS

Web dünyasında, internet siteleri ve uygulamalar her geçen gün daha etkileşimli hale geliyor. Bu ilerleme, RESTful API’lerin ortaya çıkmasıyla daha da hız kazandı. Bu API’lerin en iyi şekilde kullanılabilmesini sağlamak için ise HATEOAS dediğimiz bir yaklaşım geliştirildi. HATEOAS, API’lerin sadece veri sunma işlevini değil, aynı zamanda bu veriyle etkileşime geçme yeteneğini de kapsayan bir yöntemdir. Yani, kullanıcılar için daha akıcı ve esnek bir deneyim sunuyor..

İngilizce “Hypermedia as the Engine of Application State” cümlesinin baş harflerinden oluşur. HATEOAS sayesinde, istemciler bir REST API’yi nasıl kullanacaklarını bilmeden, sunucunun sağladığı hypermedia bağlantıları aracılığıyla dinamik olarak etkileşim kurabilirler. Bu, REST API’lerin kendini tanımlayabilmesi ve istemcilere kaynaklarla ilgili ne yapabileceklerini gösterebilmesi anlamına gelir.

HATEOAS’ın nasıl çalıştığını anlamak için bir örnek üzerinden ilerleyelim. Örneğin bir API’nin döndürdüğü JSON verisi şöyle olabilir:

{
  "name": "Can Cuma Yaman",
  "age": 25,
  "links": [
    {
      "rel": "self",
      "href": "https://api.test.com/users/123",
      "type": "GET"
    },
    {
      "rel": "friends",
      "href": "https://api.test.com/users/123/friends",
      "type": "GET"
    },
    {
      "rel": "posts",
      "href": "https://api.test.com/users/123/posts",
      "type": "GET"
    },
    {
      "rel": "comments",
      "href": "https://api.test.com/users/123/comments",
      "type": "GET"
    }
  ]
}

Bu JSON örneği, bir kullanıcıya ilişkin basit bilgiler içeriyor. name, age gibi temel kullanıcı verileri bulunuyor. links kısmı ise HATEOAS’ın temsil ettiği anahtar bölümdür. Bu bölüm, kullanıcının mevcut kaynakla ilişkilendirilmiş farklı bağlantıları içerir.

  • "rel" anahtarları, her bir bağlantının ne tür bir ilişki taşıdığını belirtir. Örneğin, “self” bağlantısı, bu kaynağın kendisine yönelik referans sağlar.
  • "href" anahtarları, bağlantının adresini belirtir. Bu, kullanıcının bu bağlantıları takip ederek diğer kaynaklara erişmesini sağlar.
  • “type” anahtarları ise ilgili adreslere erişirken kullanılacak http methodlarını belirtmektedir.

HATEOAS’ı ilk duyduğumda zaten API dokümantasyonlarıda aynı işi yapmıyor mu diye düşünmüştüm. Belki sizde aynı şeyi düşünmüş olabilirsiniz.

HATEOAS ve API dokümantasyonu arasındaki fark, HATEOAS’in API’nin kendisine ait bir özellik olması, API dokümantasyonunun ise API’nin dışında bir belge olmasıdır. HATEOAS, bir REST API’sinin dinamik olarak yanıtlarında diğer kaynaklara bağlantılar içermesini ve istemcinin bu bağlantıları kullanarak sunucuyla etkileşimde bulunmasını sağlar. Böylece, istemci API’nin dokümantasyonunu okumadan API’yi keşfedebilir.

Uygulamalarımızda kullanmak istediğimizde ise ilgili sınıfı oluşturup daha sonra doldurduktan sonra mevcut response a ekleyebiliriz. Örneğin şöyle bir sınıf oluşturabiliriz:

public class Link(string href, string rel, string type)
{
    public string Href { get; init; } = href;
    public string Rel { get; init; } = rel;
    public string Type { get; init; } = type;
}

Bu tanımlama sonrası List<Link> tanımlayıp içerisine mevcut endpoint bilgilerini verip response içine ekleyebiliriz. Bu şekilde Restfull servislerimize HATEOAS desteği sağlamış oluruz.

İyi çalışmalar.

Yorum bırakın