REST API: що це, HTTP методи та принцип роботи в мобільних застосунках

Автор: IT Sectr Опубліковано: 2026-03-06 Час читання: 9 хв

REST API — це архітектурний стиль взаємодії компонентів у розподіленій мережі, заснований на принципах Resource-Oriented Architecture та використовує протокол HTTP для передачі даних. Кожен ресурс у REST ідентифікується унікальним URL і підтримує набір стандартних операцій через HTTP методи: GET, POST, PUT, PATCH, DELETE. За даними ProgrammableWeb (2025), понад 75% всіх публічних веб-API побудовані на REST-архітектурі, що робить її стандартом де-факто для мобільної та веб-розробки. REST забезпечує масштабованість, незалежність клієнта та сервера та ефективне кешування, що особливо важливо для мобільних застосунків з нестабільним мережевим з’єднанням.

Головне

  • REST API — архітектурний стиль на основі HTTP методів для роботи з ресурсами
  • Використовує GET, POST, PUT, PATCH, DELETE для CRUD-операцій над даними
  • Ресурси ідентифікуються унікальними URL в ієрархічній структурі
  • Формат даних — переважно JSON, рідше XML або YAML
  • Клієнт і сервер незалежні — зміни на сервері не впливають на клієнта

Що таке REST API?

REST API (Representational State Transfer API) — це архітектурний стиль, запропонований Роєм Філдінгом у його докторській дисертації в 2000 році. Він визначає набір обмежень та принципів для проєктування мережевих протоколів. API, що відповідає цим обмеженням, називають RESTful. REST не є протоколом або стандартом — це архітектурний підхід, який використовує існуючі протоколи (переважно HTTP) для обміну даними між клієнтом та сервером.

Ключова ідея REST — ресурсно-орієнтована архітектура. Замість виклику методів на сервері (як у SOAP або RPC) клієнт оперує ресурсами: отримує їх список, створює нові, оновлює або видаляє. Кожен ресурс — це сутність предметної області: користувач, замовлення, товар, стаття. Ресурс має стан, який передається клієнту в стандартизованому форматі, зазвичай JSON. Сервер не зберігає стан клієнта між запитами — це принцип stateless, ключова вимога REST.

Основні характеристики REST API:

  • Stateless — кожен запит від клієнта містить всю інформацію, необхідну для його обробки
  • Cacheable — відповіді сервера повинні бути явно позначені як кешовані або некешовані
  • Layered system — архітектура може включати проміжні сервери, балансувальники навантаження, проксі
  • Uniform interface — єдиний інтерфейс взаємодії через HTTP методи, URL та статус-коди

Принципи REST архітектури

REST базується на шести архітектурних обмеженнях, сформульованих Філдінгом. Дотримання цих обмежень гарантує масштабованість, продуктивність та простоту інтеграції. Кожен принцип вирішує конкретну проблему розподілених систем — від необхідності кешування до вимог безпеки. Розглянемо кожен принцип детально.

ПринципОписПроблема, яку вирішує
Client-ServerРозділення клієнта та сервера, незалежна еволюціяЗв’язність компонентів
StatelessКожен запит містить всі дані для обробкиМасштабування серверів
CacheableВідповіді позначаються як кешовані або ніЗниження навантаження на мережу
Layered SystemПроміжні шари не видимі клієнтуБезпека та балансування
Uniform InterfaceЄдиний інтерфейс: ресурси, методи, статус-кодиСпрощення архітектури
Code on DemandОпціонально: передача виконуваного коду клієнтуРозширюваність на стороні клієнта

Принцип Uniform Interface додатково включає чотири під-обмеження: ідентифікація ресурсів через URI, маніпулювання ресурсами через представлення, самоописувані повідомлення та HATEOAS (гіпермедіа як двигун стану застосунку). Останнє під-обмеження часто ігнорується на практиці — більшість сучасних REST API не реалізують HATEOAS повною мірою, що веде до дискусій про те, чи є такий API “справжнім” RESTful.

Принцип Stateless — один з найважливіших для масштабування. Відсутність сесій на сервері означає, що будь-який екземпляр сервера може обробити будь-який запит. Це спрощує горизонтальне масштабування: достатньо додати нові сервери за балансувальником. Для мобільних застосунків stateless також означає, що запит може бути відправлений на будь-який сервер CDN, що критично для глобальної доступності.

HTTP методи в REST

Кожен HTTP метод в REST API відповідає певній операції над ресурсом: GET для читання, POST для створення, PUT для повного оновлення, PATCH для часткового оновлення, DELETE для видалення. Ідемпотентність методів — ключова характеристика: GET, PUT, DELETE — ідемпотентні (багаторазове виконання дає той самий результат), POST та PATCH — ні. Це важливо для обробки помилок мережі, коли клієнт не знає, чи дійшов запит до сервера.

  • GET — отримання ресурсу або списку ресурсів. Ідемпотентний, не змінює стан сервера
  • POST — створення нового ресурсу. Не ідемпотентний, кожен виклик створює новий ресурс
  • PUT — повна заміна ресурсу. Ідемпотентний, повторний виклик не змінює стан після першого
  • PATCH — часткове оновлення ресурсу. Частково ідемпотентний (залежить від реалізації)
  • DELETE — видалення ресурсу. Ідемпотентний, повторне видалення повертає 404, а не помилку

