Что такое RESTful API?

«Что такое RESTful API?» — вопрос из категории Сети, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

RESTful API — это интерфейс программирования приложений, построенный в соответствии с архитектурным стилем REST (Representational State Transfer). Его основная идея — представление данных и операций над ними как ресурсов, доступ к которым осуществляется через стандартные HTTP-методы.

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

  • Ресурсы: Каждая сущность (пользователь, заказ, статья) является ресурсом с уникальным идентификатором — URI (например, /api/users/42).
  • HTTP-методы для операций CRUD:
    • GET — получение ресурса или списка ресурсов.
    • POST — создание нового ресурса.
    • PUT / PATCH — полное или частичное обновление ресурса.
    • DELETE — удаление ресурса.
  • Без состояния (Stateless): Сервер не хранит состояние клиента между запросами. Каждый запрос должен содержать всю необходимую для его обработки информацию (например, токен аутентификации в заголовках).
  • Представление ресурсов: Данные передаются в стандартных форматах, чаще всего JSON или XML.

Пример клиента на C++ с использованием библиотеки cpr (обертка над libcurl):

#include <cpr/cpr.h>
#include <iostream>
#include <nlohmann/json.hpp> // Для работы с JSON

using json = nlohmann::json;

int main() {
    // 1. GET-запрос для получения данных о пользователе
    cpr::Response r = cpr::Get(cpr::Url{"https://api.example.com/users/1"});
    if (r.status_code == 200) {
        auto user_data = json::parse(r.text);
        std::cout << "User name: " << user_data["name"] << std::endl;
    }

    // 2. POST-запрос для создания нового пользователя
    json new_user = {
        {"name", "Alice"},
        {"email", "alice@example.com"}
    };
    cpr::Response post_r = cpr::Post(
        cpr::Url{"https://api.example.com/users"},
        cpr::Header{{"Content-Type", "application/json"}},
        cpr::Body{new_user.dump()}
    );
    std::cout << "Create status: " << post_r.status_code << std::endl;

    return 0;
}

Почему REST популярен? Он прост для понимания, использует вездесущий HTTP, легко интегрируется с различными языками и клиентами (браузеры, мобильные приложения, серверные сервисы), что делает его стандартом де-факто для веб-API.