---
title: Методы работы с данными
seo:
  title: Методы работы с данными — QA
  description: "Тема «Методы работы с данными» для собеседования QA. Какие способы взаимодействия с API существуют? В чем разница между ними? Как можно протестировать API, что там нужно проверять?"
---

[Все темы QA](/qa)

## <strong>Какие способы взаимодействия с API существуют? В чем разница между ними?</strong> [#q-14bee738d69b81468aa7c3da69bf1827]

Взаимодействие с API (Application Programming Interface) может быть реализовано разными способами, каждый из которых подходит для различных сценариев использования. Вот некоторые из основных способов взаимодействия с API&#58;

{/* prettier-ignore */}
1. <code>REST</code> <strong>(Representational State Transfer)</strong>&#58;

    - Использует стандартные HTTP методы (GET, POST, PUT, DELETE).

    - Ориентирован на работу с ресурсами, где каждый URL представляет собой ресурс.

    - Может использовать различные форматы данных (чаще всего JSON).

    - Не сохраняет состояние между запросами, что облегчает масштабирование.

1. <code>SOAP</code> <strong>(Simple Object Access Protocol)</strong>&#58;

    - Строго определённый протокол, который обменивается информацией в формате XML.

    - Поддерживает расширенные функции безопасности и транзакционность.

    - Часто используется в корпоративных и финансовых приложениях, где требуется высокий уровень безопасности и надежности.

1. <code>GraphQL</code>&#58;

    - Позволяет клиентам точно определять, какие данные им нужны.

    - Уменьшает количество запросов и объем передаваемых данных по сравнению с REST.

    - Использует единственный эндпоинт и обрабатывает запросы через спецификации, которые определяют структуру данных.

1. <code>gRPC</code> <strong>(Google Remote Procedure Calls)</strong>&#58;

    - Основан на HTTP/2, что позволяет устанавливать долгоживущие соединения и многократно использовать их для отправки потоков данных.

    - Использует бинарный формат (Protocol Buffers), что делает его более эффективным по сравнению с текстовыми API.

    - Подходит для микросервисной архитектуры, где важна высокая производительность и низкая задержка.

1. <code>WebSocket</code>&#58;

    - Поддерживает двустороннее постоянное соединение между клиентом и сервером.

    - Идеален для приложений, требующих частых и быстрых обновлений в реальном времени, например, для онлайн-игр или чатов.

#### Различия между ними&#58;

- <strong>Гибкость</strong>&#58; REST и GraphQL предлагают большую гибкость в
  выборе форматов данных и структуры запросов, в то время как SOAP и gRPC более
  строги в этих аспектах.

- <strong>Производительность</strong>&#58; gRPC и WebSocket могут обеспечивать
  лучшую производительность для определенных задач за счет бинарного формата и
  постоянных соединений.

- <strong>Функциональность</strong>&#58; SOAP предоставляет комплексные
  возможности транзакционности и безопасности, что делает его предпочтительным в
  некоторых корпоративных средах.

:::note[Ссылки для изучения]