Статус коди HTTP є невід’ємною частиною REST API. Кожен код несе певний сенс: 200 OK для успішного GET, 201 Created для POST, 204 No Content для DELETE без тіла відповіді, 400 Bad Request при невалідних даних, 401 Unauthorized при відсутності аутентифікації, 404 Not Found при відсутності ресурсу. Правильне використання статус-кодів робить API само-документованим та спрощує налагодження.

Формати даних: JSON та інші

JSON (JavaScript Object Notation) — основний формат передачі даних в REST API. Його популярність пояснюється простотою, людською читабельністю та нативною підтримкою в JavaScript. JSON передається з заголовком Content-Type: application/json. Альтернативи включають XML (громіздкий, застаріваючий), YAML (зручний для конфігурації, рідше для API) та Protocol Buffers (бінарний, ефективний для високонавантажених систем).

Структура JSON-об—єкта в REST API зазвичай включає поля id, type та атрибути ресурсу. Для колекцій використовується JSON-масив з метаданими пагінації. Сучасні REST API слідують специфікації JSON:API (jsonapi.org) або JSON Schema для валідації відповідей. Використання єдиного формату даних спрощує розробку клієнтських бібліотек та генерацію документації.

Приклад JSON-відповіді для списку користувачів:

js
{
    "data": [
        {
            "id": 1,
            "name": "Анна Петрова",
            "email": "anna@example.com"
        }
    ],
    "meta": {
        "total": 42,
        "page": 1,
        "per_page": 10
    }
}

Вибір формату передачі даних впливає на продуктивність мобільного застосунку. JSON стискається через GZIP на 70-80%, що робить його прийнятним для більшості сценаріїв. Для real-time застосунків з великим обсягом даних (стрімінг, ігри) рекомендується переходити на бінарні протоколи або використовувати WebSocket в комбінації з Protocol Buffers.

Приклади REST API запитів

Розглянемо практичні приклади роботи з REST API на стороні мобільного застосунку. В якості прикладу візьмемо API для роботи з замовленнями в інтернет-магазині. Для кожного HTTP методу показано запит та очікувану відповідь сервера. Приклади демонструють типову структуру RESTful API, що використовується в мобільній розробці.

GET — отримання списку замовлень

Запит на отримання всіх замовлень користувача з пагінацією. Відповідь містить масив об—єктів замовлення та мета-інформацію для посторінкової навігації. Параметри page та per_page передаються через query string.

kotlin
// Retrofit інтерфейс для REST API
interface OrderApi {
    @GET("api/v1/orders")
    suspend fun getOrders(
        @Query("page") page: Int = 1,
        @Query("per_page") perPage: Int = 20
    ): Response<OrderListResponse>
}

POST — створення нового замовлення

Створення нового замовлення через POST запит. Сервер повертає статус 201 Created та створений об—єкт в тілі відповіді. Важливо: створення йде на колекцію /api/v1/orders, а не на конкретний ресурс — це стандартний RESTful патерн.

kotlin
@POST("api/v1/orders")
suspend fun createOrder(
    @Body order: CreateOrderRequest
): Response<OrderResponse>

// Приклад тіла запиту
data class CreateOrderRequest(
    val productId: String,
    val quantity: Int,
    val addressId: String
)

DELETE — видалення замовлення

Видалення ресурсу виконується методом DELETE за конкретним URL замовлення. Успішне видалення повертає 204 No Content. Ідемпотентність DELETE означає, що повторний запит до того ж URL поверне 404 Not Found, що коректно обробляється на клієнті.

kotlin
@DELETE("api/v1/orders/{id}")
suspend fun deleteOrder(
    @Path("id") orderId: String
): Response<Unit>

// Використання в ViewModel
fun removeOrder(orderId: String) {
    viewModelScope.launch {
        val response = api.deleteOrder(orderId)
        if (response.isSuccessful) {
            showSuccess()
        }
    }
}

Ці приклади демонструють типову реалізацію REST API на стороні Android з використанням Retrofit та Kotlin Coroutines. Для iOS-застосунків аналогічну роль виконує URLSession або бібліотека Alamofire в зв’язці з Codable-протоколами. Структура REST API залишається однаковою незалежно від платформи — змінюється лише спосіб виконання запитів.

RESTful API дизайн: практичні рекомендації

