API for QA intro

Lesson 1

Что такое API?
Аббревиатура API расшифровывается как «Application Programming Interface» (интерфейс программирования приложений, программный интерфейс приложения).

API
— описание способов (набор классов, процедур, функций, структур и/или констант), которыми одна компьютерная программа может взаимодействовать с другой программой.

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

Как вызывается API:

Вызов API напрямую:

  1. Система вызывает функции внутри себя - один компонент системы, может вызывать другой компонент той же системы.

  2. Система вызывает метод другой системы - одна система дергает через api какой-то метод другой системы. Она может попытаться получить данные из другой системы. Или наоборот, отправить данные в эту систему.

  3. Человек вызывает метод - человек делает запрос к системе с использованием программы.

  4. Автотесты вызывают методы - написанный тест, делает запрос к системе.

Косвенный вызов API - вызов API с помощью GUI программы. Как пример: пользователь проходит регистрацию в интернет магазине, заполняет все необходимые поля, и нажимает кнопку зарегистрироваться. Таким образом, с помощью UI пользователем вызывается метод, который отправит данные на сервер.

Формат передачи данных.
Существует множество форматов данных, с помощью которых пользователи взаимодействуют с API.

Наиболее используемые и известные:

Формат передачи данных XML - жестко иерархически структурированный формат передачи данных. Информация в нем описывается с помощью простых тегов.
И JSON — несложный, легкий, а значит и более быстрый формат.

Клиент - серверное взаимодействие. HTTP методы
Клиент - серверное взаимодействие.

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

Данная концепция получила название «клиент-сервер». В данной концепции участвуют две стороны: клиент и сервер. Клиентом выступает «заказчик» той или иной информации или услуги, а сервером - поставщик услуг или же информации. Типичным клиентом является браузер. Клиент и сервер взаимодействую друг с другом в сети Интернет или в любой другой компьютерной сети при помощи различных сетевых протоколов, например, IP протокол, HTTP протокол, FTP и другие.
При помощи HTTP протокола браузер отправляет специальное HTTP сообщение, в котором указано какую информацию и в каком виде он хочет получить от сервера, сервер, получив такое сообщение, отправляет браузеру в ответ похожее по структуре сообщение (или несколько сообщений), в котором содержится нужная информация, обычно это HTML документ.

Сообщения, которые посылают клиенты получили названия HTTP запросы. Запросы имеют специальные методы, которые говорят серверу о том, как обрабатывать сообщение. А сообщения, которые посылает сервер получили название HTTP ответы, они содержат помимо полезной информации еще и специальные коды состояния, которые позволяют браузеру узнать то, как сервер понял его запрос.


HTTP методы. Понятия REST API.


Веб-браузеры, взаимодействуют с веб-серверами при помощи протокола передачи гипертекста (HTTP). Когда вы кликаете на ссылку на странице, заполняете форму или запускаете поиск, браузер отправляет на сервер HTTP-запрос.

