Network
Protocol Buffers
Protobufs. Метод сериализации структурированных данных. Поддерживает различные языки программирования.
gRPC
Google Remote Procedure Call. Удаленный вызов процедур. Фреймворк для использования Protocol Buffers. Позволяет приложению и серверу взаимодействовать простым, прозрачным и эффективным способом.
JSON
JavaScript Object Notation. Облегченный формат обмена данными. Людям легко читать и писать. Машины легко анализируют и генерируют. Коллекция пар имя/значение.
WebSockets
Позволяют реализовать двустороннюю связь в режиме реального времени. Отправка данных от сервера к клиенту. Пример: мессенджеры.
SSL pinning
Техника безопасности, используемая для защиты приложений от атак “человек посередине” (MITM) при установлении защищенных соединений через HTTPS. Эта техника помогает убедиться, что приложение общается только с заранее известными и доверенными серверами, предотвращая возможность подключения к злоумышленным серверам, даже если их сертификаты подписаны доверенными центрами сертификации (CA). OkHttp поддерживает SSL pinning из коробки.
fun createOkHttpClient(): OkHttpClient {
val certificatePinner = CertificatePinner.Builder()
.add("example.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") // Хэш сертификата
.build()
return OkHttpClient.Builder()
.certificatePinner(certificatePinner)
.build()
}
GraphQL
Это синтаксис который описывает как запрашивать данные и в основном используется клиентом для загрузки данных с сервера. GraphQL имеет три основные характеристики:
• позволяет клиенту точно указать, какие данные ему нужны.
• облегчает агрегацию данных из нескольких источников.
• использует систему типов для описания данных.
GraphQL разработали в Facebook для замены REST. Из-за загрузки дополнительных данных приложение работает медленнее. Запросы разбиваются на множество endpoints. Они хранятся в разных БД. REST достигает своего предела. Вместо того чтобы иметь множество глупых endpoins лучше иметь один умный endpoint который будет способен работать со сложными запросами и придавать данным такую форму какую запрашивает клиент.
Cлой GraphQL находится между клиентом и одним или несколькими источниками данных. Он принимает запросы клиентов и возвращает необходимые данные в соответствии с переданными инструкциями.
REST-модель - это заказывать пиццу затем продукты затем химчистку. Три сервиса - три звонка. GraphQL - это передать все помощнику и запрашивать то что нужно.
REST
Representational state transfer. Стиль архитектуры ПО для всемирной паутины и веб-служб, упрощающий взаимодействие систем друг с другом. Системы совместимые с REST (или RESTful) не имеют состояния и разделяют задачи клиента и сервера.
GET | Получить конкретный ресурс или набор ресурсов. |
POST | Создать новый ресурс. |
PUT | Обновить конкретный ресурс. Требует полного дублирования всех полей объекта вместе с измененными: непродублированные поля будут затерты. Работает как присваивание. |
PATCH | Обновить конкретный ресурс. Позволяет отправить несколько полей. |
DELETE | Удалить определенный ресурс. |
OKHTTP
HTTP-клиент для Android.
Interceptors
Перехватчик. Механизм для работы с сетевыми вызовами: отслеживание повтор логирование исходящих запросов и входящих ответов.
• подразделяются на application и network.
• вызываются по порядку.
• могут перезаписывать заголовки ответов и преобразовывать тело ответа.
application interceptors
• регистрируется через addInterceptor
• всегда вызывается 1 раз, даже если ответ из кэша.
• не нужно беспокоиться о промежуточных ответах: перенаправления и повторные попытки.
network interceptors
• регистрируется через addNetworkInterceptor
• не вызываются, если ответ из кэша.
• работают с промежуточными вызовами: перенаправления и повторные попытки.
Android Network. Вопросы на собесе
- Что такое JSON, и как его парсить в Android?
- Что такое OkHttp, и как его использовать для выполнения сетевых запросов?
- Как использовать Retrofit для работы с REST API в Android?
- Что такое REST?
- Что такое GraphQL, и чем он отличается от REST?
- Как обеспечить безопасность сетевых запросов в Android приложении?
- Что такое SSL pinning и MITM?