Проєктування якісного RESTful API вимагає дотримання угод, які роблять API інтуїтивно зрозумілим для розробників. Ресурси повинні іменуватися іменниками у множині (/users, /orders, /products), HTTP методи відображати операції, а URL — ієрархію вкладеності. Помилки повинні повертати стандартизований JSON з кодом та повідомленням, а не просто HTTP статус. Дотримання цих конвенцій знижує поріг входу для нових розробників та спрощує інтеграцію.

  • Іменування ресурсів — множина, kebab-case: /api/v1/user-orders, не /api/v1/getUserOrders
  • Фільтрація та сортування — через query параметри: ?status=active&sort=created_at:desc
  • Пагінація — курсорна для великих наборів, посторінкова для невеликих
  • Версіонування — через URL (/api/v2/) або заголовок Accept-Version
  • Помилки — єдиний формат: { "error": { "code": "VALIDATION_ERROR", "message": "..." } }
  • Rate limiting — заголовки X-RateLimit-Remaining та Retry-After

Одна з частих помилок при проєктуванні REST API — надмірна вкладеність ресурсів. Замість /users/1/orders/5/items/3 краще використовувати пласку структуру з query-параметрами: /items?order_id=5&user_id=1. Це спрощує кешування, не вимагає підтримки довгих шляхів на сервері та легше документується. Пласка архітектура також краще сумісна з graph-based запитами при переході на GraphQL в майбутньому.

Безпека REST API реалізується через аутентифікацію (JWT, OAuth 2.0) та авторизацію на рівні ресурсів. Кожен запит повинен перевіряти, чи має користувач доступ до запитуваного ресурсу. HTTPS обов’язковий — без шифрування токени та дані передаються у відкритому вигляді. Для мобільних застосунків рекомендується використовувати OAuth 2.0 з PKCE (Proof Key for Code Exchange) для безпечного отримання токенів.

Версіонування та кешування

Версіонування REST API необхідне для зворотної сумісності при змінах. Найбільш поширені підходи: версія в URL (/api/v1/orders), версія в заголовку (Accept: application/vnd.myapi.v1+json) та версія в query-параметрі (?api_version=1). URL-версіонування — найпопулярніший метод, оскільки він явно видно в логах та документації. Однак він порушує принцип REST про єдиний URL ресурсу.

Кешування в REST API реалізується через HTTP заголовки Cache-Control, ETag та Last-Modified. GET-запити, позначені як кешовані, можуть обслуговуватися з кешу браузера або проксі без звернення до сервера. Для мобільних застосунків кешування особливо важливе — воно знижує витрати трафіку та прискорює відображення раніше завантажених даних при поганому з’єднанні. ETag — це хеш вмісту відповіді: клієнт відправляє його в If-None-Match, а сервер повертає 304 Not Modified, якщо дані не змінилися.

Сучасні альтернативи REST API включають GraphQL (гнучка вибірка даних клієнтом) та gRPC (бінарний протокол на HTTP/2 для мікросервісів). Однак REST залишається основним стандартом для публічних API завдяки своїй простоті, універсальності та широкій підтримці інструментів. Вибір між REST та альтернативами залежить від конкретних вимог проєкту: складності запитів, обсягу даних, вимог до real-time оновлень.

Часто задавані питання

У чому різниця між REST та RESTful?

REST — архітектурний стиль, набір принципів. RESTful — API, який відповідає цим принципам. RESTful API дотримується stateless, єдиного інтерфейсу, кешування та клієнт-серверної архітектури.

Чому REST API використовує JSON, а не XML?

JSON легший за XML (~30% менше за розміром), швидше парситься та має нативну підтримку в JavaScript. XML все ще використовується в SOAP та legacy-системах, але для мобільних API JSON є стандартом.

Як забезпечити безпеку REST API?

Використовуйте HTTPS для шифрування, JWT або OAuth 2.0 для аутентифікації. Додайте Rate Limiting, валідацію вхідних даних, CORS політику та перевірку ролей на кожен запит.

Що таке HATEOAS в REST?

HATEOAS — принцип, при якому відповідь API містить посилання на пов—язані ресурси. Клієнт “навігує” по API через ці посилання, а не за попередньо відомими URL. На практиці HATEOAS рідко реалізується повністю.

Коли варто відмовитися від REST?

Якщо потрібна гнучка вибірка даних — переходьте на GraphQL. Для високої продуктивності між мікросервісами — gRPC. Для real-time оновлень — WebSocket. REST оптимальний для більшості публічних API.

Підсумки

  • REST API — архітектурний стиль на базі HTTP, що використовує ресурсно-орієнтований підхід
  • Основні методи: GET, POST, PUT, PATCH, DELETE для CRUD-операцій
  • Принципи: stateless, кешування, єдиний інтерфейс, клієнт-серверна архітектура
  • Формат даних — JSON, що передається з Content-Type: application/json
  • Ресурси іменуються іменниками у множині з ієрархічною структурою URL
  • Версіонування виконується через URL (/v1/, /v2/) або заголовки Accept
  • Альтернативи: GraphQL для гнучкої вибірки, gRPC для мікросервісів, WebSocket для real-time

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також