PurpleSchool — курсы программирования онлайн
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развитияВопросы для собеседований
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Что такое REST API и как его правильно проектировать

    Что такое REST API и как его правильно проектировать

    Аватар автора Что такое REST API и как его правильно проектировать

    Антон Ларичев

    Иконка календаря22 июня 2026
    REST APIHTTPbackendпроектирование APIвеб-разработкаjuniorИконка уровня junior
    Картинка поста Что такое REST API и как его правильно проектировать

    Введение

    REST API — один из самых распространённых способов организации взаимодействия между клиентом и сервером. Большинство современных веб-приложений и мобильных клиентов общаются с бэкендом именно через REST. Чтобы грамотно проектировать такие интерфейсы, нужно понять базовые принципы архитектурного стиля REST и научиться применять их на практике.

    Что такое REST

    REST расшифровывается как Representational State Transfer — передача состояния представления. Это не протокол и не стандарт, а набор архитектурных ограничений, сформулированных Роем Филдингом в 2000 году. API, которое следует этим ограничениям, называют RESTful.

    Ключевые принципы REST:

    • Клиент-серверная архитектура — клиент и сервер независимы и общаются через стандартный интерфейс.
    • Отсутствие состояния (stateless) — каждый запрос содержит всю информацию для его обработки. Сервер не хранит контекст между запросами.
    • Кэшируемость — ответы сервера должны явно указывать, можно ли их кэшировать.
    • Единообразие интерфейса — ресурсы идентифицируются через URI, взаимодействие происходит через стандартные HTTP-методы.
    • Многоуровневая система — между клиентом и сервером могут быть промежуточные узлы: прокси, балансировщики.

    HTTP-методы и их назначение

    REST использует стандартные методы HTTP для описания действий над ресурсами:

    Метод Назначение Идемпотентность
    GET Получить ресурс Да
    POST Создать ресурс Нет
    PUT Полностью заменить ресурс Да
    PATCH Частично обновить ресурс Нет
    DELETE Удалить ресурс Да

    Пример запросов для работы с пользователями:

    # Получить список всех пользователей
    GET /users
    
    # Получить конкретного пользователя
    GET /users/42
    
    # Создать нового пользователя
    POST /users
    Content-Type: application/json
    
    {
      "name": "Иван Петров",
      "email": "ivan@example.com"
    }
    
    # Частично обновить данные пользователя
    PATCH /users/42
    Content-Type: application/json
    
    {
      "email": "ivan.new@example.com"
    }
    
    # Удалить пользователя
    DELETE /users/42
    

    Правильное проектирование URL-маршрутов

    Одна из самых важных частей REST — правильное именование ресурсов.

    Используйте существительные во множественном числе:

    # Правильно
    GET /articles
    GET /articles/5
    
    # Неправильно — глаголы в URL
    GET /getArticles
    POST /createArticle
    

    Вложенные ресурсы отражают иерархию:

    # Все комментарии конкретной статьи
    GET /articles/5/comments
    
    # Конкретный комментарий статьи
    GET /articles/5/comments/12
    

    Фильтрация, сортировка и пагинация — через query-параметры:

    # Фильтрация по категории
    GET /articles?category=javascript
    
    # Сортировка с пагинацией
    GET /articles?sort=createdAt&order=desc&page=2&limit=10
    

    Коды HTTP-ответов

    Правильное использование статус-кодов — признак хорошо спроектированного API:

    # Успешные ответы
    200 OK                   — стандартный успех
    201 Created              — ресурс создан (ответ на POST)
    204 No Content           — успех без тела ответа (ответ на DELETE)
    
    # Ошибки клиента
    400 Bad Request          — некорректный запрос
    401 Unauthorized         — не авторизован
    403 Forbidden            — доступ запрещён
    404 Not Found            — ресурс не найден
    422 Unprocessable Entity — ошибка валидации данных
    
    # Ошибки сервера
    500 Internal Server Error — внутренняя ошибка сервера
    503 Service Unavailable   — сервис временно недоступен
    

    Пример обработки ошибок на Node.js с Express:

    app.get('/articles/:id', async (req, res) => {
      const article = await Article.findById(req.params.id);
    
      // Возвращаем 404, если статья не найдена
      if (!article) {
        return res.status(404).json({
          error: 'Статья не найдена',
          code: 'ARTICLE_NOT_FOUND'
        });
      }
    
      res.status(200).json({ data: article });
    });
    

    Формат ответов и версионирование

    Единообразный формат ответов упрощает работу клиентов с API:

    {
      "data": {
        "id": 42,
        "name": "Иван Петров",
        "email": "ivan@example.com"
      },
      "meta": {
        "requestId": "abc-123"
      }
    }
    

    Для списков с пагинацией:

    {
      "data": [],
      "pagination": {
        "page": 1,
        "limit": 10,
        "total": 245,
        "pages": 25
      }
    }
    

    Версионирование позволяет вносить изменения без поломки существующих клиентов. Самый распространённый подход — версия в URL:

    /api/v1/users
    /api/v2/users
    

    Альтернатива — версия в заголовке запроса:

    Accept: application/vnd.api+json;version=2
    

    Частые ошибки

    Глаголы в URL вместо существительных

    REST строится вокруг ресурсов, а не действий — для действий есть HTTP-методы.

    # Плохо
    POST /createUser
    POST /deleteUser/42
    GET  /getUserById?id=42
    
    # Хорошо
    POST   /users
    DELETE /users/42
    GET    /users/42
    

    Игнорирование HTTP-кодов

    Возвращать 200 OK с {"error": "not found"} в теле — антипаттерн. Клиенты ориентируются на статус-код, а не только на тело ответа.

    Отсутствие пагинации

    Возвращать тысячи записей одним запросом — проблема производительности. Всегда добавляйте пагинацию для коллекций ресурсов.

    Несогласованное именование полей

    Выбирайте одну конвенцию и придерживайтесь её во всём API:

    // Плохо — смешение стилей
    { "userId": 1, "user_name": "Иван", "UserEmail": "ivan@example.com" }
    
    // Хорошо — единый camelCase
    { "userId": 1, "userName": "Иван", "userEmail": "ivan@example.com" }
    

    Хранение состояния на сервере

    REST требует stateless-архитектуры. Не храните данные о сессии в памяти сервера — используйте JWT или другие механизмы передачи состояния через запрос.

    Заключение

    REST API — это не просто способ передачи данных, а архитектурный стиль, который при правильном применении делает интерфейс интуитивным, масштабируемым и удобным в поддержке. Главные принципы: ресурсы идентифицируются через URL, действия описываются HTTP-методами, статус ответа отражается кодом, формат ответов единообразен. Следуя этим правилам, вы создадите API, с которым будет приятно работать как фронтенд-разработчикам, так и сторонним потребителям вашего сервиса.

    Иконка глаза6

    Комментарии

    0

    Постройте личный план изучения Angular до уровня Middle — бесплатно!

    Angular — часть карты развития Frontend

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Лучшие курсы по теме

    изображение курса

    Основы разработки

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга5.0
    бесплатно
    Подробнее
    изображение курса

    Основы Git

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    HTML и CSS

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее

    Похожие статьи

    Картинка поста Микросервисы vs монолит: как выбрать архитектуру проекта
    Иконка аватараАнтон
    Иконка календаря10 июня 2026
    архитектурамикросервисымонолит+ 2middleИконка уровня middle

    Микросервисы vs монолит: как выбрать архитектуру проекта

    Микросервисы vs монолит — разбираем плюсы и минусы обеих архитектур, показываем примеры кода и помогаем выбрать подход под ваш проект.

    Иконка чипа+1
    Иконка глаза314
    Иконка комментариев0
    Картинка поста PostgreSQL vs MongoDB: что выбрать для проекта в 2025
    Иконка аватараАнтон
    Иконка календаря06 июня 2026
    postgresqlmongodbdatabases+ 1middleИконка уровня middle

    PostgreSQL vs MongoDB: что выбрать для проекта в 2025

    PostgreSQL vs MongoDB в 2025: сравниваем производительность, схемы данных, транзакции и масштабирование. Разбираем, какую БД выбрать под ваш проект.

    Иконка чипа0
    Иконка глаза349
    Иконка комментариев0
    Картинка поста Docker для разработчика: полный гайд с нуля до продакшена
    Иконка аватараАнтон
    Иконка календаря03 июня 2026
    dockerdevopsконтейнеризация+ 1juniorИконка уровня junior

    Docker для разработчика: полный гайд с нуля до продакшена

    Docker для разработчика — полный гайд с нуля: образы, контейнеры, Dockerfile, docker-compose и работа с продакшеном простыми словами.

    Иконка чипа0
    Иконка глаза514
    Иконка комментариев0
    Иконка чипа0