1. [Способы взаимодействия с API](https://kaze.gitbook.io/qa-theory/web/kakie-sposoby-vzaimodeistviya-s-api-sushestvuyut-v-chem-raznica-mezhdu-nimi)
   :::

---

## <strong>Как можно протестировать API, что там нужно проверять?</strong> [#q-14bee738d69b8179b64ff7f9963d2a83]

Тестирование API (Application Programming Interface) включает в себя проверку различных аспектов взаимодействия между клиентом и сервером. Вот ключевые аспекты, которые необходимо учитывать при тестировании API&#58;

{/* prettier-ignore */}
1. <strong>Функциональность</strong>&#58;

    - Проверка того, что API выполняет все функции в соответствии с требованиями спецификации.

    - Проверка корректности ответов API на запросы и корректность выполнения операций.

1. <strong>Надёжность</strong>&#58;

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

    - Тестирование на устойчивость к ошибкам и внезапным прерываниям связи.

1. <strong>Производительность</strong>&#58;

    - Оценка времени отклика API и времени обработки запросов.

    - Тестирование производительности при различных уровнях нагрузки.

1. <strong>Безопасность</strong>&#58;

    - Проверка на уязвимости, такие как SQL инъекции, XSS, CSRF, и разглашение данных.

    - Проверка аутентификации, авторизации, и защиты данных.

1. <strong>Совместимость</strong>&#58;

    - Проверка того, что API правильно работает с различными версиями операционных систем, устройствами и другими API.

1. <strong>Масштабируемость</strong>&#58;

    - Проверка способности API поддерживать растущее количество запросов и объем данных без потери производительности.

1. <strong>Интероперабельность</strong>&#58;

    - Тестирование взаимодействия API с другими системами и компонентами, для которых предназначено API.

1. <strong>Удобство использования</strong>&#58;

    - Проверка наличия и актуальности документации для разработчиков, использующих API.

1. <strong>Регрессионное тестирование</strong>&#58;

    - Проверка, что новые изменения в API не влияют отрицательно на существующие функции.

Для тестирования API обычно используются специализированные инструменты, такие как Postman, SoapUI, JMeter, а также автоматизированные скрипты на языках программирования, поддерживающих отправку HTTP-запросов и обработку ответов.

:::note[Ссылки для изучения]

1. [Тестирование API](https://kaze.gitbook.io/qa-theory/web/kak-mozhno-protestirovat-api-chto-tam-nuzhno-proveryat)
   :::

---

## <strong>Как расшифровывается</strong> <code>CRUD</code><strong>?</strong> [#q-14bee738d69b8155aa3acb18633f5316]

<code>CRUD</code> — это аббревиатура, которая обозначает четыре базовые
операции, используемые при взаимодействии с данными в базах данных или других
хранилищах информации. Вот расшифровка <code>CRUD</code>&#58;

- <code>C</code>
  <code>reate</code>&#58; Создание новой записи.

- <code>R</code>
  <code>ead</code>&#58; Чтение или извлечение существующих данных.

- <code>U</code>
  <code>pdate</code>&#58; Обновление существующей записи.

- <code>D</code>
  <code>elete</code>&#58; Удаление существующей записи.

Эти операции формируют основу для большинства систем, работающих с данными, и часто используются в API для обеспечения полного управления данными.

:::note[Ссылки для изучения]

1. [Что такое CRUD](https://appmaster.io/ru/blog/grubye-operatsii-chto-takoe-grubye-operatsii#:~:text=CRUD%20%D0%A1%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BE%D1%82%20Create%2C%20Read%2C,%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B8%D0%BB%D0%B8%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0%D0%BC%D0%B8%20%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)
   :::

---

## <strong>Чем отличается</strong> <code>GET</code> <strong>от</strong> <code>POST</code><strong>?</strong> [#q-14bee738d69b81febb00f09df1f96a36]

<code>GET</code> и <code>POST</code> — это два основных метода HTTP,
используемых для отправки данных на сервер. Вот их ключевые отличия&#58;

{/* prettier-ignore */}
1. <strong>Назначение</strong>&#58;

    - <strong>GET</strong> предназначен для получения данных с сервера. Обычно используется для запроса и извлечения информации, не влияя на данные.

    - <strong>POST</strong> используется для отправки данных на сервер, например, при создании или обновлении записей.

1. <strong>Безопасность и данные</strong>&#58;

    - <strong>GET</strong> передает данные в URL (через строку запроса), что делает его менее безопасным, так как данные могут быть сохранены в журналах сервера или истории браузера.

    - POST обычно передаёт данные в теле запроса. Метод сам по себе не обеспечивает конфиденциальность&#58; для защиты при передаче нужен HTTPS, а доступ и журналирование контролируются отдельно.

1. <strong>Ограничения на данные</strong>&#58;

    - <strong>GET</strong> имеет ограничения на длину URL, что ограничивает количество данных, которые можно передать.

    - Максимальный размер тела POST зависит от ограничений клиента, прокси и сервера.

1. <strong>Кэширование и история</strong>&#58;

    - <strong>GET</strong> может быть закэширован браузером и сохранен в истории, что удобно для повторных запросов, но может представлять проблемы с конфиденциальностью.

    - Ответ POST может кешироваться при явно заданных условиях, хотя поддержка такого кеширования ограничена. Выбор метода определяется семантикой операции, а не предположением об отсутствии истории.

1. <strong>Идемпотентность</strong>&#58;

    - <strong>GET</strong> является идемпотентным, что означает, что многократное повторение запросов будет иметь тот же эффект, что и однократное выполнение.

    - <strong>POST</strong> не идемпотентен, так как каждое повторение запроса может привести к дополнительным изменениям данных.

В общем, выбор между GET и POST зависит от задачи&#58; GET используется для запросов данных, а POST — для передачи или изменения данных на сервере.

:::note[Ссылки для изучения]

1. [Отличие GET от POST](https://kaze.gitbook.io/qa-theory/web/kakova-raznica-mezhdu-metodami-get-i-post)
   :::

---

## <strong>Какие отличия между</strong> <code>XML</code> <strong>и</strong> <code>JSON</code><strong>?</strong> [#q-14bee738d69b81a2b6e3da10f7aca998]

<code>XML</code> и <code>JSON</code> — это два популярных формата данных,
используемых для обмена информацией между системами. Вот их основные
отличия&#58;

{/* prettier-ignore */}
1. <strong>Синтаксис</strong>&#58;

    - <strong>XML (Extensible Markup Language)</strong>&#58;

        - Использует теги для обозначения элементов данных.

        - Поддерживает атрибуты для хранения информации.

        - Более сложная и громоздкая структура.

        - Пример&#58;

            ```xml
            <person>
              <name>John</name>
              <age>30</age>
            </person>
            ```

    - <strong>JSON (JavaScript Object Notation)</strong>&#58;

        - Использует пары "ключ-значение".

        - Поддерживает массивы и вложенные объекты.

        - Более простой и читаемый формат.

        - Пример&#58;

            ```json
            {
              "name": "John",
              "age": 30
            }
            ```

1. <strong>Читаемость и простота</strong>&#58;

    - <strong>JSON</strong>&#58;

        - Легче для чтения и написания человеком.

        - Простой синтаксис делает его менее подверженным ошибкам.

    - <strong>XML</strong>&#58;

        - Более сложный синтаксис.

        - Теги и атрибуты могут затруднять восприятие данных.

1. <strong>Поддержка типов данных</strong>&#58;

    - <strong>JSON</strong>&#58;

        - Поддерживает основные типы данных&#58; строки, числа, массивы, объекты (словари), логические значения (true/false), и null.

    - <strong>XML</strong>&#58;

        - Все данные представлены в виде строк, требуются дополнительные усилия для преобразования типов.

1. <strong>Размер данных</strong>&#58;

    - <strong>JSON</strong>&#58;

        - Обычно занимает меньше места по сравнению с XML из-за отсутствия избыточных тегов.

    - <strong>XML</strong>&#58;

        - Более громоздкий из-за обилия тегов и атрибутов.

1. <strong>Схемы и валидация</strong>&#58;

    - <strong>XML</strong>&#58;

        - Поддерживает схемы (DTD, XSD) для строгой валидации структуры и содержимого документа.

    - <strong>JSON</strong>&#58;

        - JSON Schema формально задаёт ограничения структуры и значений JSON. Для совместимости указывают диалект схемы и проверяют поддержку используемых ключевых слов валидатором.

1. <strong>Использование и совместимость</strong>&#58;

    - <strong>JSON</strong>&#58;

        - Широко используется в веб-приложениях и API из-за своей простоты и легкости интеграции с JavaScript.

    - <strong>XML</strong>&#58;

        - Используется в различных стандартах и протоколах, включая SOAP, RSS, и многих других, благодаря своей гибкости и возможности строгой валидации.

:::note[Ссылки для изучения]

1. [XML против JSON](https://www.guru99.com/ru/json-vs-xml-difference.html)
   :::

---

## <strong>Какие знаете форматы передачи данных?</strong> [#q-14bee738d69b8105b0d3fd92a418f47c]

Форматы передачи данных определяют, как информация структурируется и кодируется для обмена между системами. Вот несколько широко используемых форматов&#58;

{/* prettier-ignore */}
1. <code>JSON</code> <strong>(JavaScript Object Notation)</strong>&#58;

    - Легковесный текстовый формат, удобный для чтения и написания человеком.

    - Часто используется в веб-приложениях и API.

    - Пример&#58;

        ```json
        {
          "name": "John",
          "age": 30
        }
        ```

1. <code>XML</code> <strong>(Extensible Markup Language)</strong>&#58;

    - Текстовый формат с тегами, используемый для представления сложных структур данных.

    - Поддерживает атрибуты и строгую валидацию с помощью схем.

    - Пример&#58;

        ```xml
        <person>
          <name>John</name>
          <age>30</age>
        </person>
        ```

1. <code>YAML</code> <strong>(YAML Ain't Markup Language)</strong>&#58;

    - Человеко-читаемый формат сериализации данных, часто используется в конфигурационных файлах.

    - Поддерживает вложенные структуры и имеет простой синтаксис.

    - Пример&#58;

        ```yaml
        person:
          name: John
          age: 30
        ```

1. <code>CSV</code> <strong>(Comma-Separated Values)</strong>&#58;

    - Простой текстовый формат, где данные разделяются запятыми.

    - Часто используется для табличных данных и обмена данными между различными системами.

    - Пример&#58;

        ```csv
        name,age
        John,30
        ```

1. <code>Protobuf</code> <strong>(Protocol Buffers)</strong>&#58;

    - Двоичный формат сериализации данных, разработанный Google.

    - Высокая эффективность и компактность по сравнению с текстовыми форматами.

    - Требует определения схемы (протофайл).

1. <code>Avro</code>&#58;

    - Двоичный формат сериализации данных, разработанный Apache.

    - Хорошо подходит для использования с большими объемами данных и распределенными системами.

    - Требует схемы для сериализации и десериализации.

1. <code>MessagePack</code>&#58;

    - Двоичный формат, предназначенный для компактного представления данных.

    - Поддерживает все основные типы данных, включая структуры и массивы.

    - Быстро и эффективно обрабатывается.

1. <code>BSON</code> <strong>(Binary JSON)</strong>&#58;

    - Двоичный формат, используемый в MongoDB.

    - Поддерживает встроенные типы данных, такие как даты и байтовые массивы.

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

:::note[Ссылки для изучения]

1. [Форматы передачи данных](https://kaze.gitbook.io/qa-theory/web/kakie-znaete-formaty-peredachi-dannykh)
   :::

---

## <strong>Как происходит шифрование?</strong> [#q-14bee738d69b819c8a4dda917f6aa1b2]

Шифрование — это процесс преобразования информации в нечитабельный формат, чтобы защитить её от несанкционированного доступа. Процесс шифрования и последующей расшифровки включает в себя несколько ключевых элементов&#58;

{/* prettier-ignore */}
1. <strong>Оригинальный текст (</strong><code>plaintext</code><strong>)</strong>&#58;

    - Исходная, незащищённая информация, которая нуждается в защите.

1. <strong>Алгоритм шифрования</strong>&#58;

    - Математическая формула, которая используется для преобразования оригинального текста в зашифрованный текст (ciphertext).

1. <strong>Ключ шифрования</strong>&#58;

    - Набор символов, который используется алгоритмом шифрования для изменения данных. Ключ может быть секретным (симметричное шифрование) или открытым/секретным парным ключом (асимметричное шифрование).

1. <strong>Зашифрованный текст (</strong><code>ciphertext</code><strong>)</strong>&#58;

    - Результат шифрования, который выглядит как случайная последовательность символов и не может быть прочитан без ключа.

#### Основные типы шифрования&#58;

{/* prettier-ignore */}
1. <strong>Симметричное шифрование</strong>&#58;

    - Использует один и тот же ключ для шифрования и расшифровки данных.

    - Быстрое и эффективное для обработки больших объемов данных.

    - Примеры&#58; AES (Advanced Encryption Standard), DES (Data Encryption Standard).

    - Пример&#58;

        ```text
        Plaintext: "Hello"
        Key: "secretkey"
        Ciphertext: "A1B2C3"
        ```

1. <strong>Асимметричное шифрование</strong>&#58;

    - Использует два различных, но математически связанных ключа&#58; открытый ключ для шифрования и закрытый ключ для расшифровки.

    - Открытый ключ можно распространять, но нужно проверять его принадлежность получателю. Асимметричное шифрование не является автоматически более безопасным&#58; безопасность зависит от схемы, параметров и управления ключами.

    - Примеры&#58; RSA (Rivest-Shamir-Adleman), ECC (Elliptic Curve Cryptography).

    - Пример&#58;

        ```text
        Plaintext: "Hello"
        Public Key: "publickey"
        Ciphertext: "Z1X2Y3"
        ```

#### Процесс шифрования&#58;

{/* prettier-ignore */}
1. <strong>Выбор алгоритма и ключа</strong>&#58;

    - Выбор подходящего алгоритма шифрования и генерация ключа(ей).

1. <strong>Шифрование</strong>&#58;

    - Применение алгоритма шифрования с использованием ключа к оригинальному тексту для получения зашифрованного текста.

1. <strong>Передача или хранение</strong>&#58;

    - Зашифрованный текст передаётся или хранится в защищенном виде.

1. <strong>Расшифровка</strong>&#58;

    - Получатель применяет алгоритм расшифровки с использованием соответствующего ключа для преобразования зашифрованного текста обратно в оригинальный текст.

:::note[Ссылки для изучения]

1. [Шифрование данных](https://moscow.b2b.dom.ru/glossary/sifrovanie-dannyh)
   :::

---

## <strong>Какие бывают виды баз данных?</strong> [#q-14bee738d69b8174bbedeea2eed964e1]

Базы данных бывают разных типов, каждый из которых предназначен для определенных сценариев использования и имеет свои особенности. Вот основные виды баз данных&#58;

{/* prettier-ignore */}
1. <strong>Реляционные базы данных (</strong><code>RDBMS</code><strong>)</strong>&#58;

    - Основаны на таблицах, в которых данные хранятся в строках и столбцах.

    - Используют SQL (Structured Query Language) для управления и запроса данных.

    - Примеры&#58; MySQL, PostgreSQL, Oracle, Microsoft SQL Server.

1. <strong>Документо-ориентированные базы данных</strong>&#58;

    - Хранят данные в виде документов (обычно JSON или BSON).

    - Подходят для работы с неструктурированными и полуструктурированными данными.

    - Примеры&#58; MongoDB, CouchDB.

1. <strong>Ключ-значение базы данных</strong>&#58;

    - Хранят данные как пары "ключ-значение".

    - Оптимальны для простых запросов, быстрой записи и чтения данных.

    - Примеры&#58; Redis, Amazon DynamoDB, Riak.

1. <strong>Графовые базы данных</strong>&#58;

    - Используются для хранения и обработки данных, представленных в виде графов (узлы и ребра).

    - Подходят для работы с социальными сетями, рекомендациями и сетевыми анализами.

    - Примеры&#58; Neo4j, Amazon Neptune, OrientDB.

1. <strong>Колонко-ориентированные базы данных</strong>&#58;

    - Хранят данные столбцами вместо строк, что позволяет эффективно обрабатывать аналитические запросы.

    - Используются в системах аналитики и больших данных.

    - Примеры аналитических колоночных СУБД&#58; ClickHouse и Amazon Redshift. Cassandra, HBase и Bigtable относятся к семейству wide-column, которое следует отличать от колоночного хранения для аналитики.

1. <strong>Базы данных временных рядов</strong>&#58;

    - Оптимизированы для хранения и обработки временных рядов данных.

    - Подходят для мониторинга, IoT, финансовых данных.

    - Примеры&#58; InfluxDB, TimescaleDB, Prometheus.

1. <strong>Объектно-ориентированные базы данных</strong>&#58;

    - Хранят данные в виде объектов, как в объектно-ориентированном программировании.

    - Подходят для приложений, использующих объектные модели.

    - Примеры&#58; ObjectDB, db4o.

1. <strong>Базы данных на основе графиков (графовые)</strong>&#58;

    - Специализированы для хранения данных в виде графов, что позволяет эффективно работать с взаимосвязанными данными.

    - Примеры&#58; Neo4j, Amazon Neptune.

1. <strong>NoSQL базы данных</strong>&#58;

    - Включают в себя все базы данных, которые не соответствуют модели RDBMS.

    - Подходят для приложений, требующих высокой производительности, масштабируемости и гибкости.

    - Включают документо-ориентированные, ключ-значение, графовые и колонко-ориентированные базы данных.

1. <strong>Многофункциональные базы данных (Multi-model)</strong>&#58;

    - Поддерживают несколько моделей данных в одном движке базы данных.

    - Примеры&#58; ArangoDB, OrientDB, MarkLogic.

Выбор типа базы данных зависит от специфики проекта, типа данных, требований к производительности и масштабируемости, а также от других факторов, таких как структура данных и частота изменения данных.

:::note[Ссылки для изучения]

1. [Что такое базы данных](https://practicum.yandex.ru/blog/chto-takoe-bazy-dannyh/)
   :::
