> Какие прикладные протоколы используются в проекте (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:

SWIFT
final 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 in
switch 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 listening
case .failure(let error):
print("Error: \(error)")
}
}
}
func send(_ text: String) {
task?.send(.string(text)) { error in
if 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 достаточно.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью