Sobes.tech
Middle

REST memarlığı haqqında anlayışınız nədir və onu layihələrinizdə necə tətbiq etmisiniz?

sobes.tech Süni İntellekt

AI-dan cavab

REST - bu arxitektura deyil, paylanmış sistemlər üçün dizayn prinsiplərinin toplusudur. Əsas prinsiplər:

  • Client-server: Məsuliyyətlərin bölünməsi. Müştəri resursları soruşur, server isə onları təmin edir.
  • Stateless (Vəziyyətsiz): Server müştərinin vəziyyəti haqqında məlumat saxlamır. Hər bir sorğu müştəridən bütün lazım olan məlumatları ehtiva edir.
  • Cacheable (Keşlənə bilən): Müştərilər və aralıq düyünlər serverin cavablarını keşləyə bilər. Server keşləmə imkanını göstərməlidir.
  • Layered System (Layered Sistem): Müştəri birbaşa son serverlə əlaqə qurmaq məcburiyyətində deyil; aralıq qatlarla (məsələn, yük balanslaşdırıcılar, proxy-lər) əlaqə qura bilər.
  • Code on Demand (İstəyə bağlı): Serverin icra edilə bilən kodu müştəriyə təqdim etmə imkanı (məsələn, JavaScript). iOS inkişafında nadir hallarda istifadə olunur.
  • Uniform Interface (Birləşmiş İnterfeys): Ən vacib prinsip. Əlaqə quruluşunu və formatını müəyyən edir:
    • Resource Identification in Requests: Resurslar unikal URI-lərlə tanınır.
    • Manipulation of Resources Through Representations: Müştəri resursları onların nümayişləri (məsələn, JSON, XML) vasitəsilə idarə edir.
    • Self-descriptive Messages: Hər bir mesaj kifayət qədər məlumat ehtiva edir.
    • Hypermedia as the Engine of Application State (HATEOAS): Server cavabın gövdəsində digər mövcud əməliyyatlara və ya resurslara linklər təqdim edir. Müştərinin tətbiq vəziyyətləri arasında keçid etməsinə imkan verir.

iOS layihələrində RESTful arxitekturasını aşağıdakı yanaşmalarla tətbiq etdim:

  1. API ilə işləmək: Əsas əlaqə RESTful API vasitəsilə həyata keçirilirdi, məlumatlara və funksionallığa HTTP metodları (GET, POST, PUT, DELETE) ilə çıxış təmin edirdi.
  2. Framework-lərdən istifadə: URLSession (native) və ya üçüncü tərəf kitabxanalar, məsələn, Alamofire, HTTP sorğularını yerinə yetirmək və cavabları işləmək üçün istifadə olunurdu.
    // URLSession istifadə edərək sorğu nümunəsi
    let url = URL(string: "https://api.example.com/users/1")!
    let task = URLSession.shared.dataTask(with: url) { data, response, error in
        guard let data = data, error == nil else {
            print("Xəta: \(error?.localizedDescription ?? "Naməlum xəta")")
            return
        }
    
        // Cavabın JSON formatında olduğunu fərz edirik
        if let json = try? JSONSerialization.jsonObject(with: data, options: []) {
            print(json)
        }
    }
    task.resume()
    
  3. Məlumatların işlənməsi: JSON cavablarının parsinqi JSONDecoder və ya digər metodlarla həyata keçirilirdi.
    // JSON cavabını deşifrə nümunəsi
    struct User: Decodable {
        let id: Int
        let name: String
    }
    
    func parseUserData(data: Data) {
        let decoder = JSONDecoder()
        if let user = try? decoder.decode(User.self, from: data) {
            print("İstifadəçi ID: \(user.id), Ad: \(user.name)")
        } else {
            print("JSON deşifrə uğursuz oldu")
        }
    }
    
  4. Məlumatların modelləşdirilməsi: Serverdən alınan resursları təmsil edən Swift modelləri yaradıldı.
  5. Arxitektura nümunələri: REST API ilə işləmə müxtəlif arxitektura nümunələrinə (MVC, MVVM, MVP, VIPER) uyğunlaşdırıldı. Məsələn, MVVM-də şəbəkə ilə işləmə loqikası tez-tez Servis və ya Repository qatında olur.
  6. Keşləmə: URLSession-un daxili keşləmə mexanizmlərindən istifadə və ya tətbiq səviyyəsində məlumatların keşlənməsi üçün öz logikasını həyata keçirdi, performansı artırmaq və offline rejimdə işləmək üçün.
  7. Xəta idarəetməsi: API-dən alınan detallı xəta idarəetməsi (məsələn, 401 Unauthorized, 404 Not Found) həyata keçirildi, istifadəçiyə məlumat verildi və ya müvafiq tədbirlər görüldü.

Birləşmiş İnterfeys və Stateless prinsipləri, iOS müştəri tətbiqi ilə backend arasında qarşılıqlı əlaqəni dizayn edərkən əsas idi, API-ni proqnozlaşdırıla bilən və miqyaslana bilən etdi.