惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
量子位
博客园 - Franky
罗磊的独立博客
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
宝玉的分享
宝玉的分享
腾讯CDC
D
Docker
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
V
V2EX
Microsoft Azure Blog
Microsoft Azure Blog
Latest news
Latest news
C
CERT Recently Published Vulnerability Notes
G
GRAHAM CLULEY
C
Cisco Blogs
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Threatpost
Simon Willison's Weblog
Simon Willison's Weblog
GbyAI
GbyAI
S
SegmentFault 最新的问题
Blog — PlanetScale
Blog — PlanetScale
L
Lohrmann on Cybersecurity
I
Intezer
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
Cisco Talos Blog
Cisco Talos Blog
Hacker News: Ask HN
Hacker News: Ask HN
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog
Microsoft Security Blog
Microsoft Security Blog
AI
AI
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Schneier on Security
V
Visual Studio Blog
The Register - Security
The Register - Security
AWS News Blog
AWS News Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
F
Fortinet All Blogs
博客园 - 司徒正美
WordPress大学
WordPress大学
Jina AI
Jina AI
T
Tor Project blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
REST и RESTful API для QA Engineer
makurea · 2026-06-15 · via Все публикации подряд на Хабре

Простой

6 мин

685

Содержание

Введение
Что такое REST
История появления REST
Основные принципы REST
Что такое RESTful API
Методы HTTP в REST
Идемпотентность HTTP-методов
HATEOAS — последний уровень зрелости REST
Коды ответов HTTP
REST в тестировании
Инструменты для работы с REST
Выводы

Введение

Практически каждый современный веб-сервис, мобильное приложение или микросервис использует API для обмена данными между компонентами системы. В большинстве случаев речь идет именно о REST API.

Как работает REST API

Как работает REST API

Поэтому знание REST сегодня является одним из базовых навыков QA Engineer. Независимо от того, занимается ли специалист ручным тестированием или автоматизацией, понимание принципов REST помогает эффективнее анализировать работу системы, находить дефекты и писать качественные тесты.

В данной статье разберем основные принципы REST, поговорим о RESTful API, HTTP-методах, статус-кодах, идемпотентности и особенностях тестирования API.

Что такое REST

REST (Representational State Transfer) — архитектурный стиль взаимодействия компонентов распределённой системы.

Термин был предложен Роем Филдингом в 2000 году в его докторской диссертации.

Рой Филдинг

Рой Филдинг

Важно понимать, что REST не является:

  • протоколом;

  • языком программирования;

  • библиотекой;

  • фреймворком.

REST представляет собой набор архитектурных ограничений и рекомендаций по построению API.

Важно: REST не требует использования JSON. API может передавать данные в различных форматах, например XML, YAML или даже обычном тексте. Однако на практике именно JSON стал фактическим стандартом для большинства современных REST API благодаря своей простоте и удобству обработки.

Главная идея заключается в том, что каждая сущность системы рассматривается как ресурс.

Примеры ресурсов:

  • пользователь;

  • заказ;

  • товар;

  • комментарий;

  • платеж.

Доступ к ресурсам осуществляется через HTTP.

Например:

GET /users/15

Получение пользователя.

DELETE /users/15

Удаление пользователя.

PUT /users/15

Обновление пользователя.

История появления REST

До широкого распространения REST многие компании использовали SOAP (Simple Object Access Protocol) — протокол обмена структурированными сообщениями в распределённых системах.

SOAP предоставлял большие возможности, однако имел ряд недостатков:

  • громоздкие XML-сообщения;

  • сложную спецификацию;

  • высокие накладные расходы;

  • сложность поддержки.

REST vs SOAP

REST vs SOAP

Рой Филдинг предложил использовать уже существующие возможности HTTP (HyperText Transfer Protocol — протокол прикладного уровня для передачи данных в веб-системах) и строить взаимодействие вокруг ресурсов.

Подход оказался значительно проще и эффективнее, благодаря чему REST постепенно стал стандартом де-факто для веб-разработки.

Сегодня REST применяется практически повсеместно:

  • веб-приложения;

  • мобильные приложения;

  • микросервисная архитектура;

  • облачные платформы;

  • публичные API.

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

REST базируется на нескольких обязательных ограничениях.

Принципы REST

Принципы REST

Клиент—серверная архитектура (Client-Server)

Клиент и сервер разделены между собой.

Клиент отвечает за пользовательский интерфейс.

Сервер отвечает за хранение и обработку данных.

Отсутствие состояния (Stateless)

Каждый запрос должен содержать всю необходимую информацию.

Сервер не хранит состояние клиента между запросами.

Например:

GET /profile
Authorization: Bearer token

Токен передается в каждом запросе.

Это позволяет легко масштабировать систему.

Кэшируемость (Cacheable)

Ответы сервера могут кэшироваться.

Например:

Cache-Control: max-age=3600

Клиент может использовать сохраненный ответ в течение часа без обращения к серверу.

Единый интерфейс (Uniform Interface)

Все ресурсы используют единый интерфейс взаимодействия.

Например:

GET /users
GET /orders
GET /products

Независимо от ресурса используются одинаковые HTTP-механизмы.

Многоуровневая система (Layered System)

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

  • балансировщики нагрузки;

  • прокси;

  • API Gateway;

  • CDN.

Код по требованию (Code-on-Demand) (необязательное ограничение)

Сервер может передавать клиенту исполняемый код для расширения его функциональности.

Наиболее распространённый пример — передача JavaScript-кода веб-браузеру.

Благодаря этому клиент может получать новую функциональность без обновления приложения.

Однако в REST API данный принцип используется редко, поэтому считается опциональным ограничением REST.

Что такое RESTful API

RESTful API — это API, которое соблюдает принципы REST.

Не любой HTTP API является RESTful.

