Sobes.tech
Middle

REST архитектурасын қалай түсінесіз және оны жобаларыңызда қалай қолдандыңыз?

sobes.tech AI

AI-дан жауап

REST - бұл архитектура емес, бөлінген жүйелер үшін дизайн қағидалары жиынтығы. Негізгі қағидалар:

  • Клиент-сервер: Жауапкершілікті бөлу. Клиент ресурстарды сұрайды, сервер оларды ұсынады.
  • Stateless (жағдайды сақтау): Сервер клиенттің жағдай туралы ақпаратын сақтамайды. Әр сұрауда клиенттің барлық қажетті ақпараттары бар.
  • Cacheable (кэштеу мүмкіндігі): Клиенттер мен аралық түйіндер сервердің жауаптарын кэштеуі мүмкін. Сервер кэштеу мүмкіндігін көрсетуі керек.
  • Layered System (қабатталған жүйе): Клиент міндетті түрде тікелей соңғы сервермен өзара әрекеттеспейді; ол аралық қабаттармен (мысалы, жүктемені теңестірушілер, проксилер) өзара әрекеттесе алады.
  • Code on Demand (міндетті емес): Сервер клиентке орындалатын кодты ұсыну мүмкіндігі (мысалы, JavaScript). iOS-да сирек пайдаланылады.
  • Uniform Interface (біркелкі интерфейс): Ең маңызды қағида. Өзара әрекеттесу құрылымы мен форматтарын анықтайды:
    • Resource Identification in Requests: Ресурстар бірегей URI арқылы анықталады.
    • Manipulation of Resources Through Representations: Клиент ресурстарды өңдейді, оларды JSON, XML сияқты репрезентациялар арқылы серверге жібереді.
    • Self-descriptive Messages: Әр хабарлама оның өңделуіне жеткілікті ақпаратты қамтиды.
    • Hypermedia as the Engine of Application State (HATEOAS): Сервер басқа қол жетімді әрекеттер немесе ресурстарға сілтемелерді жауап денесінде ұсынады. Бұл клиентке гипермедиа арқылы қосымшаның күйін өзгертуге мүмкіндік береді.

iOS-жобаларында мен RESTful архитектураны келесі тәсілдермен қолдандым:

  1. API-мен жұмыс: Негізгі өзара әрекеттесу RESTful API арқылы жүзеге асырылды, ол деректер мен функционалға HTTP әдістері (GET, POST, PUT, DELETE) арқылы қол жеткізуді қамтамасыз етеді.
  2. Фреймворктерді пайдалану: URLSession (туынды) немесе үшінші тарап кітапханалары, мысалы, Alamofire, HTTP сұрауларын орындау және жауаптарды өңдеу үшін қолданылды.
    // URLSession қолдану мысалы
    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("Қате: \(error?.localizedDescription ?? "Белгісіз қате")")
            return
        }
    
        // Жауап JSON форматында деп болжанады
        if let json = try? JSONSerialization.jsonObject(with: data, options: []) {
            print(json)
        }
    }
    task.resume()
    
  3. Деректерді өңдеу: JSON-жауаптарды JSONDecoder немесе басқа әдістермен парсинг жасалды.
    // JSON-жауапты декодтау мысалы
    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("Пайдаланушы ID: \(user.id), Аты: \(user.name)")
        } else {
            print("JSON-ды декодтау сәтсіз болды")
        }
    }
    
  4. Деректер моделін жасау: Серверден алынған ресурстарды көрсететін Swift-модельдер жасалды.
  5. Архитектуралық паттерндер: REST API-мен жұмыс істеу архитектуралық паттернге (MVC, MVVM, MVP, VIPER) байланысты жүзеге асырылды. Мысалы, MVVM-де желімен жұмыс істеу логикасы жиі Сервистер немесе Репозиторийлер деңгейінде орналасады.
  6. Кэштеу: URLSession-нің ішкі кэштеу механизмдерін пайдаланды немесе қосымша деңгейінде деректерді кэштеу логикасын жүзеге асырды.
  7. Қате өңдеу: API-ден алынған қателерді (мысалы, 401 рұқсат етілмеген, 404 табылмады) нақтылап өңдеп, пайдаланушыға хабарлады немесе тиісті әрекеттер жасады.

Uniform Interface және Stateless қағидалары клиенттік iOS-қосымша мен сервер арасындағы өзара әрекеттесуді жобалау кезінде негізгі болды, олар API-ды болжамды әрі масштабталатын етеді.