Что такое REST?android-22

REST (Representational State Transfer) — это архитектурный стиль проектирования распределенных систем, впервые описанный Роем Филдингом в 2000 году. Рассмотрим ключевые аспекты REST применительно к Android-разработке.

Основные принципы REST

  1. Клиент-серверная архитектура

    • Четкое разделение ответственности
    • Клиент не зависит от хранилища данных
    • Сервер не зависит от UI
  2. Stateless (без состояния)

    // Плохо (с состоянием):
    GET /next_page  // Сервер должен помнить текущую страницу
    
    // Хорошо (RESTful):
    GET /pages?number=2
    
    • Каждый запрос содержит всю необходимую информацию
    • Сервер не хранит состояние клиента между запросами
  3. Кэширование

    • Ответы должны явно указывать возможность кэширования
    • Использование заголовков: Cache-Control, ETag, Last-Modified
  4. Единообразие интерфейса

    • Ресурсы идентифицируются URI
    // Примеры хороших URI:
    /users         // коллекция
    /users/42      // конкретный элемент
    /users/42/posts // подколлекция
    
  5. Слоистая система

    • Клиент не знает, подключен ли он напрямую к серверу или через промежуточные узлы

Ключевые концепции REST API

Ресурсы и представления

  • Ресурс - любой объект, который можно адресовать (пользователь, заказ)
  • Представление - форма описания ресурса (JSON, XML)
// Пример JSON-представления пользователя
{
  "id": 42,
  "name": "John Doe",
  "email": "john@example.com"
}

HTTP-методы

Метод Описание Пример использования
GETПолучить ресурсGET /users/42
POSTСоздать ресурсPOST /users с телом
PUTПолностью обновить ресурсPUT /users/42 с телом
PATCHЧастично обновить ресурсPATCH /users/42 с телом
DELETEУдалить ресурсDELETE /users/42

Коды состояния HTTP

  • 200 OK - успешный запрос
  • 201 Created - ресурс создан
  • 400 Bad Request - неверный запрос
  • 401 Unauthorized - требуется аутентификация
  • 404 Not Found - ресурс не существует
  • 500 Internal Server Error - ошибка сервера

Пример RESTful API в Android с Retrofit

interface UserApi {
    @GET("users/{id}")
    suspend fun getUser(@Path("id") userId: Long): User

    @POST("users")
    suspend fun createUser(@Body user: User): Response<Unit>

    @PUT("users/{id}")
    suspend fun updateUser(@Path("id") userId: Long, @Body user: User)

    @DELETE("users/{id}")
    suspend fun deleteUser(@Path("id") userId: Long)
}

Отличия REST от других подходов

  1. REST vs SOAP

    • REST использует HTTP, SOAP — свой протокол
    • REST обычно использует JSON, SOAP — XML
    • REST более легковесный
  2. REST vs GraphQL

    • REST имеет фиксированные эндпоинты
    • GraphQL позволяет клиенту запрашивать именно те данные, которые нужны

Преимущества REST

  • Масштабируемость
  • Простота понимания
  • Гибкость (поддержка разных форматов данных)
  • Кэшируемость

Недостатки REST

  • Может приводить к over-fetching (получение избыточных данных)
  • Несколько запросов для сложных данных
  • Нет стандартизации (разные реализации API)

Резюмируем:

REST — это архитектурный стиль, основанный на ресурсах, HTTP-методах и стандартных кодах состояния. В Android-разработке RESTful API чаще всего реализуют через Retrofit, что обеспечивает удобное и типобезопасное взаимодействие с сервером.