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 архитектураны келесі тәсілдермен қолдандым:
- API-мен жұмыс: Негізгі өзара әрекеттесу RESTful API арқылы жүзеге асырылды, ол деректер мен функционалға HTTP әдістері (GET, POST, PUT, DELETE) арқылы қол жеткізуді қамтамасыз етеді.
- Фреймворктерді пайдалану:
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() - Деректерді өңдеу: 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-ды декодтау сәтсіз болды") } } - Деректер моделін жасау: Серверден алынған ресурстарды көрсететін Swift-модельдер жасалды.
- Архитектуралық паттерндер: REST API-мен жұмыс істеу архитектуралық паттернге (MVC, MVVM, MVP, VIPER) байланысты жүзеге асырылды. Мысалы, MVVM-де желімен жұмыс істеу логикасы жиі Сервистер немесе Репозиторийлер деңгейінде орналасады.
- Кэштеу: URLSession-нің ішкі кэштеу механизмдерін пайдаланды немесе қосымша деңгейінде деректерді кэштеу логикасын жүзеге асырды.
- Қате өңдеу: API-ден алынған қателерді (мысалы, 401 рұқсат етілмеген, 404 табылмады) нақтылап өңдеп, пайдаланушыға хабарлады немесе тиісті әрекеттер жасады.
Uniform Interface және Stateless қағидалары клиенттік iOS-қосымша мен сервер арасындағы өзара әрекеттесуді жобалау кезінде негізгі болды, олар API-ды болжамды әрі масштабталатын етеді.