Запрос включает:

  • Путь, определяющий целевой сервер и ресурс (например, файл, определенная точка данных на сервере, запускаемый сервис, и т.д.).
  • Метод, который определяет необходимое действие (например, получить файл, REST API сохранить или обновить некоторые данные). Различные методы/команды и связанные с ними действия перечислены ниже:
  • GET – получить определенный ресурс (например, HTML-файл, содержащий информацию о товаре или список товаров).
  • POST – создать новый ресурс (например, новую статью на вики, добавить новый контакт в базу данных).
  • HEAD – получить метаданные об определенном ресурсе без получения содержания, как делает GET. Вы, например, можете использовать запрос HEAD, чтобы узнать, когда в последний раз ресурс обновлялся и только потом использовать (более «затратный») запрос GET, чтобы загрузить ресурс, который был изменен.
  • PUT – обновить существующий ресурс (или создать новый, если таковой не существует).
  • DELETE – удалить указанный ресурс.
  • TRACE, OPTIONS, CONNECT, PATCH – эти команды используются для менее популярных/продвинутых задач, поэтому мы их не будем рассматривать
    Понятия REST API
    REST (RESTful) - это общие принципы организации взаимодействия приложения/сайта с сервером посредством протокола HTTP. Особенность REST в том, что сервер не запоминает состояние пользователя между запросами - в каждом запросе передается информация, идентифицирующая пользователя (например, token, полученный через OAuth-авторизацию) и все параметры, необходимые для выполнения операции.

    Всё взаимодействие с сервером сводится к 4 операциям (4 - это необходимый и достаточный минимум, в конкретной реализации типов операций может быть больше):

    • получение данных с сервера (обычно в формате JSON, или XML);
    • добавление новых данных на сервер;
    • модификация существующих данных на сервере;
    • удаление данных на сервере.

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

    Для каждого типа операции используется свой метод HTTP-запроса:

    • получение - GET;
    • добавление - POST;
    • модификация - PUT;
    • удаление - DELETE.

    Структура запроса. Коды состояния HTTP в response
    Запрос – это сообщение, которое клиент посылает серверу.

    Запрос состоит из: строка запроса (Request Line), заголовки (Message Headers),тело сообщения (Entity Body).

    Строка запроса (Request Line) - это адрес по которому обращается пользователь, для получения запрашиваемой информации.

    Заголовки (Message Headers) — это строки в сообщении, которые описывают тело сообщений, передают различные параметры и др. сведения и информацию о запросе.

    Существует множество заголовков запроса. Их можно разделить на несколько групп:

    • Основные заголовки (General headers), например, Via, относящиеся к сообщению в целом

    • Заголовки запроса (Request headers), например, User-Agent, Accept-Type, уточняющие запрос (как, например, Accept-Language), придающие контекст (как Referer), или накладывающие ограничения на условия (like If-None).

    • Заголовки сущности, например Content-Length, относящиеся к телу сообщения. Как легко понять, они отсутствуют, если у запроса нет тела.
    Последней частью запроса является его тело. Entity Body - это данные связанные с запросом или ответом.

    Тело запроса может быть не у всех методов. Такие запросы как GET, HEAD, DELETE, или OPTIONS являются собирающими ресурсами и в нем не нуждаются. Но некоторые запросы отправляют на сервер данные для обновления, как это часто бывает с запросами с методом POST.


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

    В настоящее время выделено пять классов кодов состояния:

    • 1хх - информационные;
    • 2хх - успешные операции;
    • 3хх - перенаправление - сообщает клиенту, что для успешного выполнения операции необходимо сделать другой запрос (как правило по другому URI);
    • 4хх - ошибка клиента - сообщает клиенту, что как клиент пытается совершить не релевантные действия;
    • 5хх - ошибка сервера - информирование клиента о случаях неудачного выполнения операции по вине сервера.
    Разница между REST и SOAP
    REST и SOAP на самом деле не сопоставимы. REST — это архитектурный стиль. SOAP — это формат обмена сообщениями. Давайте сравним популярные реализации стилей REST и SOAP.

    • Пример реализации RESTful: JSON через HTTP
    • Пример реализации SOAP: XML поверх SOAP через HTTP

    На верхнем уровне SOAP ограничивает структуры ваших сообщений, тогда как REST — это архитектурный подход, ориентированный на использование HTTP в качестве транспортного протокола.

    • Специфика SOAP — это формат обмена данными. С SOAP это всегда SOAP-XML, который представляет собой XML, включающий:
      — Envelope (конверт) – корневой элемент, который определяет сообщение и пространство имен, использованное в документе,
      — Header (заголовок) – содержит атрибуты сообщения, например: информация о безопасности или о сетевой маршрутизации,
      — Body (тело) – содержит сообщение, которым обмениваются приложения,
      — Fault – необязательный элемент, который предоставляет информацию об ошибках, которые произошли при обработке сообщений. И запрос, и ответ должны соответствовать структуре SOAP.
    • Специфика REST — использование HTTP в качестве транспортного протокола. Он подразумевает наилучшее использование функций, предоставляемых HTTP — методы запросов, заголовки запросов, ответы, заголовки ответов и т. д.

    Формат обмена сообщениями
    • В SOAP вы используете формат SOAP XML для запросов и ответов.
    • В REST такого фиксированного формата нет. Вы можете обмениваться сообщениями на основе XML, JSON или любого другого удобного формата. JSON является самым популярным среди используемых форматов.

    Определения услуг
    • SOAP использует WSDL (Web Services Description Language) — язык описания веб-сервисов и доступа к ним, основанный на языке XML.
    • REST не имеет стандартного языка определения сервиса. Несмотря на то, что WADL был одним из первых предложенных стандартов, он не очень популярен. Более популярно использование Swagger или Open API.

    Транспорт
    SOAP не накладывает никаких ограничений на тип транспортного протокола. Вы можете использовать либо Web протокол HTTP, либо MQ.

    REST подразумевает наилучшее использование транспортного протокола HTTP

    Простота реализации
    RESTFful веб-сервисы, как правило, гораздо проще реализовать, чем веб-сервисы на основе SOAP.

    • REST обычно использует JSON, который легче анализировать и обрабатывать. В дополнение к этому, REST не требует наличия определения службы для предоставления веб-службы.
    • Однако в случае SOAP вам необходимо определить свой сервис с использованием WSDL, и при обработке и анализе сообщений SOAP-XML возникают большие накладные расходы.

    Практическое задание:

    На примере Trello ( https://trello.com) создать доску и произвести операции для каждого метода.

    GET
    POST
    PUT
    DELETE

    Написать в doc файле какое из действий отвечало за каждый метод во время тестирования.

    Подгрузить doc файл можно нажав на кнопку Upload file и выбрав папку со своим именем.

    Дополнительная информация:

    XHR (XMLHttpRequest) https://ru.wikipedia.org/wiki/XMLHttpRequest

    По разнице REST WITH SOAP
    Сравнительная таблица REST with SOAP - https://gist.github.com/nanotexnolagiya/8d27d4e465...
    http://www.xfront.com/REST-Web-Services.html
    https://dataart.com.ua/news/rest-i-soap-pochuvstvu...

    Вот эта приглянулась простотой изложения
    https://medium.com/@nanotexnolagiya/сравнение-soap-и-rest-с-json-2019-779fef6eba9b