> Какие прикладные протоколы используются в проекте (iOS, Swift)
Уровень: senior · Роль: mobile · Категория: Технические вопросы
Компании: Лингуа Лео
Стек: iOS, Swift
> Пример ответа
Короткий ответ
В iOS-проектах прикладные протоколы зависят от задач: для REST API - HTTP/HTTPS с JSON, для реального времени - WebSocket, для фоновой передачи - URLSession с фоновыми конфигурациями. Также часто используются gRPC для внутренних сервисов, GraphQL для гибкой выборки данных, и push-уведомления через APNs. Выбор определяется требованиями к latency, надёжности и типу данных.
Подробное объяснение
Прикладной уровень модели OSI - это слой, где определяются форматы данных и правила взаимодействия между приложениями. В мобильной разработке iOS это прежде всего:
- HTTP/HTTPS - базовый протокол для REST и GraphQL. Используется через URLSession или сторонние библиотеки (Alamofire, Moya). Важно: HTTP/2 поддерживается нативно, что даёт мультиплексирование и сжатие заголовков.
- WebSocket - для двусторонней связи в реальном времени (чаты, котировки, совместное редактирование). В iOS доступен через URLSessionWebSocketTask.
- gRPC - на основе HTTP/2, использует protobuf для сериализации. Подходит для высоконагруженных внутренних сервисов, где важна производительность и строгая типизация.
- GraphQL - над HTTP, позволяет клиенту запрашивать только нужные поля. В iOS часто используется с Apollo iOS.
- APNs (Apple Push Notification service) - проприетарный протокол для доставки push-уведомлений, работает поверх HTTP/2.
- MQTT - лёгкий протокол для IoT и телеметрии, может использоваться в iOS-приложениях для умных устройств.
Выбор протокола также влияет на обработку ошибок, кэширование, безопасность (TLS, сертификаты) и энергопотребление.
На практике
В реальном проекте обычно комбинируют протоколы:
- Основной REST API для CRUD-операций - HTTP/HTTPS с JSON.
- WebSocket для событий в реальном времени (например, обновление статуса заказа).
- gRPC для внутренних микросервисов, если backend уже использует его.
- GraphQL, если клиенту нужна гибкая выборка данных и сокращение числа запросов.
- Фоновые загрузки - через URLSession с background configuration, чтобы система сама управляла передачей.
Важно учитывать: на уровне приложения протокол не выбирается изолированно - он связан с архитектурой (например, Clean Architecture требует абстракции над сетевым слоем), с обработкой offline-режима (кэширование, очереди запросов) и с безопасностью (pin-сертификаты, OAuth2 поверх HTTPS).
Пример кода
Пример WebSocket-клиента на URLSession:
SWIFTfinal class WebSocketClient {private var task: URLSessionWebSocketTask?private let session = URLSession(configuration: .default)func connect(to url: URL) {task = session.webSocketTask(with: url)task?.resume()receive()}private func receive() {task?.receive { [weak self] result inswitch result {case .success(let message):switch message {case .string(let text):print("Received: \(text)")case .data(let data):print("Received data: \(data.count) bytes")@unknown default:break}self?.receive() // continue listeningcase .failure(let error):print("Error: \(error)")}}}func send(_ text: String) {task?.send(.string(text)) { error inif let error = error {print("Send error: \(error)")}}}func disconnect() {task?.cancel(with: .goingAway, reason: nil)}}
Как отвечать на собеседовании
- Начни с перечисления основных протоколов, которые реально используются в iOS-разработке.
- Свяжи выбор протокола с требованиями: latency, размер данных, real-time, оффлайн.
- Упомяни, что HTTP/HTTPS - базовый, а WebSocket/gRPC/GraphQL - надстройки или альтернативы.
- Покажи понимание ограничений: например, WebSocket не подходит для фоновой работы, gRPC требует генерации кода.
- Если спросят про конкретный проект - опиши, как ты выбирал протокол и какие trade-off учитывал.
Что проверяет интервьюер
- Понимание прикладного уровня и его роли в сетевом стеке.
- Умение обосновать выбор протокола под задачу.
- Знание возможностей iOS SDK (URLSession, WebSocketTask, background tasks).
- Понимание ограничений мобильных сетей (переключение между Wi-Fi/cellular, энергопотребление).
- Способность проектировать сетевой слой с учётом ошибок, ретраев и кэширования.
Типичные ошибки
- Называть только HTTP и не упоминать WebSocket/gRPC/GraphQL - это показывает узкий кругозор.
- Путать прикладной протокол с транспортным (TCP/UDP) - это разные уровни.
- Игнорировать фоновые ограничения iOS: например, WebSocket не работает в фоне без специальных настроек.
- Не учитывать безопасность: говорить про HTTP без HTTPS или не упоминать TLS.
- Предлагать gRPC/GraphQL без обоснования - интервьюер может спросить, зачем это нужно, если REST достаточно.
> Похожие задачи по mobile
Что такое Set, его особенности, зачем нужен и какие есть реализации
Почему предпочтительнее использовать Dependency Injection вместо создания объектов вручную
Есть ли опыт работы с GraphQL
Что означает ошибка компиляции при отсутствии атрибута escaping?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью