Network

https://developer.android.com/develop/connectivity/network-ops
https://developer.android.com/develop/connectivity/network-ops/connecting
https://developer.android.com/develop/connectivity/network-ops/managing
https://developer.android.com/develop/connectivity/network-ops/reading-network-state
https://developer.android.com/develop/connectivity/network-ops/network-access-optimization
https://developer.android.com/develop/connectivity/network-ops/data-saver
https://developer.android.com/training/monitoring-device-state/connectivity-status-type
https://developer.android.com/privacy-and-security/security-ssl
https://developer.android.com/privacy-and-security/security-config
https://developer.android.com/privacy-and-security/security-gms-provider
https://developer.android.com/privacy-and-security/security-android-protected-confirmation

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. Вопросы на собесе
  1. Что такое JSON, и как его парсить в Android?
  1. Что такое OkHttp, и как его использовать для выполнения сетевых запросов?
  1. Как использовать Retrofit для работы с REST API в Android?
  1. Что такое REST?
  1. Что такое GraphQL, и чем он отличается от REST?
  1. Как обеспечить безопасность сетевых запросов в Android приложении?
  1. Что такое SSL pinning и MITM?