Sobes.tech
Middle+

HATEOAS prinsipi haqqında danışın.

sobes.tech Süni İntellekt

AI-dan cavab

HATEOAS (Hypermedia tətbiqin vəziyyətinin mühərriki kimi) RESTful xidmətlərin əsas prinsipidir. Bu, müştərinin yalnız serverin cavablarda təqdim etdiyi hipermedia linkləri vasitəsilə tətbiqin vəziyyətləri arasında keçid etməli olduğunu nəzərdə tutur. Bu, API-ni öz-özünü kəşf edən və müəyyən URL-lərə daha az bağlı edən, onun elastikliyini və miqyaslanmasını artıran bir xüsusiyyətdir.

Tutaq ki, biz sifariş haqqında məlumat alırıq. HATEOAS olmadan, cavab belə görünə bilər:

{
  "order_id": 123,
  "status": "pending",
  "total": 100.50
}

Bu sifariş üzərində əməliyyatlar həyata keçirmək (məsələn, ödəniş və ya ləğv etmək) üçün, müştərinin əvvəlcədən uyğun URL-ləri və HTTP metodlarını bilməsi lazımdır.

HATEOAS ilə, server cavaba mövcud əməliyyatlara linklər əlavə edir:

{
  "order_id": 123,
  "status": "pending",
  "total": 100.50,
  "_links": {
    "self": { "href": "/api/orders/123" },
    "pay": { "href": "/api/orders/123/pay", "method": "POST" },
    "cancel": { "href": "/api/orders/123/cancel", "method": "PUT" }
  }
}

İndi, bu cavabı alan müştəri, mövcud əməliyyatları (pay, cancel) və onların URL-lərini görə bilər, API-nin strukturunu əvvəlcədən bilmədən. Əgər server ödəniş üçün URL-i dəyişsə, müştəri cavabda yenilənmiş linki alacaq və kodunu dəyişdirmədən davam edə biləcək.

HATEOAS-ın üstünlükləri:

  • Elastiklik: API, müəyyən URL-lərə daha az bağlı olur. Struktur və ya URL-də dəyişikliklər müştərinin yenidən kodlaşdırılmasını tələb etmir.
  • Öz-özünü kəşf etmə: Müştəri, cavablar içindəki linkləri izləyərək API-ni kəşf edə bilər.
  • API-nin inkişafı: Server yeni funksiyalar (yeni linklər) əlavə edə və ya köhnələrini silə bilər, və müştəri ona uyğunlaşa bilər.

HATEOAS-ın çatışmazlıqları:

  • İcra çətinliyi: Server hər cavabda linkləri yaratmalı və daxil etməlidir, bu daha mürəkkəb ola bilər.
  • Daha böyük cavablar: Cavablar hipermedia linklərinin daxil olması ilə daha böyük olur.
  • Müştəri logikası: Müştərinin loqikası bu linkləri idarə etmək və izləmək üçün uyğunlaşdırılmalıdır.

QA / QA Avtomatlaşdırmasında, HATEOAS istifadə edən API-ni test etmək xüsusi yanaşma tələb edir. Testlərdə URL-ləri sərt kodlaşdırmaq yerinə, cavablardan linkləri çıxarıb, onları növbəti sorğularda istifadə etmək lazımdır. Bu, API-dəki dəyişikliklərə qarşı testləri daha dayanıqlı edir. Məsələn, Java və RestAssured istifadə edərək:

// Sifariş haqqında məlumat alın
Response orderResponse = given()
    .when()
    .get("/api/orders/123")
    .then()
    .statusCode(200)
    .extract().response();

// Hipermedia linklərindən ödəniş URL-ni çıxarın
String payUrl = orderResponse.jsonPath().getString("_links.pay.href");
String payMethod = orderResponse.jsonPath().getString("_links.pay.method");

// Çıkarılan məlumatlarla ödəniş sorğusu həyata keçirin
given()
    .when()
    .request(payMethod, payUrl) // Sabit URL yerinə
    .then()
    .statusCode(200);

Beləliklə, HATEOAS, həqiqətən RESTful API-lər yaratmaq üçün vacib prinsipdir və elastikliyi və istifadə rahatlığını artırır. Testçilər üçün, bu, dinamik hipermedia linkləri ilə işləmək üçün test strategiyalarını uyğunlaşdırmağı tələb edir.