Методы работы с данными
Какие способы взаимодействия с API существуют? В чем разница между ними?
Взаимодействие с API (Application Programming Interface) может быть реализовано разными способами, каждый из которых подходит для различных сценариев использования. Вот некоторые из основных способов взаимодействия с API:
-
REST(Representational State Transfer):-
Использует стандартные HTTP методы (GET, POST, PUT, DELETE).
-
Ориентирован на работу с ресурсами, где каждый URL представляет собой ресурс.
-
Может использовать различные форматы данных (чаще всего JSON).
-
Не сохраняет состояние между запросами, что облегчает масштабирование.
-
-
SOAP(Simple Object Access Protocol):-
Строго определённый протокол, который обменивается информацией в формате XML.
-
Поддерживает расширенные функции безопасности и транзакционность.
-
Часто используется в корпоративных и финансовых приложениях, где требуется высокий уровень безопасности и надежности.
-
-
GraphQL:-
Позволяет клиентам точно определять, какие данные им нужны.
-
Уменьшает количество запросов и объем передаваемых данных по сравнению с REST.
-
Использует единственный эндпоинт и обрабатывает запросы через спецификации, которые определяют структуру данных.
-
-
gRPC(Google Remote Procedure Calls):-
Основан на HTTP/2, что позволяет устанавливать долгоживущие соединения и многократно использовать их для отправки потоков данных.
-
Использует бинарный формат (Protocol Buffers), что делает его более эффективным по сравнению с текстовыми API.
-
Подходит для микросервисной архитектуры, где важна высокая производительность и низкая задержка.
-
-
WebSocket:-
Поддерживает двустороннее постоянное соединение между клиентом и сервером.
-
Идеален для приложений, требующих частых и быстрых обновлений в реальном времени, например, для онлайн-игр или чатов.
-
Различия между ними:
-
Гибкость: REST и GraphQL предлагают большую гибкость в выборе форматов данных и структуры запросов, в то время как SOAP и gRPC более строги в этих аспектах.
-
Производительность: gRPC и WebSocket могут обеспечивать лучшую производительность для определенных задач за счет бинарного формата и постоянных соединений.
-
Функциональность: SOAP предоставляет комплексные возможности транзакционности и безопасности, что делает его предпочтительным в некоторых корпоративных средах.
Ссылки для изучения
Как можно протестировать API, что там нужно проверять?
Тестирование API (Application Programming Interface) включает в себя проверку различных аспектов взаимодействия между клиентом и сервером. Вот ключевые аспекты, которые необходимо учитывать при тестировании API:
-
Функциональность:
-
Проверка того, что API выполняет все функции в соответствии с требованиями спецификации.
-
Проверка корректности ответов API на запросы и корректность выполнения операций.
-
-
Надёжность:
-
Убедиться, что API может успешно обрабатывать различные типы запросов и нагрузки.
-
Тестирование на устойчивость к ошибкам и внезапным прерываниям связи.
-
-
Производительность:
-
Оценка времени отклика API и времени обработки запросов.
-
Тестирование производительности при различных уровнях нагрузки.
-
-
Безопасность:
-
Проверка на уязвимости, такие как SQL инъекции, XSS, CSRF, и разглашение данных.
-
Проверка аутентификации, авторизации, и защиты данных.
-
-
Совместимость:
- Проверка того, что API правильно работает с различными версиями операционных систем, устройствами и другими API.
-
Масштабируемость:
- Проверка способности API поддерживать растущее количество запросов и объем данных без потери производительности.
-
Интероперабельность:
- Тестирование взаимодействия API с другими системами и компонентами, для которых предназначено API.
-
Удобство использования:
- Проверка наличия и актуальности документации для разработчиков, использующих API.
-
Регрессионное тестирование:
- Проверка, что новые изменения в API не влияют отрицательно на существующие функции.
Для тестирования API обычно используются специализированные инструменты, такие как Postman, SoapUI, JMeter, а также автоматизированные скрипты на языках программирования, поддерживающих отправку HTTP-запросов и обработку ответов.
Ссылки для изучения
Как расшифровывается CRUD?
CRUD — это аббревиатура, которая обозначает четыре базовые
операции, используемые при взаимодействии с данными в базах данных или других
хранилищах информации. Вот расшифровка CRUD:
-
Create: Создание новой записи. -
Read: Чтение или извлечение существующих данных. -
Update: Обновление существующей записи. -
Delete: Удаление существующей записи.
Эти операции формируют основу для большинства систем, работающих с данными, и часто используются в API для обеспечения полного управления данными.
Ссылки для изучения
Чем отличается GET от POST?
GET и POST — это два основных метода HTTP,
используемых для отправки данных на сервер. Вот их ключевые отличия:
-
Назначение:
-
GET предназначен для получения данных с сервера. Обычно используется для запроса и извлечения информации, не влияя на данные.
-
POST используется для отправки данных на сервер, например, при создании или обновлении записей.
-
-
Безопасность и данные:
-
GET передает данные в URL (через строку запроса), что делает его менее безопасным, так как данные могут быть сохранены в журналах сервера или истории браузера.
-
POST обычно передаёт данные в теле запроса. Метод сам по себе не обеспечивает конфиденциальность: для защиты при передаче нужен HTTPS, а доступ и журналирование контролируются отдельно.
-
-
Ограничения на данные:
-
GET имеет ограничения на длину URL, что ограничивает количество данных, которые можно передать.
-
Максимальный размер тела POST зависит от ограничений клиента, прокси и сервера.
-
-
Кэширование и история:
-
GET может быть закэширован браузером и сохранен в истории, что удобно для повторных запросов, но может представлять проблемы с конфиденциальностью.
-
Ответ POST может кешироваться при явно заданных условиях, хотя поддержка такого кеширования ограничена. Выбор метода определяется семантикой операции, а не предположением об отсутствии истории.
-
-
Идемпотентность:
-
GET является идемпотентным, что означает, что многократное повторение запросов будет иметь тот же эффект, что и однократное выполнение.
-
POST не идемпотентен, так как каждое повторение запроса может привести к дополнительным изменениям данных.
-
В общем, выбор между GET и POST зависит от задачи: GET используется для запросов данных, а POST — для передачи или изменения данных на сервере.
Ссылки для изучения
Какие отличия между XML и JSON?
XML и JSON — это два популярных формата данных,
используемых для обмена информацией между системами. Вот их основные
отличия:
-
Синтаксис:
-
XML (Extensible Markup Language):
-
Использует теги для обозначения элементов данных.
-
Поддерживает атрибуты для хранения информации.
-
Более сложная и громоздкая структура.
-
Пример:
<person> <name>John</name> <age>30</age> </person>
-
-
JSON (JavaScript Object Notation):
-
Использует пары “ключ-значение”.
-
Поддерживает массивы и вложенные объекты.
-
Более простой и читаемый формат.
-
Пример:
{ "name": "John", "age": 30 }
-
-
-
Читаемость и простота:
-
JSON:
-
Легче для чтения и написания человеком.
-
Простой синтаксис делает его менее подверженным ошибкам.
-
-
XML:
-
Более сложный синтаксис.
-
Теги и атрибуты могут затруднять восприятие данных.
-
-
-
Поддержка типов данных:
-
JSON:
- Поддерживает основные типы данных: строки, числа, массивы, объекты (словари), логические значения (true/false), и null.
-
XML:
- Все данные представлены в виде строк, требуются дополнительные усилия для преобразования типов.
-
-
Размер данных:
-
JSON:
- Обычно занимает меньше места по сравнению с XML из-за отсутствия избыточных тегов.
-
XML:
- Более громоздкий из-за обилия тегов и атрибутов.
-
-
Схемы и валидация:
-
XML:
- Поддерживает схемы (DTD, XSD) для строгой валидации структуры и содержимого документа.
-
JSON:
- JSON Schema формально задаёт ограничения структуры и значений JSON. Для совместимости указывают диалект схемы и проверяют поддержку используемых ключевых слов валидатором.
-
-
Использование и совместимость:
-
JSON:
- Широко используется в веб-приложениях и API из-за своей простоты и легкости интеграции с JavaScript.
-
XML:
- Используется в различных стандартах и протоколах, включая SOAP, RSS, и многих других, благодаря своей гибкости и возможности строгой валидации.
-
Ссылки для изучения
Какие знаете форматы передачи данных?
Форматы передачи данных определяют, как информация структурируется и кодируется для обмена между системами. Вот несколько широко используемых форматов:
-
JSON(JavaScript Object Notation):-
Легковесный текстовый формат, удобный для чтения и написания человеком.
-
Часто используется в веб-приложениях и API.
-
Пример:
{ "name": "John", "age": 30 }
-
-
XML(Extensible Markup Language):-
Текстовый формат с тегами, используемый для представления сложных структур данных.
-
Поддерживает атрибуты и строгую валидацию с помощью схем.
-
Пример:
<person> <name>John</name> <age>30</age> </person>
-
-
YAML(YAML Ain’t Markup Language):-
Человеко-читаемый формат сериализации данных, часто используется в конфигурационных файлах.
-
Поддерживает вложенные структуры и имеет простой синтаксис.
-
Пример:
person: name: John age: 30
-
-
CSV(Comma-Separated Values):-
Простой текстовый формат, где данные разделяются запятыми.
-
Часто используется для табличных данных и обмена данными между различными системами.
-
Пример:
name,age John,30
-
-
Protobuf(Protocol Buffers):-
Двоичный формат сериализации данных, разработанный Google.
-
Высокая эффективность и компактность по сравнению с текстовыми форматами.
-
Требует определения схемы (протофайл).
-
-
Avro:-
Двоичный формат сериализации данных, разработанный Apache.
-
Хорошо подходит для использования с большими объемами данных и распределенными системами.
-
Требует схемы для сериализации и десериализации.
-
-
MessagePack:-
Двоичный формат, предназначенный для компактного представления данных.
-
Поддерживает все основные типы данных, включая структуры и массивы.
-
Быстро и эффективно обрабатывается.
-
-
BSON(Binary JSON):-
Двоичный формат, используемый в MongoDB.
-
Поддерживает встроенные типы данных, такие как даты и байтовые массивы.
-
Эти форматы различаются по своим характеристикам, таким как читаемость, компактность, сложность и поддержка различных типов данных, что делает их подходящими для различных сценариев использования.
Ссылки для изучения
Как происходит шифрование?
Шифрование — это процесс преобразования информации в нечитабельный формат, чтобы защитить её от несанкционированного доступа. Процесс шифрования и последующей расшифровки включает в себя несколько ключевых элементов:
-
Оригинальный текст (
plaintext):- Исходная, незащищённая информация, которая нуждается в защите.
-
Алгоритм шифрования:
- Математическая формула, которая используется для преобразования оригинального текста в зашифрованный текст (ciphertext).
-
Ключ шифрования:
- Набор символов, который используется алгоритмом шифрования для изменения данных. Ключ может быть секретным (симметричное шифрование) или открытым/секретным парным ключом (асимметричное шифрование).
-
Зашифрованный текст (
ciphertext):- Результат шифрования, который выглядит как случайная последовательность символов и не может быть прочитан без ключа.
Основные типы шифрования:
-
Симметричное шифрование:
-
Использует один и тот же ключ для шифрования и расшифровки данных.
-
Быстрое и эффективное для обработки больших объемов данных.
-
Примеры: AES (Advanced Encryption Standard), DES (Data Encryption Standard).
-
Пример:
Plaintext: "Hello" Key: "secretkey" Ciphertext: "A1B2C3"
-
-
Асимметричное шифрование:
-
Использует два различных, но математически связанных ключа: открытый ключ для шифрования и закрытый ключ для расшифровки.
-
Открытый ключ можно распространять, но нужно проверять его принадлежность получателю. Асимметричное шифрование не является автоматически более безопасным: безопасность зависит от схемы, параметров и управления ключами.
-
Примеры: RSA (Rivest-Shamir-Adleman), ECC (Elliptic Curve Cryptography).
-
Пример:
Plaintext: "Hello" Public Key: "publickey" Ciphertext: "Z1X2Y3"
-
Процесс шифрования:
-
Выбор алгоритма и ключа:
- Выбор подходящего алгоритма шифрования и генерация ключа(ей).
-
Шифрование:
- Применение алгоритма шифрования с использованием ключа к оригинальному тексту для получения зашифрованного текста.
-
Передача или хранение:
- Зашифрованный текст передаётся или хранится в защищенном виде.
-
Расшифровка:
- Получатель применяет алгоритм расшифровки с использованием соответствующего ключа для преобразования зашифрованного текста обратно в оригинальный текст.
Ссылки для изучения
Какие бывают виды баз данных?
Базы данных бывают разных типов, каждый из которых предназначен для определенных сценариев использования и имеет свои особенности. Вот основные виды баз данных:
-
Реляционные базы данных (
RDBMS):-
Основаны на таблицах, в которых данные хранятся в строках и столбцах.
-
Используют SQL (Structured Query Language) для управления и запроса данных.
-
Примеры: MySQL, PostgreSQL, Oracle, Microsoft SQL Server.
-
-
Документо-ориентированные базы данных:
-
Хранят данные в виде документов (обычно JSON или BSON).
-
Подходят для работы с неструктурированными и полуструктурированными данными.
-
Примеры: MongoDB, CouchDB.
-
-
Ключ-значение базы данных:
-
Хранят данные как пары “ключ-значение”.
-
Оптимальны для простых запросов, быстрой записи и чтения данных.
-
Примеры: Redis, Amazon DynamoDB, Riak.
-
-
Графовые базы данных:
-
Используются для хранения и обработки данных, представленных в виде графов (узлы и ребра).
-
Подходят для работы с социальными сетями, рекомендациями и сетевыми анализами.
-
Примеры: Neo4j, Amazon Neptune, OrientDB.
-
-
Колонко-ориентированные базы данных:
-
Хранят данные столбцами вместо строк, что позволяет эффективно обрабатывать аналитические запросы.
-
Используются в системах аналитики и больших данных.
-
Примеры аналитических колоночных СУБД: ClickHouse и Amazon Redshift. Cassandra, HBase и Bigtable относятся к семейству wide-column, которое следует отличать от колоночного хранения для аналитики.
-
-
Базы данных временных рядов:
-
Оптимизированы для хранения и обработки временных рядов данных.
-
Подходят для мониторинга, IoT, финансовых данных.
-
Примеры: InfluxDB, TimescaleDB, Prometheus.
-
-
Объектно-ориентированные базы данных:
-
Хранят данные в виде объектов, как в объектно-ориентированном программировании.
-
Подходят для приложений, использующих объектные модели.
-
Примеры: ObjectDB, db4o.
-
-
Базы данных на основе графиков (графовые):
-
Специализированы для хранения данных в виде графов, что позволяет эффективно работать с взаимосвязанными данными.
-
Примеры: Neo4j, Amazon Neptune.
-
-
NoSQL базы данных:
-
Включают в себя все базы данных, которые не соответствуют модели RDBMS.
-
Подходят для приложений, требующих высокой производительности, масштабируемости и гибкости.
-
Включают документо-ориентированные, ключ-значение, графовые и колонко-ориентированные базы данных.
-
-
Многофункциональные базы данных (Multi-model):
-
Поддерживают несколько моделей данных в одном движке базы данных.
-
Примеры: ArangoDB, OrientDB, MarkLogic.
-
Выбор типа базы данных зависит от специфики проекта, типа данных, требований к производительности и масштабируемости, а также от других факторов, таких как структура данных и частота изменения данных.
Ссылки для изучения
Как тестировать добавление новых полей в JSON?
Нужно запустить старую поддерживаемую версию клиента против ответа с новым полем. Tolerant reader должен проигнорировать неизвестное поле и корректно прочитать известные; строгий десериализатор может упасть, что делает добавление формально совместимого поля фактически ломающим. Проверяют новое поле на верхнем уровне, во вложенном объекте и в элементах коллекции, включая null, если он допустим. Контрактный тест фиксирует ожидания клиента, а интеграционный подтверждает настройки реального сериализатора. Если строгий режим выбран ради контроля схемы, новую версию API или клиента выпускают до изменения ответа.
Ссылки для изучения
Как управлять тестовыми данными автотестов?
Тест сам создаёт минимальные данные через публичный API или factory и получает уникальные идентификаторы, чтобы параллельные прогоны не делили пользователей и записи. Нужны обычные, граничные и невалидные наборы, а время и случайность лучше контролировать. Очистку делают идемпотентной и запускают даже после падения; для изолированной БД удобен rollback или одноразовый контейнер. Снимки production используют только после обезличивания и проверки доступа. Общие «вечные» данные делают тесты зависимыми от порядка и ручного состояния. Если очистка ненадёжна, namespace или TTL уменьшают накопление мусора.
Ссылки для изучения
Как десериализовать JSON-ответ в объект тестового клиента?
В Java создают DTO с типами, соответствующими JSON, включая вложенные классы и коллекции, и десериализуют через Jackson ObjectMapper или Gson. Несовпадающие имена задают аннотацией вроде @JsonProperty; для generic-коллекции Jackson нужен TypeReference, чтобы не потерять параметр типа. Политика неизвестных полей должна быть осознанной: tolerant mode помогает совместимости, strict mode ловит неожиданный контракт. Ошибку mapping не следует превращать в null: в отчёт сохраняют путь поля, ожидаемый тип и безопасный фрагмент ответа. После преобразования проверяют бизнес-значения, а не только успешность парсинга.
Ссылки для изучения