Плохой пример:

POST /createUser
POST /deleteUser
POST /getUser

Такой подход напоминает удалённый вызов процедур (RPC).

RESTful вариант выглядит следующим образом:

POST /users
GET /users/1
PUT /users/1
DELETE /users/1

В этом случае действие определяется HTTP-методом, а URL описывает ресурс.

Методы HTTP в REST

REST активно использует возможности протокола HTTP.

HTTP-методы REST API

HTTP-методы REST API

GET

Получение данных.

GET /users/1

POST

Создание нового ресурса.

POST /users

PUT

Полное обновление ресурса.

PUT /users/1

PATCH

Частичное обновление ресурса.

PATCH /users/1

DELETE

Удаление ресурса.

DELETE /users/1

Идемпотентность HTTP-методов

Идемпотентность означает, что повторное выполнение операции приводит систему к одному и тому же состоянию.

Идемпотентность HTTP-методов

Идемпотентность HTTP-методов

Например:

DELETE /users/15

Первый запрос удаляет пользователя (200 OK или 204 No Content).
Повторный запрос к тому же URL вернёт 404 Not Found.
Состояние системы на сервере (пользователя 15 нет) после первого и второго запросов одинаково.
Именно это и означает идемпотентность: повторные запросы не меняют состояние сервера, даже если HTTP-код ответа отличается.

Важно для QA: идемпотентность не гарантирует одинаковый ответ — она гарантирует одинаковое состояние системы.

Таблица идемпотентности

Метод

Идемпотентный

GET

Да

HEAD

Да

OPTIONS

Да

PUT

Да

DELETE

Да

POST

Нет

PATCH

Зависит от реализации

Почему это важно для QA

Во время тестирования необходимо проверять:

  • повторные запросы;

  • защиту от дублей;

  • корректную работу Retry-механизмов;

  • обработку сетевых ошибок.

Особенно важно это для:

  • платежей;

  • переводов;

  • заказов;

  • бронирований.

HATEOAS — последний уровень зрелости REST

HATEOAS (Hypermedia As The Engine Of Application State) считается одним из официальных принципов REST.

Модель зрелости REST

Модель зрелости REST

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

Пример ответа:

{
  "id": 15,
  "name": "John",
  "_links": {
    "self": {
      "href": "/users/15"
    },
    "orders": {
      "href": "/users/15/orders"
    },
    "delete": {
      "href": "/users/15"
    }
  }
}

Клиент получает не только данные, но и информацию о дальнейших действиях.

Модель зрелости Richardson

Уровень

Описание

Level 0

RPC

Level 1

Ресурсы

Level 2

HTTP-методы

Level 3

HATEOAS

Большинство современных API находятся на Level 2.

Полноценный HATEOAS в классическом понимании встречается реже, чем Level 2, но его элементы (например, поле self или ссылки на связанные ресурсы) используются во многих современных API — JSON:API, HAL. GraphQL использует иной подход к взаимодействию клиента и сервера и обычно не относится к HATEOAS.

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

REST активно использует стандартные HTTP Status Codes.

HTTP Status Codes шпаргалка

HTTP Status Codes шпаргалка

Успешные ответы

Код

Значение

200

OK

201

Created

204

No Content

Ошибки клиента

Код

Значение

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

409

Conflict

422

Validation Error

Ошибки сервера

Код

Значение

500

Internal Server Error

502

Bad Gateway

503

Service Unavailable

REST в тестировании

Для QA-инженера REST API является одним из основных объектов тестирования.

Чек-лист тестирования REST API

Чек-лист тестирования REST API

Наиболее распространённые проверки:

Проверка статус-кодов

Необходимо убедиться, что сервер возвращает корректный код ответа.

Например:

  • создание ресурса — 201;

  • удаление — 204;

  • отсутствующий объект — 404.

Проверка структуры ответа

Тестировщик проверяет:

  • обязательные поля;

  • типы данных;

  • вложенные объекты;

  • соответствие документации.

Проверка бизнес-логики

Например:

  1. Создать пользователя.

  2. Получить пользователя.

  3. Проверить сохранённые данные.

Проверка безопасности

Следует тестировать:

  • авторизацию;

  • роли пользователей;

  • доступ к чужим данным;

  • работу токенов.

Чек-лист REST API

  • корректность HTTP-методов;

  • корректность статус-кодов;

  • валидация входных данных;

  • обработка пустых значений;

  • обработка специальных символов;

  • проверка авторизации;

  • проверка ролей;

  • проверка пагинации;

  • проверка сортировки;

  • проверка фильтрации;

  • проверка версионирования API (/v1/ vs /v2/);

  • проверка производительности;

  • проверка идемпотентности.

Инструменты для работы с REST

Postman

Самый популярный инструмент тестирования API.

Возможности:

  • отправка запросов;

  • коллекции;

  • переменные окружения;

  • автотесты;

  • Collection Runner.

Swagger / OpenAPI

Позволяет документировать API и быстро изучать доступные эндпоинты.

Insomnia

Упрощённая альтернатива Postman.

curl

Консольный инструмент для отправки HTTP-запросов.

Пример:

curl -X GET https://api.example.com/users/1

Выводы

REST является самым популярным архитектурным стилем построения API в современных системах.

Для QA Engineer понимание REST необходимо по нескольким причинам:

  • большинство современных проектов используют REST API;

  • REST регулярно встречается на собеседованиях;

  • знание HTTP помогает быстрее находить дефекты;

  • API-тестирование является важной частью работы тестировщика.

Понимание принципов REST, HTTP-методов, статус-кодов, идемпотентности и HATEOAS позволяет QA-инженеру глубже анализировать систему, писать более качественные тесты и эффективнее взаимодействовать с разработчиками.

Спасибо за внимание

Спасибо за внимание