REST - это не архитектура, а набор принципов дизайна для распределенных систем. Основные принципы:
- Клиент-сервер: Разделение ответственности. Клиент запрашивает ресурсы, сервер их предоставляет.
- Stateless (Несохранение состояния): Сервер не хранит информацию о состоянии клиента между запросами. Каждый запрос клиента содержит всю необходимую для его обработки информацию.
- Cacheable (Возможность кеширования): Клиенты и промежуточные узлы могут кешировать ответы сервера. Сервер должен указывать возможность кеширования.
- Layered System (Многослойная система): Клиент не обязательно взаимодействует непосредственно с финальным сервером; он может взаимодействовать с промежуточными слоями (например, балансировщиками нагрузки, прокси).
- Code on Demand (Необязательный): Возможность сервера предоставлять исполняемый код клиенту (например, JavaScript). В iOS-разработке используется редко.
- Uniform Interface (Единообразный интерфейс): Наиболее важный принцип. Определяет структуру и формат взаимодействия:
- Resource Identification in Requests: Ресурсы идентифицируются уникальными URI.
- Manipulation of Resources Through Representations: Клиент манипулирует ресурсами, отправляя их 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
, для выполн