Api система: API — Википедия
Что такое API / Хабр
Содержание
Слово «API» мелькает в вакансиях даже для начинающих тестировщиков. То REST API, то SOAP API, то просто API. Что же это за зверь такой? Давайте разбираться!
— А зачем это мне? Я вообще-то web тестирую! Вот если пойду в автоматизацию, тогда да… Ну, еще это в enterprise тестируют, я слышал…
А вот и нет! Про API полезно знать любому тестировщику. Потому что по нему системы взаимодействуют между собой. И это взаимодействие вы видите каждый день даже на самых простых и захудалых сайтах.
Любая оплата идет через API платежной системы. Купил билет в кино? Маечку в онлайн-магазине? Книжку? Как только жмешь «оплатить», сайт соединяет тебя с платежной системой.
Но даже если у вас нет интеграции с другими системами, у вас всё равно есть API! Потому что система внутри себя тоже общается по api. И пока фронт-разработчик усиленно пилит GUI (графический интерфейс), вы можете:
- скучать в ожидании;
- проверять логику работы по API
Конечно, я за второй вариант! Так что давайте разбираться, что же такое API. Можно посмотреть видео на
youtube
, или прочитать дальше в виде статьи.
Что такое API
API (Application programming interface) — это контракт, который предоставляет программа. «Ко мне можно обращаться так и так, я обязуюсь делать то и это».
Если переводить на русский, это было бы слово «договор». Договор между двумя сторонами, как договор на покупку машины:
- мои обязанности — внести такую то сумму,
- обязанность продавца — дать машину.
Перевести можно, да. Но никто так не делает ¯\_(ツ)_/¯
Все используют слово «контракт». Так принято. К тому же это слово входит в название стиля разработки:
- Code first — сначала пишем код, потом по нему генерируем контракт
- Contract first — сначала создаем контракт, потом по нему пишем или генерируем код (в этой статье я буду говорить именно об этом стиле)
Мы же не говорим «контракт на продажу машины»? Вот и разработчики не говорят «договор». Негласное соглашение.
API — набор функций
Когда вы покупаете машину, вы составляете договор, в котором прописываете все важные для вас пункты. Точно также и между программами должны составляться договоры. Они указывают, как к той или иной программе можно обращаться.
Соответственно, API отвечает на вопрос “Как ко мне, к моей системе можно обратиться?”, и включает в себя:
- саму операцию, которую мы можем выполнить,
- данные, которые поступают на вход,
- данные, которые оказываются на выходе (контент данных или сообщение об ошибке).
Тут вы можете мне сказать:
— Хмм, погоди. Операция, данные на входе, данные на выходе — как-то всё это очень сильно похоже на описание функции!
Если вы когда-то сталкивались с разработкой или просто изучали язык программирования, вы наверняка знаете, что такое функция. Фактически у нас есть данные на входе, есть данные на выходе, и некая магия, которая преобразует одно в другое.
И да! Вы будете правы в том, что определения похожи. Почему? Да потому что API — это набор функций. Это может быть одна функция, а может быть много.
Как составляется набор функций
Да без разницы как. Как разработчик захочет, так и сгруппирует. Например, можно группировать API по функционалу. То есть:
- отдельно API для входа в систему, где будет регистрация и авторизация;
- отдельно API для отчетности — отчет 1, отчет 2, отчет 3… отчет N. Для разных отчетов у нас разные формулы = разные функции. И все мы их собираем в один набор, api для отчетности.
- отдельно API платежек — для работы с каждым банком своя функция.
- …
Можно не группировать вообще, а делать одно общее API.
Можно сделать одно общее API, а остальные «под заказ». Если у вас коробочный продукт, то в него обычно входит набор стандартных функций. А любые хотелки заказчиков выносятся отдельно.
Получается, что в нашей системе есть несколько разных API, на каждое из которых у нас написан контракт. В каждом контракте четко прописано, какие операции можно выполнять, какие функции там будут
И конечно, функции можно переиспользовать. То есть одну и ту же функцию можно включать в разные наборы, в разные апи. Никто этого не запрещает.
Получается, что разработчик придумывает, какое у него будет API. Либо делает общее, либо распределяет по функционалу или каким-то своим критериям, и в каждое апи добавляет тот набор функций, который ему необходим.
При чем тут слово «интерфейс»
— Минуточку, Оля! Ты же сама выше писала, что API — это Application programming interface. Почему ты тогда говоришь о контракте, хотя там слово интерфейс?
Да потому, что в программировании контракт — это и есть интерфейс. В классическом описании ООП (объектно-ориентированного программирования) есть 3 кита:
- Инкапсуляция
- Наследование
- Полиморфизм
Инкапсуляция — это когда мы скрываем реализацию. Для пользователя все легко и понятно. Нажал на кнопочку — получил отчет. А как это работает изнутри — ему все равно. Какая база данных скрыта под капотом? Oracle? MySQL? На каком языке программирования написана программа? Как именно организован код? Не суть. Программа предоставляет интерфейс, им он и пользуется.
Не всегда программа предоставляет именно графический интерфейс. Это может быть SOAP, REST интерфейс, или другое API. Чтобы использовать этот интерфейс, вы должны понимать:
- что подать на вход;
- что получается на выходе;
- какие исключения нужно обработать.
Пользователи работают с
GUI — graphical user interface
. Программы работают с
API — Application programming interface
. Им не нужна графика, только контракт.
Вызвать апи можно как напрямую, так и косвенно.
Напрямую:
- Система вызывает функции внутри себя
- Система вызывает метод другой системы
- Человек вызывает метод
- Автотесты дергают методы
Косвенно:
- Пользователь работает с GUI
Вызов API напрямую
1. Система вызывает функции внутри себя
Разные части программы как-то общаются между собой. Они делают это на программном уровне, то есть на уровне API!
Это самый «простой» в использовании способ, потому что автор API, которое вызывается — разработчик. И он же его потребитель! А значит, проблемы с неактуальной документацией нет =)
Шучу, проблемы с документацией есть всегда. Просто в этом случае в качестве документации будут комментарии в коде. А они, увы, тоже бывают неактуальны. Или разработчики разные, или один, но уже забыл, как делал исходное api и как оно должно работать…
2. Система вызывает метод другой системы
А вот это типичный кейс, которые тестируют тестировщики в интеграторах. Или тестировщики, которые проверяют интеграцию своей системы с чужой.
Одна система дергает через api какой-то метод другой системы. Она может попытаться получить данные из другой системы. Или наоборот, отправить данные в эту систему.
Допустим, я решила подключить подсказки из Дадаты к своему интернет-магазинчику, чтобы пользователь легко ввел адрес доставки.
Я подключаю подсказки по API. И теперь, когда пользователь начинает вводить адрес на моем сайте, он видит подсказки из Дадаты. Как это получается:
- Он вводит букву на моем сайте
- Мой сайт отправляет запрос в подсказки Дадаты по API
- Дадата возвращает ответ
- Мой сайт его обрабатывает и отображает результат пользователю
Вон сколько шагов получилось! И так на каждый введенный символ. Пользователь не видит этого взаимодействия, но оно есть.
И, конечно, не забываем про кейс, когда мы разрабатываем именно API-метод. Который только через SOAP и можно вызвать, в интерфейсе его нигде нет. Что Заказчик заказал, то мы и сделали ¯\_(ツ)_/¯
Пример можно посмотреть в Users. Метод MagicSearch создан на основе реальных событий. Хотя надо признать, в оригинале логика еще замудренее была, я то под свой сайт подстраивала.
Но тут фишка в том, что в самой системе в пользовательском интерфейсе есть только обычный поиск, просто строка ввода. Ну, может, парочка фильтров. А вот для интеграции нужна была целая куча доп возможностей, что и было сделано через SOAP-метод.
Функционал супер-поиска доступен только по API, пользователь в интерфейсе его никак не пощупает.
В этом случае у вас обычно есть ТЗ, согласно которому работает API-метод. Ваша задача — проверить его. Типичная задача тестировщика, просто добавьте к стандартным тестам на тест-дизайн особенности тестирования API, и дело в шляпе!
(что именно надо тестировать в API — я расскажу отдельной статьей чуть позднее)
3. Человек вызывает метод
Причины разные:
- Для ускорения работы
- Для локализации бага (проблема где? На сервере или клиенте?)
- Для проверки логики без докруток фронта
Если система предоставляет API, обычно проще дернуть его, чем делать то же самое через графический интерфейс. Тем более что вызов API можно сохранить в инструменте. Один раз сохранил — на любой базе применяешь, пусть даже она по 10 раз в день чистится.
Для примера снова идем в Users. Если мы хотим создать пользователя, надо заполнить уйму полей!
Конечно, это можно сделать в помощью специальных плагинов типа Form Filler. Но что, если вам нужны адекватные тестовые данные под вашу систему? И на русском языке?
Заполнение полей вручную — грустно и уныло! А уж если это надо повторять каждую неделю или день на чистой тестовой базе — вообще кошмар. Это сразу первый приоритет на автоматизацию рутинных действий.
И в данном случае роль автоматизатора выполняет… Postman. Пользователя можно создать через REST-запрос CreateUser. Один раз прописали нормальные “как настоящие” данные, каждый раз пользуемся. Профит!
Вместо ручного заполнения формы (1 минута бездумного заполнения полей значениями «лпрулпк») получаем 1 секунду нажатия на кнопку «Send». При этом значения будут намного адекватнее.
А еще в постмане можно сделать отдельную папку подготовки тестовой базы, напихать туда десяток запросов. И вот уже на любой базе за пару секунд вы получаете столько данных, сколько вручную вбивали бы часами!
Если вы нашли баг и не понимаете, на кого его вешать — разработчика front-end или back-end, уберите все лишнее. Вызовите метод без графического интерфейса. А еще вы можете тестировать логику программы, пока интерфейс не готов или сломан.
4. Автотесты дергают методы
Есть типичная пирамида автоматизации:
- GUI-тесты — честный тест, «как это делал бы пользователь».
- API-тесты — опускаемся на уровень ниже, выкидывая лишнее.
- Unit-тесты — тесты на отдельную функцию
Слово API как бы намекает на то, что будет использовано в тестах ツ
Допустим, у нас есть:
- операция: загрузка отчета;
- на входе: данные из ручных или автоматических корректировок или из каких-то других мест;
- на выходе: отчет, построенный по неким правилам
Правила построения отчета:
- Ячейка 1: Х — Y
- Ячейка 2: Z * 6
- …
GUI-тесты — честный тест, робот делает все, что делал бы пользователь. Открывает браузер, тыкает на кнопочки… Но если что-то упадет, будете долго разбираться, где именно.
API-тесты — все то же самое, только без браузера. Мы просто подаем данные на вход и проверяем данные на выходе. Например, можно внести итоговый ответ в эксельку, и пусть робот выверяет ее, правильно ли заполняются данные? Локализовать проблему становится проще.
Unit-тесты — это когда мы проверяем каждую функцию отдельно. Отдельно смотрим расчет для ячейки 1, отдельно — для ячейки 2, и так далее. Такие тесты шустрее всего гоняются и баги по ним легко локализовать.
Косвенный вызов API
Когда пользователь работает с GUI, на самом деле он тоже работает с API. Просто не знает об этом, ему это просто не нужно.
То есть когда пользователь открывает систему и пытается загрузить отчет, ему не важно, как работает система, какой там magic внутри. У него есть кнопочка «загрузить отчет», на которую он и нажимает. Пользователь работает через GUI (графический пользовательский интерфейс).
Но на самом деле под этим графическим пользовательским интерфейсом находится API. И когда пользователь нажимает на кнопочку, кнопочка вызывает функцию построения отчета.
А функция построения отчета уже может вызывать 10 разных других функций, если ей это необходимо.
И вот уже пользователь видит перед собой готовый отчет. Он вызвал сложное API, даже не подозревая об этом!
В первую очередь, мы подразумеваем тестирование ЧЕРЕЗ API. «Тестирование API» — общеупотребимый термин, так действительно говорят, но технически термин некорректен. Мы не тестируем API, мы не тестируем GUI (графический интерфейс). Мы тестируем какую-то функциональность через графический или программный интерфейс.
Но это устоявшееся выражение. Можно использовать его и говорить “тестирование API”. И когда мы про это говорим, мы имеем в виду:
- автотесты на уровне API
- или интеграцию между двумя разными системами.
Интеграция — когда одна система общается с другой по какому-то протоколу передачи данных. Это называется Remote API, то есть общение по сети, по некоему протоколу (HTTP, JMS и т. д.). В противовес ему есть еще Local API (он же «Shared memory API») — это то API, по которому программа общается сама с собой или общается с другой программой внутри одной виртуальной памяти.
Когда мы говорим про тестирование API, чаще всего мы подразумеваем тестирование Remote API. Когда у нас есть две системы, находящихся на разных компьютерах, которые как-то между собой общаются.
И если вы видите в вакансии «тестирование API», скорее всего это подразумевает умение вызвать SOAP или REST сервис и протестировать его. Хотя всегда стоит уточнить!
API (Application programming interface)
— это контракт, который предоставляет программа. «Ко мне можно обращаться так и так, я обязуюсь делать то и это».
Контракт включает в себя:
- саму операцию, которую мы можем выполнить,
- данные, которые поступают на вход,
- данные, которые оказываются на выходе (контент данных или сообщение об ошибке).
».
Что такое API / Habr
Содержание
Слово «API» мелькает в вакансиях даже для начинающих тестировщиков. То REST API, то SOAP API, то просто API. Что же это за зверь такой? Давайте разбираться!
— А зачем это мне? Я вообще-то web тестирую! Вот если пойду в автоматизацию, тогда да… Ну, еще это в enterprise тестируют, я слышал…
А вот и нет! Про API полезно знать любому тестировщику. Потому что по нему системы взаимодействуют между собой. И это взаимодействие вы видите каждый день даже на самых простых и захудалых сайтах.
Любая оплата идет через API платежной системы. Купил билет в кино? Маечку в онлайн-магазине? Книжку? Как только жмешь «оплатить», сайт соединяет тебя с платежной системой.
Но даже если у вас нет интеграции с другими системами, у вас всё равно есть API! Потому что система внутри себя тоже общается по api. И пока фронт-разработчик усиленно пилит GUI (графический интерфейс), вы можете:
- скучать в ожидании;
- проверять логику работы по API
Конечно, я за второй вариант! Так что давайте разбираться, что же такое API. Можно посмотреть видео на youtube, или прочитать дальше в виде статьи.
Что такое API
API (Application programming interface) — это контракт, который предоставляет программа. «Ко мне можно обращаться так и так, я обязуюсь делать то и это».
Если переводить на русский, это было бы слово «договор». Договор между двумя сторонами, как договор на покупку машины:
- мои обязанности — внести такую то сумму,
- обязанность продавца — дать машину.
Перевести можно, да. Но никто так не делает ¯\_(ツ)_/¯
Все используют слово «контракт». Так принято. К тому же это слово входит в название стиля разработки:
- Code first — сначала пишем код, потом по нему генерируем контракт
- Contract first — сначала создаем контракт, потом по нему пишем или генерируем код (в этой статье я буду говорить именно об этом стиле)
Мы же не говорим «контракт на продажу машины»? Вот и разработчики не говорят «договор». Негласное соглашение.
API — набор функций
Когда вы покупаете машину, вы составляете договор, в котором прописываете все важные для вас пункты. Точно также и между программами должны составляться договоры. Они указывают, как к той или иной программе можно обращаться.
Соответственно, API отвечает на вопрос “Как ко мне, к моей системе можно обратиться?”, и включает в себя:
- саму операцию, которую мы можем выполнить,
- данные, которые поступают на вход,
- данные, которые оказываются на выходе (контент данных или сообщение об ошибке).
Тут вы можете мне сказать:
— Хмм, погоди. Операция, данные на входе, данные на выходе — как-то всё это очень сильно похоже на описание функции!
Если вы когда-то сталкивались с разработкой или просто изучали язык программирования, вы наверняка знаете, что такое функция. Фактически у нас есть данные на входе, есть данные на выходе, и некая магия, которая преобразует одно в другое.
И да! Вы будете правы в том, что определения похожи. Почему? Да потому что API — это набор функций. Это может быть одна функция, а может быть много.
Как составляется набор функций
Да без разницы как. Как разработчик захочет, так и сгруппирует. Например, можно группировать API по функционалу. То есть:
- отдельно API для входа в систему, где будет регистрация и авторизация;
- отдельно API для отчетности — отчет 1, отчет 2, отчет 3… отчет N. Для разных отчетов у нас разные формулы = разные функции. И все мы их собираем в один набор, api для отчетности.
- отдельно API платежек — для работы с каждым банком своя функция.
- …
Можно не группировать вообще, а делать одно общее API.
Можно сделать одно общее API, а остальные «под заказ». Если у вас коробочный продукт, то в него обычно входит набор стандартных функций. А любые хотелки заказчиков выносятся отдельно.
Получается, что в нашей системе есть несколько разных API, на каждое из которых у нас написан контракт. В каждом контракте четко прописано, какие операции можно выполнять, какие функции там будут
И конечно, функции можно переиспользовать. То есть одну и ту же функцию можно включать в разные наборы, в разные апи. Никто этого не запрещает.
Получается, что разработчик придумывает, какое у него будет API. Либо делает общее, либо распределяет по функционалу или каким-то своим критериям, и в каждое апи добавляет тот набор функций, который ему необходим.
При чем тут слово «интерфейс»
— Минуточку, Оля! Ты же сама выше писала, что API — это Application programming interface. Почему ты тогда говоришь о контракте, хотя там слово интерфейс?
Да потому, что в программировании контракт — это и есть интерфейс. В классическом описании ООП (объектно-ориентированного программирования) есть 3 кита:
- Инкапсуляция
- Наследование
- Полиморфизм
Инкапсуляция — это когда мы скрываем реализацию. Для пользователя все легко и понятно. Нажал на кнопочку — получил отчет. А как это работает изнутри — ему все равно. Какая база данных скрыта под капотом? Oracle? MySQL? На каком языке программирования написана программа? Как именно организован код? Не суть. Программа предоставляет интерфейс, им он и пользуется.
Не всегда программа предоставляет именно графический интерфейс. Это может быть SOAP, REST интерфейс, или другое API. Чтобы использовать этот интерфейс, вы должны понимать:
- что подать на вход;
- что получается на выходе;
- какие исключения нужно обработать.
Пользователи работают с GUI — graphical user interface. Программы работают с API — Application programming interface. Им не нужна графика, только контракт.
Вызвать апи можно как напрямую, так и косвенно.
Напрямую:
- Система вызывает функции внутри себя
- Система вызывает метод другой системы
- Человек вызывает метод
- Автотесты дергают методы
Косвенно:
- Пользователь работает с GUI
Вызов API напрямую
1. Система вызывает функции внутри себя
Разные части программы как-то общаются между собой. Они делают это на программном уровне, то есть на уровне API!
Это самый «простой» в использовании способ, потому что автор API, которое вызывается — разработчик. И он же его потребитель! А значит, проблемы с неактуальной документацией нет =)
Шучу, проблемы с документацией есть всегда. Просто в этом случае в качестве документации будут комментарии в коде. А они, увы, тоже бывают неактуальны. Или разработчики разные, или один, но уже забыл, как делал исходное api и как оно должно работать…
2. Система вызывает метод другой системы
А вот это типичный кейс, которые тестируют тестировщики в интеграторах. Или тестировщики, которые проверяют интеграцию своей системы с чужой.
Одна система дергает через api какой-то метод другой системы. Она может попытаться получить данные из другой системы. Или наоборот, отправить данные в эту систему.
Допустим, я решила подключить подсказки из Дадаты к своему интернет-магазинчику, чтобы пользователь легко ввел адрес доставки.
Я подключаю подсказки по API. И теперь, когда пользователь начинает вводить адрес на моем сайте, он видит подсказки из Дадаты. Как это получается:
- Он вводит букву на моем сайте
- Мой сайт отправляет запрос в подсказки Дадаты по API
- Дадата возвращает ответ
- Мой сайт его обрабатывает и отображает результат пользователю
Вон сколько шагов получилось! И так на каждый введенный символ. Пользователь не видит этого взаимодействия, но оно есть.
И, конечно, не забываем про кейс, когда мы разрабатываем именно API-метод. Который только через SOAP и можно вызвать, в интерфейсе его нигде нет. Что Заказчик заказал, то мы и сделали ¯\_(ツ)_/¯
Пример можно посмотреть в Users. Метод MagicSearch создан на основе реальных событий. Хотя надо признать, в оригинале логика еще замудренее была, я то под свой сайт подстраивала.
Но тут фишка в том, что в самой системе в пользовательском интерфейсе есть только обычный поиск, просто строка ввода. Ну, может, парочка фильтров. А вот для интеграции нужна была целая куча доп возможностей, что и было сделано через SOAP-метод.
Функционал супер-поиска доступен только по API, пользователь в интерфейсе его никак не пощупает.
В этом случае у вас обычно есть ТЗ, согласно которому работает API-метод. Ваша задача — проверить его. Типичная задача тестировщика, просто добавьте к стандартным тестам на тест-дизайн особенности тестирования API, и дело в шляпе!
(что именно надо тестировать в API — я расскажу отдельной статьей чуть позднее)
3. Человек вызывает метод
Причины разные:
- Для ускорения работы
- Для локализации бага (проблема где? На сервере или клиенте?)
- Для проверки логики без докруток фронта
Если система предоставляет API, обычно проще дернуть его, чем делать то же самое через графический интерфейс. Тем более что вызов API можно сохранить в инструменте. Один раз сохранил — на любой базе применяешь, пусть даже она по 10 раз в день чистится.
Для примера снова идем в Users. Если мы хотим создать пользователя, надо заполнить уйму полей!
Конечно, это можно сделать в помощью специальных плагинов типа Form Filler. Но что, если вам нужны адекватные тестовые данные под вашу систему? И на русском языке?
Заполнение полей вручную — грустно и уныло! А уж если это надо повторять каждую неделю или день на чистой тестовой базе — вообще кошмар. Это сразу первый приоритет на автоматизацию рутинных действий.
И в данном случае роль автоматизатора выполняет… Postman. Пользователя можно создать через REST-запрос CreateUser. Один раз прописали нормальные “как настоящие” данные, каждый раз пользуемся. Профит!
Вместо ручного заполнения формы (1 минута бездумного заполнения полей значениями «лпрулпк») получаем 1 секунду нажатия на кнопку «Send». При этом значения будут намного адекватнее.
А еще в постмане можно сделать отдельную папку подготовки тестовой базы, напихать туда десяток запросов. И вот уже на любой базе за пару секунд вы получаете столько данных, сколько вручную вбивали бы часами!
Если вы нашли баг и не понимаете, на кого его вешать — разработчика front-end или back-end, уберите все лишнее. Вызовите метод без графического интерфейса. А еще вы можете тестировать логику программы, пока интерфейс не готов или сломан.
4. Автотесты дергают методы
Есть типичная пирамида автоматизации:
- GUI-тесты — честный тест, «как это делал бы пользователь».
- API-тесты — опускаемся на уровень ниже, выкидывая лишнее.
- Unit-тесты — тесты на отдельную функцию
Слово API как бы намекает на то, что будет использовано в тестах ツ
Допустим, у нас есть:
- операция: загрузка отчета;
- на входе: данные из ручных или автоматических корректировок или из каких-то других мест;
- на выходе: отчет, построенный по неким правилам
Правила построения отчета:
- Ячейка 1: Х — Y
- Ячейка 2: Z * 6
- …
GUI-тесты — честный тест, робот делает все, что делал бы пользователь. Открывает браузер, тыкает на кнопочки… Но если что-то упадет, будете долго разбираться, где именно.
API-тесты — все то же самое, только без браузера. Мы просто подаем данные на вход и проверяем данные на выходе. Например, можно внести итоговый ответ в эксельку, и пусть робот выверяет ее, правильно ли заполняются данные? Локализовать проблему становится проще.
Unit-тесты — это когда мы проверяем каждую функцию отдельно. Отдельно смотрим расчет для ячейки 1, отдельно — для ячейки 2, и так далее. Такие тесты шустрее всего гоняются и баги по ним легко локализовать.
Косвенный вызов API
Когда пользователь работает с GUI, на самом деле он тоже работает с API. Просто не знает об этом, ему это просто не нужно.
То есть когда пользователь открывает систему и пытается загрузить отчет, ему не важно, как работает система, какой там magic внутри. У него есть кнопочка «загрузить отчет», на которую он и нажимает. Пользователь работает через GUI (графический пользовательский интерфейс).
Но на самом деле под этим графическим пользовательским интерфейсом находится API. И когда пользователь нажимает на кнопочку, кнопочка вызывает функцию построения отчета.
А функция построения отчета уже может вызывать 10 разных других функций, если ей это необходимо.
И вот уже пользователь видит перед собой готовый отчет. Он вызвал сложное API, даже не подозревая об этом!
В первую очередь, мы подразумеваем тестирование ЧЕРЕЗ API. «Тестирование API» — общеупотребимый термин, так действительно говорят, но технически термин некорректен. Мы не тестируем API, мы не тестируем GUI (графический интерфейс). Мы тестируем какую-то функциональность через графический или программный интерфейс.
Но это устоявшееся выражение. Можно использовать его и говорить “тестирование API”. И когда мы про это говорим, мы имеем в виду:
- автотесты на уровне API
- или интеграцию между двумя разными системами.
Интеграция — когда одна система общается с другой по какому-то протоколу передачи данных. Это называется Remote API, то есть общение по сети, по некоему протоколу (HTTP, JMS и т. д.). В противовес ему есть еще Local API (он же «Shared memory API») — это то API, по которому программа общается сама с собой или общается с другой программой внутри одной виртуальной памяти.
Когда мы говорим про тестирование API, чаще всего мы подразумеваем тестирование Remote API. Когда у нас есть две системы, находящихся на разных компьютерах, которые как-то между собой общаются.
И если вы видите в вакансии «тестирование API», скорее всего это подразумевает умение вызвать SOAP или REST сервис и протестировать его. Хотя всегда стоит уточнить!
API (Application programming interface) — это контракт, который предоставляет программа. «Ко мне можно обращаться так и так, я обязуюсь делать то и это».
Контракт включает в себя:
- саму операцию, которую мы можем выполнить,
- данные, которые поступают на вход,
- данные, которые оказываются на выходе (контент данных или сообщение об ошибке).
».
что это – инструменты для API testing
Согласно исследованиям Google Trends, в последнее время продолжает возрастать интерес к тестированию интерфейсов прикладного программирования (API). В 2017 году американская компания SmartBear Software, разрабатывающая программное оснащение для программистов и тестировщиков, провела масштабный опрос среди профессионалов в данной области. Результат показал, что более половины программистов используют автоматизированные инструменты для тестирования интерфейсов прикладного программирования (API testing). При этом ожидается рост этого показателя до 80 %.
Следовательно, использование эффективных инструментов для автоматического тестирования API крайне важно. Сегодня становится понятным, что API testing – это не просто способ контроля качества, но и компонент эффективного внедрения программного обеспечения.
Схема API testing
API Testing
В этом материале мы представим обзор 9 решений (бесплатных или коммерческих) для тестирования API.
Инструмента тестирования Postman
Postman
Этот инструмент перерос с плагина для Chrome до многофункционального инструмента тестирования, совместимого с платформами Windows и Mac. Postman считается оптимальным выбором для тех, кто хочет использовать язык разработчика, а не работать с кодировками в интегрированной программной среде. Можно выделить следующие преимущества инструмента:
- широкий интерфейс делает тестирование удобным и простым;
- можно использовать технологию автоматического и исследовательского тестирования;
- удобный в работе клиент REST;
- широкий пакет возможностей для интеграции, включая совместимость с форматами RAML и Swagger;
- корректно функционирует в программах, разработанных для Windows, Linux, Mac и Chrome;
- включены функции Document, Monitoring, Run и Test;
- для полномасштабного использования не нужно учить новый язык программирования;
- интегрирована система легкого обмена полученным опытом между участниками команды. Программа систематизирует запросы и ожидаемые ответы, рассылает результаты участникам проекта.
Цена: от бесплатного тестового периода до 21$ с одного аккаунта в месяц.
Консольный инструмент SoapUI
SoapUI
Это удобный консольный инструмент, дающий возможность быстрого и простого тестирования SOAP, API REST и веб-сервисов. С использованием SoapUI можно открыть исходный документ и интегрировать необходимый набор функций, включая описанные ниже:
- быстрое создание программного кода с использованием технологии Groovy;
- быстрое создание тестов методом «указания клика» и привычного перемещения объектов с помощью мыши;
- мощный API testing с загрузкой данных из Excel, БД и файлов. Такой алгоритм позволяет реалистично симулировать реальное взаимодействие юзера и API;
- присутствует поддержка асинхронного тестирования и возможность запуска комплексных сценариев;
- сканирование безопасности и загрузка тестов могут использоваться повторно, для чего придется сделать всего пару кликов.
Цена: от бесплатного тестового периода до 659$ / год.
Tricentis Tosca — платформа для непрерывного тестирования
Tricentis Tosca
Это платформа для непрерывного тестирования для технологий DevOps и Agile. Можно выделить следующие плюсы инструмента:
- поддерживает большинство популярных протоколов, включая REST, IBM MQ, Rabbit MQ, TIBCO EMS, NET TCP, SOAP, AMQP и HTTP(s) JMS;
- интегрируется в циклы DevOps и Agile;
- API testing может проводиться на мобильных, браузерных и пакетных приложениях;
- автоматизация поддерживается внедренными передовыми технологиями;
- сокращено время проведения регрессивных тестов.
Цена: может меняться.
Бесплатный API testing инструмент Katalon Studio
Katalon Studio
Это бесплатный API testing инструмент, что особенно нравится начинающим разработчикам. Он предоставляет общую среду для разработки и выполнения UI-функционала, тестирования мобильных продуктов и служб API/Web. Главным преимуществом решения является его способность комбинации уровней Business (службы API/Web) и UI. Инструмент полностью совместим с операционными системами Mac OS, Linux и Windows.
Katalon Studio поддерживает запросы RESTful и SOAP с разными командами (PUT, DELETE, GET, POST). При этом существует возможность настройки параметров команд.
Главные особенности:
- поддержка API testing запросов RESTful и SOAP;
- множество интегрированных ключей для постановки тестовых задач;
- комбинированная поддержка теста между верификациями API и UI;
- поддержка библиотеки проверки утверждений AssertJ;
- возможность применения подхода, управляемого полученными данными;
- использование исследовательского и автоматического типа тестирования;
- хорошее решение как для начинающих разработчиков, так и для опытных.
Цена: бесплатно.
Jmeter — инструмент функционального тестирования
Jmeter
Изначально это открытое программное обеспечение разрабатывалось для нагрузочного тестирования. Но сегодня оно активно используется для функционального тестирования.
Основные особенности:
- автоматически поддерживает файлы CSV, что необходимо для быстрого указания уникальных параметров тестирования;
- результаты тестирования воспроизводятся;
- может применяться в рамках динамического и статического API testing для определения производительности технических ресурсов;
- интеграция Jenkins и JMeter открывает возможность включать тесты в конвейерные обработки CI.
Цена: открытое программное обеспечение.
Apigee: кросс-облачная платформа для тестов API
Apigee
Это кросс-облачная платформа для тестов API, дающая возможность измерять и настраивать производительность, обеспечивать разработку API и технической поддержки с применением сторонних редакторов (Swagger). Система работает по многошаговому алгоритму, который управляется Javascript.
Главные плюсы:
- дает возможность разрабатывать, разворачивать, отслеживать и масштабировать API;
- с помощью Open API Specification быстро создает прокси и производит развертку в «облаке»;
- определяет слабые места путем наблюдения за трафиком, оценки количества ошибок и продолжительности ожидания ответа;
- на базе одного кода функционируют модели разворачивания в локальной среде и «облаке», также доступен гибридный режим.
Система тестирования Apigee создана для онлайн-бизнеса и сфер, где требуется интенсивная обработка данных. В силу своей специфики и многофункциональности решение нельзя назвать доступным.
Цена: от бесплатного пробного периода до 2 500$ / месяц.
Assertible — инструмент тестирования интерфейсов прикладного программирования
Assertible
Это инструмент тестирования интерфейсов прикладного программирования, который отличается надежностью и автоматизацией процессов. Его преимущества заключаются в следующем:
- система обеспечивает автоматический API testing на всех этапах интеграции и поставки приложения;
- поддерживает текущие тесты после интеграции программного обеспечения, совмещая их с популярными инструментами Slack, Zapier и GitHub;
- с помощью готовых операторов осуществляется поддержка подлинности ответов HTTP, что позволяет контролировать наличие ошибок целостности.
Цена: от бесплатного тестового периода до 500$ / месяц.
Тестирование REST от Rest-Assured
Rest-Assured
Это открытый предметно-ориентированный Java-язык, делающий тестирование REST быстрым и удобным. Его плюсы:
- имеет большой набор интегрированных функционалов, поэтому не приходится прибегать к повторному кодированию;
- качественно интегрирован с платформой Serenity, что открывает возможность комбинировать тесты REST и UI в одной среде, получая хорошие результаты;
- совместим с синтаксисом конструкций BDD Given/When/Then;
- для полноценного использования не обязательно глубоко разбираться в HTTP.
Цена: открытое программное обеспечение.
Новое решение для тестирования API — Karate DSL
Karate DSL
Относительно новое решение для тестирования API, помогающее создавать сценарии BDD-тестов без необходимости написания характеристик этапов. Необходимые характеристики генерируются самим Karate DSL, что ускоряет и упрощает процесс запуска тестирования.
Преимущества решения:
- интегрирован на вершине Cucumber-JVM;
- может запускать тестирование и получать отчеты, как другие стандартные инструменты Java;
- поддерживает параллельное многопотоковое выполнение программного кода, а также конфигурацию переключения/продвижения;
- создать тест можно без знаний языка программирования Java;
- тестирование может осуществлять человек, не работающий непосредственно в программировании.
Цена: открытое программное обеспечение.
Есть ли универсальное решение
Нет. Вышеописанные инструменты позволяют справляться с любыми задачами в области API testing, но только в комплексе. Как и все продукты для разработчиков, решения для тестирования API не могут совмещать в рамках одного продукта все возможные функции.
Для большинства заинтересованных пользователей возможностей платных продуктов вполне достаточно, но переход на них сдерживается сравнительно высокой стоимостью. Бесплатные решения вполне способны справляться с различными видами тестирования, но их применение сопряжено с необходимостью получения специфических знаний, а также с некоторой сложностью внедрения. Кроме того, нужно учитывать, что некоторые вполне удобные инструменты могут не сочетаться с конкретной платформой, технологией или задачей.
Универсальное решение для API testing
Универсальное решение для тестирования API
Нужно понимать, что API testing – это актуальный тренд в области автоматического тестирования программного обеспечения. Поэтому на рынке неизбежно будут появляться новые инструменты. Они будут более удобными, многофункциональными или специализированными. В любом случае идеального решения для всех задач разработки программного обеспечения в ближайшее время создано не будет. Но расширение ассортимента инструментов для тестирования, определенно, играет на руку разработчикам.
Теперь остается только сформулировать свои требования, оценить все преимущества и недостатки подходящих решений и сделать выбор. Чтобы получить объективную возможность оценивания продуктов для тестирования, попробуйте инструменты из представленного списка. Такой подход поможет определить, какая платформа больше подходит для определенных задач, а также составить собственный топ. В итоге по мере появления на рынке новых инструментов для тестирования API вы сможете четко понимать, стоит ли использовать новинки или их возможности покрываются существующими решениями.
Как тестировать API, или Postman для чайников | GeekBrains
Изучаем основные возможности популярного инструмента интеграционного тестирования
https://d2xzmw6cctk25h. cloudfront.net/post/2120/og_image/c2397d8e936f16779909ec2b2438a6ab.png
Привет! Меня зовут Игорь Гросс, я руководитель проектов в Test IT — это такая система управления тестированием. В этом посте я расскажу об одном интересном инструменте тестировщика — Postman — а также о том, как с его помощью решать распространённый тип задач — тестирование API.
Что это вообще такое?
API — это Application Programming Interface, или программный интерфейс приложения, с помощью которого одна программа может взаимодействовать с другой. API позволяет слать информацию напрямую из одной программы в другую, минуя интерфейс взаимодействия с пользователем.
Как это работает? Представьте, что вы сидите в ресторане, выбираете блюдо в меню. Подходит официант, и вы делаете заказ. Официант передаёт ваш заказ на кухню, там происходит магия, и через некоторое время перед вами появляется готовое блюдо. API работает по такому же принципу — принимает ваш запрос, передаёт информацию системе, обрабатывает её и возвращает ответ.
Какие бывают? API может быть внутренним, частным — когда программные компоненты связаны между собой и используются внутри системы. А может быть открытым, публичным — в таком случае он позволяет внешним пользователям или другим программам получать информацию, которую можно интегрировать в свои приложения.
Чтобы программам общаться между собой, их API нужно построить по единому стандарту. Одним из них является REST — стандарт архитектуры взаимодействия приложений и сайтов, использующий протокол HTTP. Особенность REST в том, что сервер не запоминает состояние пользователя между запросами. Иными словами, идентификация пользователя (авторизационный токен) и все параметры выполнения операции передаются в каждом запросе. Этот подход настолько прост и удобен, что почти вытеснил все другие.
Как тестировать API?
Тестирование API проводят, основываясь на бизнес-логике программного продукта. Тестирование API относится к интеграционному тестированию, а значит в ходе него можно отловить ошибки взаимодействия между модулями системы или между системами. Для тестирования используют специальные инструменты, где можно отправить входные данные в запросе и проверить точность выходных данных. Одним из таких инструментов как раз и является Postman. Вот что он умеет:
- Составлять и отправлять запросы;
- Сохранять запросы в папки и коллекции;
- Параметризовать запросы;
- Добавлять к вызову API контрольные точки;
- Создавать разные окружения для одних и тех же запросов;
- Запускать коллекции с помощью Collection Runner и использовать их как автоматизированные тесты.
Чтобы рассказать, как использовать Postman, напишем несколько тестов на базе реального проекта, используя для этого API системы управления тестированием Test IT.
Работа с запросами и отправка запросов в Postman
У Postman есть графический интерфейс, что выгодно отличает его от ряда других инструментов тестирования. Чтобы создать запрос, нужно нажать на кнопку New и выбрать пункт Request.
Запросы Postman хранятся в коллекциях, поэтому нужно не только придумать название и описание запроса, но и создать коллекцию, где он будет храниться.
Создадим запрос на получение проектов. Назовём его соответственно: /api/v2/projects
По умолчанию открывается форма создания GET-запроса:
Для удобства мы указали на иллюстрации выше пункты, соответствующие порядку действий:
1. Выбираем тип запроса. Postman предлагает внушительный список, нам нужен GET.
2. Указываем URL запроса. Первая часть ссылки должна содержать адрес сервера, где развёрнута наша TMC. Мы используем публичное API Test IT, а при составлении запросов опираемся на Swagger-документацию. В нашем случае полная ссылка будет выглядеть так: https://testit.geekbrains.ru/api/v2/projects.
3. На вкладке параметров указываем ключи и значения запроса. Мы хотим получить только удалённые проекты, и API Test IT предоставляет нам такую возможность. Укажем в параметрах isDeleted=true.
4. Переходим на вкладку Authorization, указываем данные для идентификации пользователя. Postman поддерживает множество типов авторизации, параметры для каждого из них отличаются. Используем авторизацию по API Key, полученному из личного кабинета в Test IT.
Мы заполнили все необходимые данные. Теперь выполним запрос, нажав кнопку Send.
Видим, что запрос прошёл успешно: код 200, тело ответа, время ответа и сколько занимают полученные данные. Правда, в нашем случае тело ответа будет пустое, поскольку удалённых проектов у нас нет. Советуем в ключ isDeleted ставить значение true.
Отправляемый запрос или ответ мы можем сохранить с помощью меню справа:
Параметризация запросов, переменные окружения
У нас есть коллекция запросов, и мы хотим использовать их на разных окружениях. Допустим, выполнять их локально, на тестовом стенде и на проде. Посмотрим, что предлагает Postman, и как это работает.
В меню создания выбираем Environment
В ранее созданном запросе выделим в переменные два параметра — URL стенда, к которому мы обращаемся, и токен для авторизации. Назовём наше окружение Test Environment. Создаём две переменные url и token и укажем их значения. На скриншоте ниже их значения скрыты из соображений безопасности.
Сохраняем созданное окружение кнопкой Add. Мы всегда сможем вернуться и отредактировать окружение с помощью кнопки Manage Environments (шестерёнка в правом верхнем углу основного экрана).
Устанавливаем Test Environment в качестве текущего окружения: выбираем из выпадающего списка и вносим параметры в запрос. Переменные указываются в двух фигурных скобках. Postman подсказывает названия переменных окружения при вводе.
После того как мы использовали параметры из переменных окружения, повторим запрос, чтобы проверить, что нигде не ошиблись.
Запрос вновь прошёл успешно, значит, всё сделали правильно.
Теперь создадим другое окружение, с другими URL и token, и поменяем их с помощью переключения в выпадающем списке. Протестируем продукт на двух разных окружениях, используя одну коллекцию запросов.
Создание тестов в Postman
Мы познакомились с отправкой и параметризацией запросов, а когда же приступим к тестированию? Мы на пороге написания первого теста в Postman.
Уже в знакомом нам запросе находим вкладку Tests и переходим в неё.
Открывается окошко для написания кода на JavaScript. Postman предлагает множество готовых сниппетов, которые можно применить для тестирования API. Здесь можно валидировать коды и содержание ответов, парсить и сохранять значения в переменные окружения или глобальные переменные, проверять их соответствие заданным значениям и т.д. Подробнее о написании тестовых скриптов в Postman можно прочитать в документации или статье на Хабре.
Остановимся на создании простого тестового скрипта: проверим, что код ответа 200. Для этого используем готовый сниппет.
Postman автоматически добавил код на JS, который проверяет, что код ответа равен 200.
Помимо этого, напишем проверку. В списке, который мы получили в данном запросе, отсутствуют проекты с параметром isDeleted = false. Надо парсить ответ, в цикле проходить все объекты полученного массива и проверять, что isDeleted = true.
Вот какой код теста получился:
pm.test("All projects is deleted", function () { var jsonData = JSON.parse(responseBody); for (var i = 0; i < jsonData.length; i++) { pm.expect(jsonData[i].isDeleted).to.eql(false) } });
Мы написали в коде false, а не true, потому что у нас есть только созданные проекты, а удалённых нет. Если оставить true, тест будет провален. Если поменять значение на false — тест будет пройден. Отправим запрос и проверим, что тесты прошли. Результаты тестов и их названия отображаются на вкладке Test Results.
В тренировочном запросе два теста. Чтобы создать ещё один GET-запрос, данные для авторизации и проверку на код ответа 200 нужно продублировать. Чтобы сэкономить время, внесём эти данные на уровень всей коллекции.
Переходим в редактирование коллекции.
Видим уже знакомый интерфейс для настройки авторизации, переносим сюда данные из теста.
А на вкладку Tests перемещаем проверку, что код ответа равен 200.
В запросе убираем продублированную проверку, а на вкладке авторизации укажем «Inherit auth from parent». Сохраняем запрос и отправляем.
Запрос прошёл: с авторизацией всё в порядке, и у нас отображаются 2 теста, хотя один из них мы удалили. Мы вынесли авторизацию и один тест на уровень всей коллекции, и теперь авторизация и тест на код ответа 200 будут применяться ко всем тестам внутри этой коллекции.
Коллекции можно экспортировать, чтобы делиться ими с командой. Если вы авторизуетесь в Postman, то сможете хранить коллекцию в облаке и иметь доступ с разных устройств.
Запуск коллекций тестов в Postman
В Postman есть встроенный компонент Collection Runner, с его помощью можно запустить наполненную запросами и тестами коллекцию.
Нажимаем пиктограмму треугольника на коллекции. Открывается дополнительное окно, в котором выбираем Run. В открывшемся окне выбираем окружение, количество итераций в запуске и задержку между отправкой запросов. Также здесь стоит настроить логирование запросов, хранение переменных и cookies.
Укажем значение Iterations равным 10 и пройдём наши тесты.
Далее можно посмотреть на результаты тестов по каждому запросу, экспортировать результаты по кнопке Export Results либо пролистать их в кратком виде по кнопке Run Summary.
Заключение
Итак, мы познакомились с базовыми возможностями инструмента Postman:
- Составили и отправили запросы;
- Задали параметры в запросах;
- Создали и переключались между окружениями;
- Написали базовые тесты;
- Создали и отредактировала коллекции;
- Выполнили запуск тестов.
Это только малая часть полезных и интересных функций Postman, при помощи которых можно тестировать API. Понравилась статья — поделитесь с коллегами 😉
Если вы хотите освоить не только Postman, но также и другие инструменты ручного и автоматизированного тестирования ПО — приглашаем вас на факультет тестирования ПО GeekUniversity!
Руководство по проектированию API — Best practices for cloud applications
-
- Чтение занимает 25 мин
В этой статье
Большинство современных веб-приложений предоставляют API, которые клиенты могут использовать для взаимодействия с приложением.Most modern web applications expose APIs that clients can use to interact with the application. Качественно спроектированный API должен поддерживать следующее:A well-designed web API should aim to support:
Независимость от платформы .Platform independence . Любой клиент должен иметь возможность вызывать API, независимо от того, как API реализован внутренне.Any client should be able to call the API, regardless of how the API is implemented internally. Для этого требуется использование стандартных протоколов, а также наличие механизма, при котором клиент и веб-службы могут согласовать формат данных для обмена.This requires using standard protocols, and having a mechanism whereby the client and the web service can agree on the format of the data to exchange.
Развитие службы .Service evolution . Веб-API должен иметь возможность развиваться и расширять набор функций независимо от клиентских приложений.The web API should be able to evolve and add functionality independently from client applications. По мере развития API имеющиеся клиентские приложения должны продолжать работать без изменений.As the API evolves, existing client applications should continue to function without modification. Все функции должны быть доступными, чтобы клиентские приложения могли полноценно их использовать.All functionality should be discoverable so that client applications can fully use it.
В этом руководстве описываются проблемы, которые следует учитывать при разработке веб-API.This guidance describes issues that you should consider when designing a web API.
Общие сведения о RESTIntroduction to REST
В 2000 году Рой Филдинг предложил архитектурный подход к разработке веб-служб — передачу репрезентативного состояния (REST).In 2000, Roy Fielding proposed Representational State Transfer (REST) as an architectural approach to designing web services. REST — это архитектурная концепция создания распределенных систем на основе гиперсред.REST is an architectural style for building distributed systems based on hypermedia. Модель REST не зависит от каких-либо базовых протоколов и не требует привязки к HTTP.REST is independent of any underlying protocol and is not necessarily tied to HTTP. Однако наиболее распространенные реализации REST используют HTTP в качестве протокола приложения. Поэтому это руководство посвящено разработке REST API для HTTP.However, most common REST implementations use HTTP as the application protocol, and this guide focuses on designing REST APIs for HTTP.
Основное преимущество при использовании REST с протоколом HTTP заключается в применении открытых стандартов и отсутствии необходимости в определенной реализации API или клиентских приложений.A primary advantage of REST over HTTP is that it uses open standards, and does not bind the implementation of the API or the client applications to any specific implementation. Например, веб-службу REST можно написать в ASP.NET, а клиентские приложения могут использовать любой язык или набор инструментов, позволяющие создавать HTTP-запросы и анализировать HTTP-ответы.For example, a REST web service could be written in ASP.NET, and client applications can use any language or toolset that can generate HTTP requests and parse HTTP responses.
Ниже приведены некоторые основные принципы проектирования интерфейсов RESTful API, использующих протокол HTTP:Here are some of the main design principles of RESTful APIs using HTTP:
REST API разрабатываются на основе ресурса , который может быть любым типом объекта, данных или службы, к которому может получить доступ клиент.REST APIs are designed around resources , which are any kind of object, data, or service that can be accessed by the client.
У ресурса есть идентификатор (универсальный код ресурса (URI)), который уникально идентифицирует этот ресурс.A resource has an identifier , which is a URI that uniquely identifies that resource. Например, URI для определенного клиентского заказа может быть таким:For example, the URI for a particular customer order might be:
https://adventure-works.com/orders/1
Клиенты взаимодействуют со службой путем обмена представлениями ресурсов.Clients interact with a service by exchanging representations of resources. Многие веб-API используют JSON в качества формата для обмена.Many web APIs use JSON as the exchange format. Например, в результате запроса GET к приведенному выше URI может вернуться такой текст ответа:For example, a GET request to the URI listed above might return this response body:
{"orderId":1,"orderValue":99.90,"productId":1,"quantity":1}
Интерфейсы REST API используют единый интерфейс, который позволяет отделить реализации клиента и службы.REST APIs use a uniform interface, which helps to decouple the client and service implementations. Для REST API, созданных на основе протокола HTTP, единый интерфейс будет использовать стандартные HTTP-команды для выполнения операций с ресурсами.For REST APIs built on HTTP, the uniform interface includes using standard HTTP verbs to perform operations on resources. Наиболее часто выполняемые операции: GET, POST, PUT, PATCH и DELETE.The most common operations are GET, POST, PUT, PATCH, and DELETE.
REST API использует модель запросов без отслеживания состояния.REST APIs use a stateless request model. HTTP-запросы должны быть независимыми и могут создаваться в любом порядке, поэтому сохранение сведений о переходном состоянии между запросами не представляется возможным.HTTP requests should be independent and may occur in any order, so keeping transient state information between requests is not feasible. Сведения хранятся только в самих ресурсах, и каждый запрос должен быть атомарной операцией.The only place where information is stored is in the resources themselves, and each request should be an atomic operation. Благодаря этому ограничению веб-службы имеют высокую масштабируемость, так как нет необходимости сохранять сходство между клиентами и конкретными серверами.This constraint enables web services to be highly scalable, because there is no need to retain any affinity between clients and specific servers. Каждый сервер может обрабатывать любой запрос от любого клиента.Any server can handle any request from any client. Тем не менее, другие факторы могут ограничить масштабируемость.That said, other factors can limit scalability. Например, многие веб-службы записывают данные в серверное хранилище данных, что может быть трудно масштабировать. Дополнительные сведения о стратегиях масштабирования хранилища данных см. в разделе горизонтальное, вертикальное и функциональное секционирование данных.For example, many web services write to a backend data store, which may be hard to scale out. For more information about strategies to scale out a data store, see Horizontal, vertical, and functional data partitioning.
Интерфейсами REST API управляют ссылки на гиперсреды, которые содержатся в представлении.REST APIs are driven by hypermedia links that are contained in the representation. Например, ниже показано JSON-представление заказа.For example, the following shows a JSON representation of an order. Оно содержит ссылки для получения или обновления клиента, связанного с заказом.It contains links to get or update the customer associated with the order.
{ "orderID":3, "productID":2, "quantity":4, "orderValue":16.60, "links": [ {"rel":"product","href":"https://adventure-works.com/customers/3", "action":"GET" }, {"rel":"product","href":"https://adventure-works.com/customers/3", "action":"PUT" } ] }
В 2008 году Леонард Ричардсон предложил следующую модель зрелости для веб-API:In 2008, Leonard Richardson proposed the following maturity model for web APIs:
- Уровень 0. Определение одного URI, и все операции будут POST-запросами к этому URI.Level 0: Define one URI, and all operations are POST requests to this URI.
- Уровень 1. Создание отдельных URI для отдельных ресурсов.Level 1: Create separate URIs for individual resources.
- Уровень 2. Использование методов HTTP для определения операций с ресурсами.Level 2: Use HTTP methods to define operations on resources.
- Уровень 3. Использование гиперсред (HATEOAS, описан ниже).Level 3: Use hypermedia (HATEOAS, described below).
Уровень 3 соответствует настоящему RESTful API, согласно определению Филдинга.Level 3 corresponds to a truly RESTful API according to Fielding’s definition. На практике многие опубликованные веб-API находятся где-то около уровня 2.In practice, many published web APIs fall somewhere around level 2.
Упорядочивание API вокруг ресурсовOrganize the API around resources
Сосредоточьтесь на бизнес-сущностях, предоставляемых веб-API.Focus on the business entities that the web API exposes. Например, в системе электронной коммерции основными сущностями могут быть клиенты и заказы.For example, in an e-commerce system, the primary entities might be customers and orders. Создание заказа может осуществляться путем отправки HTTP-запроса POST, содержащего сведения о заказе.Creating an order can be achieved by sending an HTTP POST request that contains the order information. HTTP-ответ указывает на успешность размещения заказа.The HTTP response indicates whether the order was placed successfully or not. Когда это возможно, универсальные коды ресурсов должны основываться на существительных (ресурсе), а не на глаголах (операциях c ресурсом).When possible, resource URIs should be based on nouns (the resource) and not verbs (the operations on the resource).
https://adventure-works.com/orders // Good
https://adventure-works.com/create-order // Avoid
Ресурс не должен основываться на одном физическом элементе данных.A resource doesn’t have to be based on a single physical data item. Например, ресурс заказа может быть реализован внутри системы с использованием нескольких таблиц в реляционной базе данных, однако представлен в клиентском приложении как единая сущность.For example, an order resource might be implemented internally as several tables in a relational database, but presented to the client as a single entity. Избегайте создания API, которые просто отражают внутреннюю структуру базы данных.Avoid creating APIs that simply mirror the internal structure of a database. Цель REST — моделировать сущности и операции, которые приложение может выполнять в этих сущностях.The purpose of REST is to model entities and the operations that an application can perform on those entities. Внутренняя реализация должна быть скрыта от клиента.A client should not be exposed to the internal implementation.
Сущности часто группируются в коллекции (заказов, клиентов).Entities are often grouped together into collections (orders, customers). Коллекция — это отдельный ресурс из элемента в коллекции и должен иметь свой собственный URI.A collection is a separate resource from the item within the collection, and should have its own URI. Например, следующий URI может представлять коллекцию заказов:For example, the following URI might represent the collection of orders:
https://adventure-works.com/orders
В результате отправки HTTP-запроса GET на URI коллекции возвращается список элементов в коллекции.Sending an HTTP GET request to the collection URI retrieves a list of items in the collection. Каждый элемент в коллекции также имеет свой собственный универсальный код ресурса (URI).Each item in the collection also has its own unique URI. HTTP-запрос GET к URI элемента возвращает подробные сведения об этом элементе.An HTTP GET request to the item’s URI returns the details of that item.
Используйте единое соглашение об именовании в универсальных кодах ресурсов.Adopt a consistent naming convention in URIs. В целом это помогает использовать существительные во множественном числе для URI, ссылающихся на коллекции.In general, it helps to use plural nouns for URIs that reference collections. Рекомендуется упорядочивать универсальные коды ресурсов для коллекций и элементов в иерархии.It’s a good practice to organize URIs for collections and items into a hierarchy. Например, /customers
— это путь к коллекции клиентов, а /customers/5
— путь к клиенту с идентификатором равным 5.For example, /customers
is the path to the customers collection, and /customers/5
is the path to the customer with ID equal to 5. Этот подход позволяет обеспечивать простоту веб-API.This approach helps to keep the web API intuitive. Кроме того, множество платформ веб-API могут направлять запросы на основании параметризованных путей URI, поэтому можно определить маршрут для пути /customers/{id}
.Also, many web API frameworks can route requests based on parameterized URI paths, so you could define a route for the path /customers/{id}
.
Также следует продумать связи между разными типами ресурсов и способы предоставления этих связей.Also consider the relationships between different types of resources and how you might expose these associations. Например, /customers/5/orders
может представлять все заказы для клиента 5.For example, the /customers/5/orders
might represent all of the orders for customer 5. Вы также можете пойти в другом направлении и представить связь между заказом и конкретным клиентом посредством универсального кода ресурса, например /orders/99/customer
.You could also go in the other direction, and represent the association from an order back to a customer with a URI such as /orders/99/customer
. Однако чрезмерное расширение этой модели может вызвать трудности.However, extending this model too far can become cumbersome to implement. Более рациональное решение — предоставить ссылки с возможностью перехода на связанные ресурсы в тексте HTTP-ответа.A better solution is to provide navigable links to associated resources in the body of the HTTP response message. Этот механизм более подробно описан в разделе Использование HATEOAS для включения навигации к связанным ресурсам.This mechanism is described in more detail in the section Use HATEOAS to enable navigation to related resources.
В более сложных системах очевидным решением может показаться предоставление URI, позволяющих клиенту переходить между несколькими уровнями связей, например /customers/1/orders/99/products
.In more complex systems, it can be tempting to provide URIs that enable a client to navigate through several levels of relationships, such as /customers/1/orders/99/products
. Однако такой уровень сложности трудно обслуживать и адаптировать в случае дальнейшего изменения связей между ресурсами.However, this level of complexity can be difficult to maintain and is inflexible if the relationships between resources change in the future. Вместо этого постарайтесь сделать URI максимально простыми.Instead, try to keep URIs relatively simple. Как только у приложения появляется ссылка на ресурс, оно может использовать эту ссылку для поиска элементов, связанных с указанным ресурсом.Once an application has a reference to a resource, it should be possible to use this reference to find items related to that resource. Предыдущий запрос можно заменить на URI /customers/1/orders
, чтобы найти все заказы для клиента 1, а затем — на /orders/99/products
, чтобы найти продукты в этом заказе.The preceding query can be replaced with the URI /customers/1/orders
to find all the orders for customer 1, and then /orders/99/products
to find the products in this order.
Совет
Старайтесь использовать универсальные коды ресурсов не сложнее collection/item/collection .Avoid requiring resource URIs more complex than collection/item/collection .
Кроме того, следует учесть, что все веб-запросы увеличивают нагрузку на веб-сервер,Another factor is that all web requests impose a load on the web server. которая растет вместе с числом запросов.The more requests, the bigger the load. Поэтому старайтесь избегать создания веб-API с множественными операциями ввода-вывода, которые предоставляют большое количество небольших ресурсов.Therefore, try to avoid «chatty» web APIs that expose a large number of small resources. Такой API может потребовать от клиентского приложения отправки нескольких запросов для поиска всех необходимых данных.Such an API may require a client application to send multiple requests to find all of the data that it requires. Вместо этого можно выполнить денормализацию данных и объединить соответствующую информацию в более крупные ресурсы, которые можно получить с помощью одного запроса.Instead, you might want to denormalize the data and combine related information into bigger resources that can be retrieved with a single request. Однако следует сохранять равновесие в этом подходе, чтобы избежать получения чрезмерного объема данных, которые не нужны клиенту.However, you need to balance this approach against the overhead of fetching data that the client doesn’t need. Получение больших объектов может увеличить задержку запроса и привести к дополнительным расходам на пропускную способность.Retrieving large objects can increase the latency of a request and incur additional bandwidth costs. Дополнительные сведения об этих антишаблонах производительности см. в статье Антишаблон отправки множественных операций ввода-вывода и Антишаблон лишней выборки.For more information about these performance antipatterns, see Chatty I/O and Extraneous Fetching.
Избегайте зависимостей между веб-API и базовыми источниками данных.Avoid introducing dependencies between the web API and the underlying data sources. Например, если данные хранятся в реляционной базе данных, веб-API не требуется предоставлять каждую таблицу в виде коллекции ресурсов.For example, if your data is stored in a relational database, the web API doesn’t need to expose each table as a collection of resources. Это, вероятно, будет неэффективная архитектура.In fact, that’s probably a poor design. Вместо этого представьте веб-API в виде абстракции базы данных.Instead, think of the web API as an abstraction of the database. При необходимости создайте уровень сопоставления между базой данных и веб-API.If necessary, introduce a mapping layer between the database and the web API. Таким образом клиентские приложения изолированы от изменений в базовой схеме базы данных.That way, client applications are isolated from changes to the underlying database scheme.
Наконец, сопоставление каждой операции, реализованной веб-API, с конкретным источником не всегда возможно.Finally, it might not be possible to map every operation implemented by a web API to a specific resource. Такие безресурсные сценарии можно обрабатывать с помощью HTTP-запросов, вызывающих определенную функцию и возвращающих результаты в виде ответного HTTP-сообщения.You can handle such non-resource scenarios through HTTP requests that invoke a function and return the results as an HTTP response message. Например, веб-API, реализующий простые расчетные операции, такие как добавление и вычитание, может предоставить универсальные коды ресурсов (URI), представляющие эти операции в виде псевдоресурсов, и использовать строку запроса для указания требуемых параметров.For example, a web API that implements simple calculator operations such as add and subtract could provide URIs that expose these operations as pseudo resources and use the query string to specify the parameters required. Например, запрос GET к URI /Add? операнд1 = 99&операнд2 = 1 возвратит ответное сообщение с текстом, содержащим значение 100.For example, a GET request to the URI /add?operand1=99&operand2=1 would return a response message with the body containing the value 100. Однако следует использовать эти формы универсальных кодов ресурсов (URI) с осторожностью.However, only use these forms of URIs sparingly.
Определение операций с точки зрения методов HTTPDefine operations in terms of HTTP methods
Протокол HTTP определяет несколько методов, назначающих запросу семантическое значение.The HTTP protocol defines a number of methods that assign semantic meaning to a request. Ниже приведены наиболее распространенные методы HTTP, используемые большинством веб-API RESTful:The common HTTP methods used by most RESTful web APIs are:
- GET . Возвращает представление ресурса по указанному универсальному коду ресурса (URI).GET retrieves a representation of the resource at the specified URI. Текст ответного сообщения содержит сведения о запрашиваемом ресурсе.The body of the response message contains the details of the requested resource.
- POST. Создает новый ресурс по указанному URI.POST creates a new resource at the specified URI. Текст запроса содержит сведения о новом ресурсе.The body of the request message provides the details of the new resource. Обратите внимание, что метод POST также можно использовать для запуска операций, не относящихся непосредственно к созданию ресурсов.Note that POST can also be used to trigger operations that don’t actually create resources.
- PUT . Создает или заменяет ресурсы по указанному URI.PUT either creates or replaces the resource at the specified URI. В тексте сообщения запроса указан создаваемый или обновляемый ресурс.The body of the request message specifies the resource to be created or updated.
- PATCH . Выполняет частичное обновление ресурса.PATCH performs a partial update of a resource. Текст запроса определяет набор изменений, применяемых к ресурсу.The request body specifies the set of changes to apply to the resource.
- DELETE. Удаляет ресурс по указанному URI.DELETE removes the resource at the specified URI.
Результат конкретного запроса должен зависеть от того, является ли целевой ресурс коллекцией или отдельным элементом.The effect of a specific request should depend on whether the resource is a collection or an individual item. В следующей таблице приведены общие соглашения, принятые большинством реализаций RESTFUL с помощью примера электронной коммерции.The following table summarizes the common conventions adopted by most RESTful implementations using the e-commerce example. Не все эти запросы могут быть реализованы — , они зависят от конкретного сценария.Not all of these requests might be implemented—it depends on the specific scenario.
РесурсResource | POSTPOST | GETGET | ОТПРАВКАPUT | DELETEDELETE |
---|---|---|---|---|
/customers/customers | Создание нового клиентаCreate a new customer | Получение всех клиентовRetrieve all customers | Массовое обновление клиентовBulk update of customers | Удаление всех клиентовRemove all customers |
/customers/1/customers/1 | ОшибкаError | Получение сведений для клиента 1Retrieve the details for customer 1 | Обновление сведения о клиенте 1, если он существуетUpdate the details of customer 1 if it exists | Удаление клиента 1Remove customer 1 |
/customers/1/orders/customers/1/orders | Создание нового заказа для клиента 1Create a new order for customer 1 | Получение всех заказов для клиента 1Retrieve all orders for customer 1 | Массовое обновление заказов для клиента 1Bulk update of orders for customer 1 | Удаление всех заказов для клиента 1Remove all orders for customer 1 |
Различия между POST, PUT и PATCH могут запутать новичков.The differences between POST, PUT, and PATCH can be confusing.
Запрос POST создает ресурс.A POST request creates a resource. Сервер назначает URI для нового ресурса и возвращает этот URI клиенту.The server assigns a URI for the new resource, and returns that URI to the client. В модели REST запросы POST постоянно применяются к коллекциям.In the REST model, you frequently apply POST requests to collections. При этом новый ресурс добавляется в коллекцию.The new resource is added to the collection. Запрос POST также может использоваться для отправки данных для обработки в имеющийся ресурс без создания нового ресурса.A POST request can also be used to submit data for processing to an existing resource, without any new resource being created.
Запрос PUT создает ресурс или обновляет имеющийся ресурс.A PUT request creates a resource or updates an existing resource. Клиент указывает универсальный код ресурса.The client specifies the URI for the resource. Текст запроса содержит полное представление ресурса.The request body contains a complete representation of the resource. Если ресурс с таким URI уже существует, он заменяется.If a resource with this URI already exists, it is replaced. В противном случае создается новый ресурс, если сервер поддерживает это.Otherwise a new resource is created, if the server supports doing so. Запросы PUT чаще всего применяются к ресурсам, которые являются отдельными элементами, например конкретные клиенты, а не к коллекциям.PUT requests are most frequently applied to resources that are individual items, such as a specific customer, rather than collections. Сервер может поддерживать обновления, но не создание через PUT.A server might support updates but not creation via PUT. Требуется ли поддерживать создание через PUT зависит от того, может ли клиент назначать информативный URI ресурсу до его существования.Whether to support creation via PUT depends on whether the client can meaningfully assign a URI to a resource before it exists. Если нет, используйте POST для создания ресурсов, а PUT или PATCH для обновления.If not, then use POST to create resources and PUT or PATCH to update.
Запрос PATCH выполняет частичное обновление имеющегося ресурса.A PATCH request performs a partial update to an existing resource. Клиент указывает универсальный код ресурса.The client specifies the URI for the resource. Текст запроса определяет набор изменений , применяемых к ресурсу.The request body specifies a set of changes to apply to the resource. Это может быть более эффективно, чем использование PUT, так как клиент отправляет только изменения, а не все представление ресурса.This can be more efficient than using PUT, because the client only sends the changes, not the entire representation of the resource. С технической точки зрения PATCH также может создать новый ресурс (указав набор обновлений для ресурса «null»), если это поддерживается сервером.Technically PATCH can also create a new resource (by specifying a set of updates to a «null» resource), if the server supports this.
Запросы PUT должны быть идемпотентными.PUT requests must be idempotent. Если клиент отправляет тот же запрос PUT несколько раз, результаты всегда должны быть одинаковыми (тот же ресурс будет изменяться с теми же значениями).If a client submits the same PUT request multiple times, the results should always be the same (the same resource will be modified with the same values). Запросы POST и PATCH не будут гарантированно идемпотентными.POST and PATCH requests are not guaranteed to be idempotent.
Соответствие семантике HTTPConform to HTTP semantics
В этом разделе описываются некоторые распространенные вопросы по проектированию API, соответствующего спецификации HTTP.This section describes some typical considerations for designing an API that conforms to the HTTP specification. Однако он не охватывает все возможные детали или сценарии.However, it doesn’t cover every possible detail or scenario. Если вы сомневаетесь, обратитесь к спецификациям HTTP.When in doubt, consult the HTTP specifications.
Типы мультимедиаMedia types
Как упоминалось ранее, клиенты и серверы обмениваются представлениями ресурсов.As mentioned earlier, clients and servers exchange representations of resources. Например, в тексте запроса POST содержится представление создаваемого ресурса.For example, in a POST request, the request body contains a representation of the resource to create. В тексте запроса GET содержится представление получаемого ресурса.In a GET request, the response body contains a representation of the fetched resource.
В протоколе HTTP форматы задаются с помощью типов мультимедиа , также называемых типами MIME.In the HTTP protocol, formats are specified through the use of media types , also called MIME types. Для недвоичных данных большинство веб-API поддерживают формат JSON (тип мультимедиа — application/json) и возможно XML (тип мультимедиа — application/xml).For non-binary data, most web APIs support JSON (media type = application/json) and possibly XML (media type = application/xml).
Заголовок Content-Type в запросе или ответе определяет формат представления.The Content-Type header in a request or response specifies the format of the representation. Ниже приведен пример запроса POST, который включает в себя данные JSON:Here is an example of a POST request that includes JSON data:
POST https://adventure-works.com/orders HTTP/1.1
Content-Type: application/json; charset=utf-8
Content-Length: 57
{"Id":1,"Name":"Gizmo","Category":"Widgets","Price":1.99}
Если сервер не поддерживает данный тип мультимедиа, он возвращает код состояния HTTP 415 (неподдерживаемый тип носителя).If the server doesn’t support the media type, it should return HTTP status code 415 (Unsupported Media Type).
Запрос клиента может включать заголовок Accept, содержащий список типов мультимедиа, которые клиент будет принимать от сервера в ответном сообщении.A client request can include an Accept header that contains a list of media types the client will accept from the server in the response message. Пример:For example:
GET https://adventure-works.com/orders/2 HTTP/1.1
Accept: application/json
Если сервер не может соответствовать ни одному из указанных типов мультимедиа, он должен вернуть код состояния HTTP 406 (неприемлемо).If the server cannot match any of the media type(s) listed, it should return HTTP status code 406 (Not Acceptable).
Методы GETGET methods
Успешное выполнение метода GET обычно возвращает код состояния HTTP 200 (ОК).A successful GET method typically returns HTTP status code 200 (OK). Если ресурс не найден, метод должен вернуть код 404 (не найдено).If the resource cannot be found, the method should return 404 (Not Found).
Методы POSTPOST methods
Если метод POST создает новый ресурс, он возвращает код состояния HTTP 201 (создано).If a POST method creates a new resource, it returns HTTP status code 201 (Created). URI нового ресурса содержится в заголовке Location ответа.The URI of the new resource is included in the Location header of the response. Текст ответа содержит представление ресурса.The response body contains a representation of the resource.
Если метод выполняет определенную обработку, но не создает новый ресурс, он может вернуть код состояния HTTP 200 и содержать результат операции в тексте ответа.If the method does some processing but does not create a new resource, the method can return HTTP status code 200 and include the result of the operation in the response body. Кроме того, при отсутствии результатов для возврата метод может вернуть код состояния HTTP 204 (нет содержимого) без текста ответа.Alternatively, if there is no result to return, the method can return HTTP status code 204 (No Content) with no response body.
Если клиент помещает недопустимые данные в запрос, сервер должен вернуть код состояния HTTP 400 (неверный запрос).If the client puts invalid data into the request, the server should return HTTP status code 400 (Bad Request). Текст ответа может содержать дополнительные сведения об ошибке или ссылку на универсальный код ресурса (URI), по которому можно получить более подробную информацию.The response body can contain additional information about the error or a link to a URI that provides more details.
Методы PUTPUT methods
Если метод PUT создает новый ресурс, он возвращает код состояния HTTP 201 (создано), как и метод POST.If a PUT method creates a new resource, it returns HTTP status code 201 (Created), as with a POST method. Если метод обновляет имеющийся ресурс, он возвращает коды состояния 200 (ОК) или 204 (нет содержимого).If the method updates an existing resource, it returns either 200 (OK) or 204 (No Content). В некоторых случаях обновить имеющийся ресурс невозможно.In some cases, it might not be possible to update an existing resource. В этом случае рассмотрите возможность возврата кода состояния HTTP 409 (конфликт).In that case, consider returning HTTP status code 409 (Conflict).
Рассмотрите возможность реализации массовых HTTP-операций PUT, поддерживающих пакетные обновления нескольких ресурсов в коллекции.Consider implementing bulk HTTP PUT operations that can batch updates to multiple resources in a collection. В запросе PUT должен быть указан универсальный код ресурса (URI) коллекции, а текст запроса должен содержать сведения о ресурсах, которые требуется изменить.The PUT request should specify the URI of the collection, and the request body should specify the details of the resources to be modified. Такой подход помогает сократить избыточность и повысить производительность.This approach can help to reduce chattiness and improve performance.
Методы PATCHPATCH methods
С помощью запроса PATCH клиент отправляет набор обновлений в имеющийся ресурс в виде документа с исправлениями .With a PATCH request, the client sends a set of updates to an existing resource, in the form of a patch document . Сервер обрабатывает документ с исправлениями, чтобы выполнить обновление.The server processes the patch document to perform the update. Документ с исправлениями не описывает весь ресурс, а только набор применяемых изменений.The patch document doesn’t describe the whole resource, only a set of changes to apply. Спецификация метода PATCH (RFC 5789) не определяет конкретный формат документов с исправлениями.The specification for the PATCH method (RFC 5789) doesn’t define a particular format for patch documents. Формат необходимо определить на основе типа мультимедиа в запросе.The format must be inferred from the media type in the request.
Вероятно, наиболее распространенный формат данных для веб-API — JSON.JSON is probably the most common data format for web APIs. Есть два основных формата исправлений на основе JSON, называемые исправлением JSON и исправлением со слиянием JSON .There are two main JSON-based patch formats, called JSON patch and JSON merge patch .
Исправление со слиянием JSON несколько проще.JSON merge patch is somewhat simpler. Документ с исправлениями имеет ту же структуру, что и исходный ресурс JSON, однако включает только подмножество полей, которые необходимо изменить или добавить.The patch document has the same structure as the original JSON resource, but includes just the subset of fields that should be changed or added. Кроме того, поле можно удалить, указав null
для значения поля в документе с исправлениями.In addition, a field can be deleted by specifying null
for the field value in the patch document. (Это означает, что исправление со слиянием не подходит, если исходный ресурс может иметь явные значения null.)(That means merge patch is not suitable if the original resource can have explicit null values.)
Предположим, что исходный ресурс имеет следующее представление JSON:For example, suppose the original resource has the following JSON representation:
{
"name":"gizmo",
"category":"widgets",
"color":"blue",
"price":10
}
Вот возможное исправление со слиянием JSON для этого ресурса:Here is a possible JSON merge patch for this resource:
{
"price":12,
"color":null,
"size":"small"
}
Это означает, что сервер должен обновляться, price
удаляться color
и добавляться size
, пока name
и category
не изменяются.This tells the server to update price
, delete color
, and add size
, while name
and category
are not modified. Точные сведения об исправлении со слиянием JSON см. в документе RFC 7396.For the exact details of JSON merge patch, see RFC 7396. Тип носителя для исправления со слиянием JSON — application/merge-patch+json
.The media type for JSON merge patch is application/merge-patch+json
.
Исправление со слиянием не подходит, если исходный ресурс может содержать явные значения null, из-за смысла значения null
в документе с исправлениями.Merge patch is not suitable if the original resource can contain explicit null values, due to the special meaning of null
in the patch document. Кроме того, в документе с исправлениями не указывается порядок, в котором сервер должен применять обновления.Also, the patch document doesn’t specify the order that the server should apply the updates. Это может иметь значение, в зависимости от данных и предметной области.That may or may not matter, depending on the data and the domain. Исправление JSON, определенное в RFC 6902, — более гибкое.JSON patch, defined in RFC 6902, is more flexible. Оно определяет изменения как последовательность выполняемых операций,It specifies the changes as a sequence of operations to apply. в частности добавление, удаление, замена, копирование и тестирование (для проверки значений).Operations include add, remove, replace, copy, and test (to validate values). Тип носителя для исправления JSON — application/json-patch+json
.The media type for JSON patch is application/json-patch+json
.
Ниже приведены некоторые типичные ошибки, которые могут возникнуть при обработке запроса PATCH, вместе с соответствующим кодом состояния HTTP.Here are some typical error conditions that might be encountered when processing a PATCH request, along with the appropriate HTTP status code.
Условие ошибкиError condition | Код состояния HTTPHTTP status code |
---|---|
Формат документа с исправлениями не поддерживается.The patch document format isn’t supported. | 415 (неподдерживаемый тип носителя)415 (Unsupported Media Type) |
Неправильный формат документа с исправлениями.Malformed patch document. | 400 (недопустимый запрос)400 (Bad Request) |
Документ с исправлениями действителен, но изменения нельзя применить к ресурсу в его текущем состоянии.The patch document is valid, but the changes can’t be applied to the resource in its current state. | 409 (конфликт)409 (Conflict) |
Методы DELETEDELETE methods
Если операция удаления прошла успешно, веб-сервер должен вернуть ответ с кодом состояния HTTP 204, указывающим на успешное завершение процесса и отсутствие дополнительных сведений в тексте ответа.If the delete operation is successful, the web server should respond with HTTP status code 204, indicating that the process has been successfully handled, but that the response body contains no further information. Если ресурс не существует, веб-сервер может вернуть код HTTP 404 (не найдено).If the resource doesn’t exist, the web server can return HTTP 404 (Not Found).
Асинхронные операцииAsynchronous operations
Иногда для завершения операции POST, помещения, исправления или удаления может потребоваться обработка, которая занимает некоторое время.Sometimes a POST, PUT, PATCH, or DELETE operation might require processing that takes a while to complete. Если дожидаться завершения до отправки ответа клиенту, это может привести к неприемлемой задержке.If you wait for completion before sending a response to the client, it may cause unacceptable latency. В этом случае рассмотрите возможность создания асинхронной операции.If so, consider making the operation asynchronous. Верните код состояния HTTP 202, указывающий, что запрос был принят в обработку, но не завершен.Return HTTP status code 202 (Accepted) to indicate the request was accepted for processing but is not completed.
Следует предоставить конечную точку, которая возвращает состояние асинхронного запроса, чтобы клиент мог отслеживать состояние, опрашивая конечную точку состояния.You should expose an endpoint that returns the status of an asynchronous request, so the client can monitor the status by polling the status endpoint. Включите URI конечной точки состояния в заголовок Location ответа 202.Include the URI of the status endpoint in the Location header of the 202 response. Пример:For example:
HTTP/1.1 202 Accepted
Location: /api/status/12345
Если клиент отправляет запрос GET к этой конечной точке, ответ должен содержать текущее состояние запроса.If the client sends a GET request to this endpoint, the response should contain the current status of the request. Кроме того, он также может включать предполагаемое время выполнения или ссылку для отмены операции.Optionally, it could also include an estimated time to completion or a link to cancel the operation.
HTTP/1.1 200 OK
Content-Type: application/json
{
"status":"In progress",
"link": { "rel":"cancel", "method":"delete", "href":"/api/status/12345" }
}
Если асинхронная операция создает новый ресурс, конечная точка состояния должна вернуть код состояния 303 (см. другие) после завершения операции.If the asynchronous operation creates a new resource, the status endpoint should return status code 303 (See Other) after the operation completes. В ответе 303 включите заголовок Location, который предоставляет URI нового ресурса:In the 303 response, include a Location header that gives the URI of the new resource:
HTTP/1.1 303 See Other
Location: /api/orders/12345
Дополнительные сведения см. в разделе шаблон асинхронного Request-Reply.For more information, see Asynchronous Request-Reply pattern.
Фильтрация и разбитие данных на страницыFilter and paginate data
Предоставление коллекции ресурсов через один универсальный код ресурса (URI) может привести к тому, что приложения будут получать крупные объемы данных, когда нужно лишь подмножество информации.Exposing a collection of resources through a single URI can lead to applications fetching large amounts of data when only a subset of the information is required. Предположим, клиентскому приложению необходимо найти все заказы с суммой выше заданного значения.For example, suppose a client application needs to find all orders with a cost over a specific value. Он может получить все заказы через универсальный код ресурса (URI) /orders , а затем отфильтровать эти заказы на стороне клиента.It might retrieve all orders from the /orders URI and then filter these orders on the client side. Очевидно, что этот процесс крайне неэффективен.Clearly this process is highly inefficient. Он впустую использует пропускную способность сети и вычислительные ресурсы сервера, на котором размещен веб-API.It wastes network bandwidth and processing power on the server hosting the web API.
Вместо этого API может разрешить передачу фильтра в строке запроса URI, например /orders?minCost=n .Instead, the API can allow passing a filter in the query string of the URI, such as /orders?minCost=n . Веб-API отвечает за синтаксический анализ и обработку параметра minCost
в строке запроса и возврат отфильтрованных результатов на стороне сервера.The web API is then responsible for parsing and handling the minCost
parameter in the query string and returning the filtered results on the server side.
Запросы GET по ресурсам коллекций потенциально могут возвращать большое число элементов.GET requests over collection resources can potentially return a large number of items. При проектировании веб-API следует ввести ограничение на объем данных, возвращаемый одним запросом.You should design a web API to limit the amount of data returned by any single request. Рассмотрите возможность использования строк запроса, определяющих максимальное количество элементов для получения и начальное смещение в коллекции.Consider supporting query strings that specify the maximum number of items to retrieve and a starting offset into the collection. Пример:For example:
/orders?limit=25&offset=50
Также рассмотрите возможность наложения верхнего предела на количество возвращаемых элементов, чтобы предотвратить атаки типа «отказ в обслуживании».Also consider imposing an upper limit on the number of items returned, to help prevent Denial of Service attacks. Для поддержки клиентских приложений запросы GET, возвращающие разбитые по страницам данные, должны также включать какие-либо метаданные, указывающие общее число ресурсов, доступных в коллекции.To assist client applications, GET requests that return paginated data should also include some form of metadata that indicate the total number of resources available in the collection.
Аналогичную стратегию для сортировки данных можно также применить при их получении. Вы можете указать параметр сортировки, использующий имя поля в качестве значения, например /orders?sort=ProductID .You can use a similar strategy to sort data as it is fetched, by providing a sort parameter that takes a field name as the value, such as /orders?sort=ProductID . Однако такой подход может негативно отразиться на кэшировании (так как параметры строки запроса составляют часть идентификатора ресурса, используемого многими реализациями кэша в качестве ключа к кэшированным данным).However, this approach can have a negative effect on caching, because query string parameters form part of the resource identifier used by many cache implementations as the key to cached data.
Вы можете расширить этот подход и ограничить возвращаемые поля для каждого элемента, если каждый элемент содержит большой объем данных.You can extend this approach to limit the fields returned for each item, if each item contains a large amount of data. Например, используйте параметр строки запроса, принимающий разделенный запятыми список полей, например /orders?fields=ProductID,Quantity .For example, you could use a query string parameter that accepts a comma-delimited list of fields, such as /orders?fields=ProductID,Quantity .
Присвойте содержательные значения по умолчанию всем необязательным параметрам в строках запроса.Give all optional parameters in query strings meaningful defaults. Например, установите параметру limit
значение 10, а параметру offset
— 0, если вы реализуете разбиение по страницам, параметру сортировки в качестве значения задайте ключ ресурса, если вы реализуете упорядочение, а в параметре fields
укажите все поля в ресурсе при поддержке проекций.For example, set the limit
parameter to 10 and the offset
parameter to 0 if you implement pagination, set the sort parameter to the key of the resource if you implement ordering, and set the fields
parameter to all fields in the resource if you support projections.
Поддержка частичных ответов для больших двоичных ресурсовSupport partial responses for large binary resources
Ресурс может содержать большие двоичные поля, такие как файлы или изображения.A resource may contain large binary fields, such as files or images. Чтобы преодолеть проблемы, вызванные ненадежными и прерывистыми соединениями, а также улучшить время отклика, можно реализовать получение таких ресурсов пофрагментно.To overcome problems caused by unreliable and intermittent connections and to improve response times, consider enabling such resources to be retrieved in chunks. Для этого веб-API должен поддерживать заголовок Accept-Ranges для запросов GET по большим ресурсам.To do this, the web API should support the Accept-Ranges header for GET requests for large resources. Этот заголовок указывает, что операция GET поддерживает частичные запросы.This header indicates that the GET operation supports partial requests. Клиентское приложение может отправлять запросы GET, которые возвращают подмножество ресурса, указанное в виде диапазона байтов.The client application can submit GET requests that return a subset of a resource, specified as a range of bytes.
Кроме того, рассмотрите возможность применения HTTP-запросов HEAD для этих ресурсов.Also, consider implementing HTTP HEAD requests for these resources. Запрос HEAD аналогичен запросу GET с тем исключением, что он возвращает только заголовок HTTP, описывающий ресурс, и пустое сообщение.A HEAD request is similar to a GET request, except that it only returns the HTTP headers that describe the resource, with an empty message body. Клиентское приложение может отправить запрос HEAD, чтобы определить необходимость получения ресурса с помощью частичных запросов GET.A client application can issue a HEAD request to determine whether to fetch a resource by using partial GET requests. Пример:For example:
HEAD https://adventure-works.com/products/10?fields=productImage HTTP/1.1
Вот пример сообщения ответа:Here is an example response message:
HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: image/jpeg
Content-Length: 4580
Заголовок Content-Length содержит общий размер ресурса, а заголовок Accept-Ranges указывает, что соответствующая операция GET поддерживает частичные результаты.The Content-Length header gives the total size of the resource, and the Accept-Ranges header indicates that the corresponding GET operation supports partial results. Клиентское приложение может использовать эту информацию для получения изображения небольшими фрагментами.The client application can use this information to retrieve the image in smaller chunks. Первый запрос возвращает первые 2500 байт с помощью заголовка «Range»:The first request fetches the first 2500 bytes by using the Range header:
GET https://adventure-works.com/products/10?fields=productImage HTTP/1.1
Range: bytes=0-2499
Ответное сообщение указывает, что это частичный ответ, возвращая код состояния HTTP 206.The response message indicates that this is a partial response by returning HTTP status code 206. Заголовок «Content-Length» указывает фактическое число возвращаемых байтов в тексте сообщения (не размер ресурса), а заголовок «Content-Range» указывает, какая это часть ресурса (байты 0–2499 из 4580):The Content-Length header specifies the actual number of bytes returned in the message body (not the size of the resource), and the Content-Range header indicates which part of the resource this is (bytes 0-2499 out of 4580):
HTTP/1.1 206 Partial Content
Accept-Ranges: bytes
Content-Type: image/jpeg
Content-Length: 2500
Content-Range: bytes 0-2499/4580
[...]
Последующий запрос от клиентского приложения может получить оставшуюся часть ресурса.A subsequent request from the client application can retrieve the remainder of the resource.
Одна из основных целей реализации модели REST — получение возможности перемещаться внутри всего набора ресурсов без предварительного знания схемы универсальных кодов ресурсов (URI).One of the primary motivations behind REST is that it should be possible to navigate the entire set of resources without requiring prior knowledge of the URI scheme. Каждый HTTP-запрос GET должен возвращать сведения, необходимые для поиска ресурсов, напрямую связанных с запрашиваемым объектом, посредством гиперссылок, включенных в ответ. Запросу GET также необходимо предоставить сведения, описывающие операции, доступные в каждом из этих ресурсов.Each HTTP GET request should return the information necessary to find the resources related directly to the requested object through hyperlinks included in the response, and it should also be provided with information that describes the operations available on each of these resources. Этот принцип называется HATEOAS (гипертекст как обработчик состояния приложения).This principle is known as HATEOAS, or Hypertext as the Engine of Application State. Система фактически представляет собой конечный автомат. Ответ по каждому запросу содержит сведения, необходимые для перемещения между состо
Как работать с API сайта без знаний программирования: инструкция по работе для SEO-шников
Партнерский материал
Руководитель отдела внешнего контент-маркетинга Serpstat
Собирать семантическое ядро в десятки раз быстрее, чем конкуренты. Парсить весь ТОП выдачи по фразе за секунды. Что для этого нужно? Всего лишь научиться работать с API SEO-инструментов. И для этого не нужно знать программирование.
Почему не нужно бояться API
Как сервис с сотней тысяч клиентов мы каждый день сталкиваемся с проблемой — SEO-специалисты боятся работать с API либо не видят преимуществ. Только прогрессивные агентства по интернет-маркетингу и крупный бизнес выбирают работу с API. Основная причина этому — обработка полученных данных, так как они выгружаются в формате JSON и выглядят вот так:
Для нормальной обработки данных нужны соответствующие самописные скрипты, но не в каждой компании есть отдел разработки или сеошники-программисты.
Поэтому наши специалисты создали инструмент, обрабатывающий данные из поисковой аналитики Serpstat вместо вас. Это бесплатно, и воспользоваться может любой пользователь сервиса. Ниже описана инструкция по настройке скрипта и даны еще пять других бесплатных скриптов.
Плюсы работы с API
- Ускоряет работу в 10 раз. Даже самый дешевый план открывает доступ к API со скоростью парсинга 1 запрос/секунда. Максимальная скорость — 10 запросов/секунда. Сможете ли вы столько ввести руками? Разумеется, нет. Поэтому большие агентства с постоянной работой по семантике пользуются API.
- Больше лимитов. Независимо от тарифного плана API-лимитов всегда больше, чем запросов в интерфейсе. Это значит, что за те же деньги, получаете больше данных. Плюс у вас остаются нетронутыми лимиты для интерфейса.
- Индивидуальные отчеты. Используя API, вы можете совместить несколько отчетов в один и сортировать полученные данные всего одной командой для автоматизации ваших задач.
- Экономит деньги. Используя API, вы платите только за полученные результаты, а не за использование лимитов вашего тарифного плана.
Как начать работу с API Serpstat
Первая версия инструмента предназначена для работы с 16 отчетами из базы данных Serpstat.
- Advertising report — выполняет поиск рекламных объявлений по ключевой фразе.
- Competitors report — возвращает конкурентов по заданной ключевой фразе.
- Domain history report — возвращает историю изменения видимости и количества фраз по домену.
- Domain info report — возвращает суммарную информацию по домену (количество запросов/видимость в поиске/контексте, динамику изменения количества запросов/видимость, тематики домена).
- Domain Keywords report — возвращает ключевые слова в ТОПе поисковой системы по домену.
- Domain Intersection report — возвращает общие ключевые слова для доменов.
- Domain unique keywords report — возвращает ключевые слова домена без учета ключевых слов второго (третьего) домена.
- Domain urls report — возвращает URL-ы домена и количество ключевых слов для URL-а.
- Keyword info report — возвращает данные по ключевому слову (количество запросов, стоимость за клик, уровень конкуренции, категории).
- Keywords report — выполняет полнотекстовый поиск по ключевому слову и предоставляет данные по найденным ключевым словам (количество запросов, стоимость за клик, уровень конкуренции).
- Keyword top report — возвращает последний ТОП по ключевой фразе.
- Related keywords report — возвращает похожие запросы.
- Suggestions report — выполняет полнотекстовый поиск по поисковым подсказкам.
- URL competitors report — возвращает URL конкурентов для заданного URL.
- URL keywords report — возвращает ключевые фразы в ТОПе поисковой системы по заданному URL.
- URL missing keywords report — возвращает ключевые фразы, по которым ранжируются конкуренты, но которые отсутствуют в заданном URL.
Пошаговая настройка скрипта
Чтобы подготовить инструмент к работе, следуйте инструкции.
- Откройте документ и создайте копию у себя на диске. Подождите появления кнопки Configure и кликните на нее. Затем «Установить ключ API».
Подтвердите разрешение для запуска документа и свяжите его с вашим Gmail-аккаунтом.
- Вставьте ваш API-токен, который находится в профиле пользователя Serpstat.
Если API-ключ для вас недоступен (есть у «План В» и выше), обратитесь за консультацией к нашей команде, заполнив форму заявки демонстрации сервиса или обратившись в службу поддержки Serpstat через online-чат в правом нижнем углу на сайте Serpstat. Напишите в чате «Ключ API». Специалист свяжется с вами в ближайшее время.
Бесплатный доступ к API может получить каждый пользователь Serpstat.
- Выберите нужный метод сбора данных, введите ключевое слово или домен. Скрипт автоматически подтянет указанную информацию. Также вы можете задать количество строк в отчете до 1000 и переключаться между данными страницы.
Таким образом, вы выгружаете расширенный отчет по семантике до 10 секунд, не заходя в интерфейс сервиса. Если вы никогда не пробовали работать с API, начните с этого докса.
Больше бесплатных скриптов для API Serpstat
Кроме внутренней бесплатной разработки, в Serpstat есть скрипты, созданные самими пользователями для удобной работы с сервисом и выложенные в открытый доступ. Вам остается только заполнять строки и выгружать отчеты.
Поиск форумов для линкбилдинга
Скрипт вытаскивает заданное количество фраз указанного сайта и затем анализирует ТОП 100 для каждого из них. В результате отображает ссылки исключительно на форумные страницы, указывая позицию и фразу, по которой ранжируется эта страница.
Результат:
Инструмент в разы экономит время линкбилдеров, которым больше не нужно собирать форумы руками с помощью операторов intitle, inurl и т.д.
Онлайн версия скрипта + исходник на PHP.
Поиск тематических блогов
Работает по аналогии с предыдущим скриптом. На этот раз ищет площадки-блоги, релевантные вашей тематике для размещения там ссылок или качественных публикаций. Скрипт разработан в помощь аутричерам, внешним контент-маркетологам.
Результат:
Онлайн версия скрипта + исходник на PHP.
Сбор семантики и анализ URL конкурентов
Еще один бесплатный скрипт для быстрого сбора семантики. Массово анализирует URL-ы конкурентов и ключевые фразы.
Принцип работы автор скрипта подробно описал в этой статье.
Поиск дропов по WHOIS
Задача скрипта — достать домены из ниши и определить зарегистрирован ли домен, если да — то дату начала и окончания регистрации домена. Для этого используется бесплатная библиотека phpWhois.
Результат:
Онлайн версия скрипта + исходник на PHP.
Поиск нецелевых страниц для контекстной рекламы
Для быстрого поиска неправильных целевых адресов в рекламе можно использовать подсказки поисковиков. А именно страницы, участвующие в органической выдаче по множеству поисковых фраз.
Используя две функции API domain_keywords и ad_keywords, вы получаете два множества, которые можно быстро сравнить и определить фразы, по которым целевой адрес рекламы отличается от страницы в выдаче. Имея эти данные, вы за считанные минуты выявите спорные адреса и подготовите правки для рекламных кампаний.
Результат:
Онлайн версия скрипта + исходник на PHP.
Как еще используют API?
Компания ArtJocker использует API Serpstat для постановки KPI SEO-специалистам. Система работает следующий образом:
- Сначала собираем ключи конкурентов с минусами и получаем объем трафика.
- Далее вводим наше доменное имя.
- Список ключевых запросов, которые могут быть еще у клиента, т.е. то, что он может считать своими ключевыми запросами.
- Вбиваем в исключение наиболее популярные агрегаторы, марпокетплейсы.
Рассчитываем!
API Serpstat мониторит конкурентов, их видимость, ключевые запросы и выдает предполагаемый рост трафика на 6 месяцев.
Эти показатели проверяются калькулятором KPI от ArtJocker на совместимость с общей картиной по сайту. Со слов руководителя отдела маркетинга, погрешность не более чем в 5–10%.
Напоследок
Работать с API легко и дешево. Используйте это преимущество для опережения конкурентов. А если вы новичок, пройдите бесплатный курс по началу работы с API в онлайн-академии Serpstat.
Успехов!
Системные службы
— приложения Win32
- 2 минуты на чтение
В этой статье
В этом разделе содержится справочник по системным API и службам, предлагаемым Windows для настольных приложений. К ним относятся традиционно доступные услуги для:
- Модель компонентных объектов (COM).
- Сжатие файлов.
- Библиотеки с динамической компоновкой.
- Управление памятью.
- Управление питанием.
- Создание и согласование нескольких потоков выполнения ..
- Разработка служебных приложений.
- Обмен сообщениями Windows.
- Получение системной информации Windows.
- API справки.
В этом разделе
Тема | Описание |
---|---|
COM | COM — это платформенно-независимая распределенная объектно-ориентированная система для создания двоичных программных компонентов, которые могут взаимодействовать.COM является базовой технологией для технологий Microsoft OLE (составные документы) и ActiveX (компоненты с доступом в Интернет). |
COM + | COM + — это эволюция Microsoft Component Object Model (COM) и Microsoft Transaction Server (MTS). COM + создает и расширяет приложения, написанные с использованием COM, MTS и других технологий на основе COM. COM + выполняет многие задачи управления ресурсами, которые раньше приходилось программировать самостоятельно, например, выделение потоков и безопасность.COM + также делает ваши приложения более масштабируемыми, обеспечивая объединение потоков, объединение объектов и активацию объектов точно в срок. COM + также помогает защитить целостность ваших данных, обеспечивая поддержку транзакций, даже если транзакция охватывает несколько баз данных в сети. |
API сжатия | API сжатия предоставляет алгоритмы сжатия Windows MSZIP, XPRESS, XPRESS_HUFF и LZMS. Это позволяет разработчикам приложений Windows управлять версиями, службами и расширять открытые алгоритмы сжатия. |
Координатор распределенных транзакций | Руководство и справочная документация для системных администраторов и разработчиков, использующих координатор распределенных транзакций (DTC). |
Microsoft.Dtc.PowerShell.Diagnostics | Предоставляет информацию о командлетах PowerShell, поставляемых с координатором распределенных транзакций Microsoft (MSDTC) для диагностики. |
Microsoft.MsDtcManagement.Команды | Предоставляет информацию о командлетах PowerShell, поставляемых с координатором распределенных транзакций Microsoft (MSDTC) для управления. |
Библиотеки динамической компоновки | Как создавать библиотеки DLL и управлять ими. |
Справка API | Help API позволяет открывать справочные каталоги и получать элементы справочного содержимого. |
Межпроцессное взаимодействие | Как использовать почтовые ящики и каналы. |
Менеджер транзакций ядра | Как использовать транзакционные операции с файлами и реестром или определять транзакции для других ресурсов. |
Управление памятью | Основные службы управления памятью. |
Службы MultiPoint | Роль сервера, которая позволяет нескольким пользователям одновременно использовать один и тот же компьютер, например, в классе. |
Операционный регистратор | Operation Recorder позволяет приложениям ускорять операции, которые многократно обращаются к одним и тем же данным файла, предоставляя механизм предварительной выборки Windows как общедоступный интерфейс. |
Управление питанием | Основные услуги по управлению питанием. |
Процессы и потоки | Как создавать и управлять процессами и потоками. |
Службы удаленных рабочих столов | Как программно взаимодействовать со службами удаленных рабочих столов. |
Услуги | Как создавать и управлять услугами. |
Синхронизация | Как координировать несколько потоков выполнения. |
Совместное использование рабочего стола Windows | Совместное использование рабочего стола Windows — это технология совместного использования экрана несколькими сторонами. Ключевые сценарии включают удаленную помощь, совместную работу и конференц-связь в реальном времени, а также видеосвязь. |
Платформа уведомлений Windows | Документирует функции (и прототипы обратных вызовов функций), используемые для обнаружения и, возможно, восстановления приложения после установки или миграции. |
Подсистема Windows для Linux | Справочная информация по программным интерфейсам подсистемы Windows для Linux (WSL). |
Информация о системе Windows | Как получить программный доступ к реестру и ключевой конфигурации системы и информации о версии. |
Что такое API: определение, спецификации, типы, документация
Время чтения: 9 минут
Если вы когда-либо читали технические журналы или блоги, вы, вероятно, видели аббревиатуру API.Звучит солидно, но что это значит и зачем беспокоиться?
Начнем с простого примера: человеческое общение. Мы можем выражать свои мысли, потребности и идеи с помощью языка (письменного и устного), жестов или мимики. Для взаимодействия с компьютерами, приложениями и веб-сайтами требуются компоненты пользовательского интерфейса — экран с меню и графическими элементами, клавиатура и мышь.
Программное обеспечение или его элементы не нуждаются в графическом интерфейсе пользователя для взаимодействия друг с другом.Программные продукты обмениваются данными и функциями через машиночитаемые интерфейсы — API (интерфейсы прикладного программирования).
Что такое API?
API — это набор программного кода, который обеспечивает передачу данных между одним программным продуктом и другим. Он также содержит условия этого обмена данными.
Как работает API. Источник: Средний
Интерфейсы прикладного программирования состоят из двух компонентов:
- Техническая спецификация, описывающая варианты обмена данными между решениями со спецификацией, оформленной в виде запроса на обработку и протоколов доставки данных
- Программный интерфейс, написанный в соответствии со спецификацией, которая его представляет
Программное обеспечение, которому требуется доступ к информации (т.е.е., стоимость гостиничных номеров X на определенные даты) или функциональность (т. е. маршрут от точки A до точки B на карте в зависимости от местоположения пользователя) из другого программного обеспечения, вызывает его API, указывая при этом требования того, как данные / функциональность должны предоставляться. Другое программное обеспечение возвращает данные / функции, запрошенные предыдущим приложением.
И интерфейс, с помощью которого эти два приложения обмениваются данными, определяется API.
Специалисты Red Hat отмечают, что API-интерфейсы иногда считаются контрактами, где документация — это соглашение между сторонами: «Если сторона сначала отправляет удаленный запрос, структурированный определенным образом, именно так будет реагировать программное обеспечение второй стороны.» Документация API — это руководство для разработчиков, которое включает всю необходимую информацию о том, как работать с API и использовать предоставляемые им службы. Подробнее о документации мы поговорим в одном из следующих разделов.
Каждый API содержит и реализуется с помощью вызовов функций, — языковых операторов, которые запрашивают программное обеспечение для выполнения определенных действий и услуг. Вызов функций — это фразы, состоящие из глаголов и существительных, например:
- Начать или закончить сеанс
- Получите удобства для одноместного номера
- Восстановление или получение объектов с сервера.
Вызовы функций описаны в документации API.
API
служат множеству целей. Как правило, они могут упростить и ускорить разработку программного обеспечения. Разработчики могут добавлять функциональные возможности (например, механизм рекомендаций, бронирование жилья, распознавание изображений, обработку платежей) от других поставщиков к существующим решениям или создавать новые приложения с использованием услуг сторонних поставщиков. Во всех этих случаях специалистам не нужно иметь дело с исходным кодом, пытаясь понять, как работает другое решение.Они просто подключают свое программное обеспечение к другому. Другими словами, API-интерфейсы служат уровнем абстракции между двумя системами, скрывая сложность и рабочие детали последней.
Типы API
API
по доступности, также известной как политика выпуска
Что касается политик выпуска, API-интерфейсы могут быть частными, партнерскими и общедоступными.
Типы API по доступности
Частные API. Эти интерфейсы прикладного программного обеспечения предназначены для улучшения решений и услуг в организации.Собственные разработчики или подрядчики могут использовать эти API-интерфейсы для интеграции ИТ-систем или приложений компании, создания новых систем или приложений для клиентов, использующих существующие системы. Даже если приложения общедоступны, сам интерфейс остается доступным только для тех, кто работает напрямую с издателем API. Частная стратегия позволяет компании полностью контролировать использование API.
Партнерские API. API партнеров открыто продвигаются, но передаются бизнес-партнерам, подписавшим соглашение с издателем.Типичным вариантом использования партнерских API является интеграция программного обеспечения между двумя сторонами. Компания, которая предоставляет партнерам доступ к данным или возможностям, получает дополнительные потоки доходов. В то же время он может отслеживать, как используются открытые цифровые активы, проверять, обеспечивают ли сторонние решения, использующие их API, достойный пользовательский интерфейс, и поддерживать корпоративный стиль в своих приложениях.
Общедоступные API. Эти API-интерфейсы, также известные как предназначенные для разработчиков или внешние, доступны для любых сторонних разработчиков.Публичная программа API позволяет повысить узнаваемость бренда и получить дополнительный источник дохода при правильном исполнении.
Есть два типа общедоступных API — открытые (бесплатные) и коммерческие. Определение открытого API предполагает, что все функции такого API являются общедоступными и могут использоваться без ограничительных условий. Например, можно создать приложение, использующее API, без явного одобрения поставщика API или обязательных лицензионных сборов.В определении также говорится, что описание API и любая сопутствующая документация должны быть открытыми и что API можно свободно использовать для создания и тестирования приложений.
Пользователи коммерческого API платят абонентскую плату или используют API на условиях оплаты по факту использования. Среди издателей популярный подход — предлагать бесплатные пробные версии, чтобы пользователи могли оценить API перед покупкой подписок.
API по сценариям использования
API
можно классифицировать в соответствии с системами, для которых они предназначены.
API баз данных. API баз данных обеспечивают связь между приложением и системой управления базами данных. Разработчики работают с базами данных, создавая запросы для доступа к данным, таблиц изменений и т. Д. API базы данных Drupal 7, например, позволяет пользователям писать унифицированные запросы для различных баз данных, как проприетарных, так и с открытым исходным кодом (Oracle, MongoDB, PostgreSQL, MySQL, CouchDB , и MSSQL).
Другой пример — API базы данных ORDS, который встроен в Oracle REST Data Services.
API операционных систем. Эта группа API определяет, как приложения используют ресурсы и службы операционных систем. Каждая ОС имеет свой набор API-интерфейсов для инс.
Модель владения и управления системными API-интерфейсами
Эта серия блогов о владении API является результатом сотрудничества между Стивеном Фишманом, Станиславом Покраевым и Адамом Дэвисом. Каждый автор представляет отдельную область организации MuleSoft — успех клиентов, офис технического директора и профессиональные услуги соответственно.
В первом посте из этой серии блогов о владении API подробно описана концептуальная модель для облегчения принятия обоснованных решений по бизнесу и техническому владению API. Чтобы дать дополнительные инструкции по владению конкретными типами API, я для начала углублюсь в системные API.
Что такое системные API?
Системные API-интерфейсы предоставляют средства для изоляции потребителей данных от сложности или изменений в базовых системах. После создания многие потребители могут получать доступ к данным без необходимости знать детали базовых систем.Системные API-интерфейсы обычно являются детализированными, независимыми от бизнес-процессов и допускают многократное использование.
Системные API и системы, с которыми они интегрируются, обычно поддерживают более одного потока создания ценности и / или возможности предприятия. Определение владения бизнесом в этих общих контекстах использования может быть сложным. Если отсутствует четкое право собственности на общую инфраструктуру, предприятия могут прибегнуть к нескольким другим методам получения права собственности на бизнес — например, владение данными, гибридные технические / бизнес-владельцы, организации общих служб и т.
Деловые и технические владельцы системного API
Деловая собственность на системный API должна пытаться следовать возможностям и / или владению потоком создания ценности, если это возможно (с вторичными методами получения права собственности в отношении владения данными или совместно используемых систем и услуг). Техническое владение системным API должно следовать за владением системой / платформой.
Воспринимаемое качество API тесно связано с качеством данных, с которыми он взаимодействует и с которыми он взаимодействует. Хорошо спроектированный API для серверной системы одновременно повышает уровень контроля системы и упрощает доступ к ней.В большинстве случаев правила доступа к данным определяются на основе классификации данных, совмещенной с назначением роли отправителя запроса, например, некоторые данные являются общедоступными, некоторые данные являются конфиденциальными, а некоторые данные являются привилегированными в зависимости от роли и зоны ответственности запрашивающего. Эти правила определяются политиками корпоративной безопасности и управления данными на предприятии и сильно различаются в зависимости от отрасли.
Лучшим человеком для определения политик доступа к API является тот, кто понимает не только запрашиваемые данные и / или действия, но и то, как эти данные будут использоваться на предприятии.Во многих случаях данные, поддерживающие несколько бизнес-функций, управляются в единой системе (например, SAP, Salesforce), которая поддерживает общие бизнес-процессы и возможности.
Определение бизнес-владения API на основе владения системой, в которой находятся данные, может быть проблематичным, учитывая, что многие владельцы систем, как правило, несут ответственность (и имеют квалификацию) только за технические аспекты системы вместе с функциями системы на ядро (например, доступность системы, производительность системы, основные варианты использования и т. д.), а не сценарии корпоративного использования для использования этой системы на периферии (например, настраиваемые процессы для уникальных требований бизнеса (LOB), обходные пути и интеграции для уникальных требований клиентов и т. д.). Многие организации также не имеют руководств по управлению общими системами с несколькими заинтересованными сторонами LOB.
Напротив, определение бизнес-владения общим API вызывает аналогичные проблемы, учитывая, что многие владельцы бизнеса, как правило, несут ответственность и квалификацию только за управление предоставлением новых функций, а не за операционную дисциплину, необходимую для корпоративных платформ, с широкими проблемами отказоустойчивости и безопасности. , масштабируемость, гибкость в будущем и другие высокотехнологичные аспекты.И снова у многих организаций нет руководств по управлению общими системами с несколькими заинтересованными сторонами LOB.
Последствия назначения владельцев системного API
Назначение бизнес-и технических прав владения общими ресурсами глубоко в инфраструктуре корпоративных приложений имеет множество ловушек и компромиссов, независимо от решения.
При назначении права собственности на системные API-интерфейсы следует учитывать ближайшие и долгосрочные цели для общего системного API-интерфейса, что упрощает принятие решения — например, общая система, которая не нуждается в улучшении, но должна быть доступна в любое время. может свести к минимуму риски, связанные с укомплектованием роли владельца бизнеса, назначив технического сотрудника, который способен достичь сбалансированной точки зрения под давлением и имеет разумный набор опыта, который согласуется с возможностями системы.И наоборот, общая система, которая используется для запуска новых продуктов и предприятий, может быть оптимизирована для достижения ближайших целей с формальным владельцем бизнеса, который имеет разумные основания в технических вопросах.
Еще одно важное соображение — общие ресурсы требуют совместного руководства. Создание руководящих комитетов для совместной инфраструктуры может достичь превосходных результатов по сравнению с единоличной собственностью за счет сотрудничества и разнообразия опыта. Если организационная культура требует, чтобы «один глоток давился и трясся», руководящий комитет, который подчиняется исполнительному спонсору, может действовать как мост от абстрактной контекстуальной бизнес-потребности к организационной культуре на местах.
Для компаний со зрелыми дисциплинами управления данными, дисциплина EA обычно имеет 2 роли: «Владелец определений данных» и «Владелец данных». Владелец определений данных — обычно архитектор предметной области с навыками управления данными — имеет полномочия, когда дело доходит до того, как определяются бизнес-объекты и каковы их атрибуты и отношения с другими объектами. Владелец данных — обычно распорядитель данных (в терминах MDM) — отвечает за фактическое качество данных, например, наличие всех обязательных атрибутов, отсутствие повторяющихся записей и т. Д.
Как правило, организация имеет одного владельца определений данных для каждого объекта бизнес-данных и нескольких владельцев данных (например, для нескольких регионов). Для системных API, предоставляющих данные, не зависящие от бизнес-процессов, рассмотрите возможность наличия владельца определений данных или владельца данных в качестве владельца бизнес-API.
В следующем сообщении блога будет подробно описана модель владения и управления для API процессов. Если вы хотите узнать больше, ознакомьтесь с нашими ресурсами API.
В соответствии с: API бизнес | # api-led # Подключение на основе API # Системный API
Введение в шаблоны API с многократно используемыми системными и технологическими API
В современном мире API-интерфейсы используются для абстрагирования сложности систем записей, чтобы обеспечить безопасное соединение с конечными системами, и для достижения бизнес-целей, таких как создание единого представления о клиенте.Но одни только API не могут выполнить все варианты использования интеграции. Например, если вы хотите отправить данные о реализованных возможностях в Salesforce в SAP для создания счета-фактуры, помимо использования API, вам также потребуется выполнить миграцию данных и / или синхронизацию данных для выполнения этого варианта использования.
Чтобы помочь нашим клиентам обеспечить согласованность и повторное использование при рассмотрении таких вариантов использования, мы вводим шаблоны API. Шаблоны API состоят из повторно используемых «системных API-интерфейсов», «API-интерфейсов процессов» и шаблонной оркестровки для быстрого решения распространенных случаев использования.
Использование подхода на основе API
Подключение на основе API — это подход, который определяет методы для подключения ваших активов с использованием повторно используемых строительных блоков API. Подход включает три отдельных уровня, которые содержат многократно используемые API на уровне системы, процесса и опыта. В этой статье мы не собираемся рассматривать примеры API взаимодействия, но мы продемонстрируем, как системные и технологические API помогают в сценариях использования миграции и синхронизации данных.
В основе всех ИТ-архитектур лежат основные системы записей, которые часто недоступны из-за их сложности и проблем с подключением.API-интерфейсы предоставляют средства скрыть эту сложность от пользователя, открывая доступ к данным и обеспечивая последующую изоляцию от любых изменений интерфейса или рационализации этих систем.
Шаблоны API предоставляют системные API-интерфейсы для создания строительных блоков, которые может повторно использовать любой сотрудник организации, желающий получить доступ к одним и тем же данным. Системные API предоставляют данные через набор служб RESTful, разработанных в RAML, что делает их легко доступными любому разработчику на предприятии.
Ниже вы можете увидеть пример подключения к SAP через BAPI в сравнении с использованием системных API, предоставленных в шаблоне SAP System API.
Подключение к SAP через BAPI
Подключение к SAP через системный API
API процессов инкапсулируют базовые бизнес-процессы, которые взаимодействуют с исходными и целевыми системами или каналами через набор системных API. Например, в процессе заказа на поставку существует некоторая логика, общая для продуктов, регионов и каналов розничной торговли, которую можно и нужно объединить в одну услугу, которую затем можно будет вызвать.
Для создания шаблонов общих потребностей интеграции необходимо сначала установить базовые шаблоны, чтобы сделать интеграцию атомарной, многоразовой и расширяемой. Шаблоны обычно включают:
- исходный системный API, в котором данные находятся до выполнения
- целевой — системный API, куда будут вставлены данные
- критерии, определяющие объем данных, которые будут скопированы, перемещены или реплицированы
- результатов — для сравнения конечного состояния с желаемым.
Шаблоны API инкапсулируют пять наиболее распространенных шаблонов интеграции в API процессов, таких как миграция, широковещательная передача, агрегирование, корреляция и двунаправленная синхронизация.
Шаблоны API в действии
Взгляните на наш первый набор шаблонов API, которые включают системные API-интерфейсы для Salesforce, SAP и баз данных, а также API-интерфейсы процессов для миграции учетной записи. Давайте посмотрим, как мы можем использовать эти шаблоны для переноса данных учетной записи из SAP в Salesforce:
1.Абстрагируйтесь от сложности базовых систем
Во-первых, мы собираемся использовать RESTful API, чтобы скрыть сложность базовой системы записей, в нашем примере Salesforce и SAP. После выбора системных API настройте приложения и разверните их в CloudHub.
2. Доступ к данным
После развертывания системных API мы можем получить доступ к данным учетной записи из Salesforce и / или SAP через RESTful API.
3. Внедрение бизнес-логики
Теперь, когда данные SAP и Salesforce станут легко доступны через системные API-интерфейсы, мы собираемся перенести данные учетной записи.Для этого мы будем использовать API процесса миграции и после настройки; нам нужно будет только сделать вызов API, чтобы переместить учетные записи из Salesforce в SAP.
Заключение
С увеличением количества систем на предприятии повторное использование становится первостепенным для ускорения доставки и масштабирования. Воспользуйтесь подходом к подключению на основе API, попробовав шаблоны. Если у вас есть какие-либо вопросы или отзывы, присылайте их по адресу [email protected]
Раздел: Разработчик Anypoint Platform, Разработчик | #Anypoint Exchange # Разработчик платформы Anypoint #APIs
Гибкая система API | ISPsystem
RestAPI — это простая и удобная система запросов, широко используемая во всем мире.Платформы ISPsystem поддерживают стандартные методы GET, POST и DELETE. Все функции и примеры использования подробно описаны в документации. Там вы также найдете инструкции о том, к какому серверу подключаться, в каком формате писать запросы и как обрабатывать ответы.
Вот несколько самых популярных запросов в DCImanager:
Популярные случаи использования API для VMmanager:
При покупке платформ ISPsystem вы также получаете готовые модули для интеграции с популярными решениями, такими как BILLmanager, WHMCS, HostBill (DCImanager только) и PowerDNS.AD / LDAP в настоящее время находится в разработке. Простая система API и расширенная документация были созданы, чтобы помочь вам подключить другое программное обеспечение.
История успеха
Как оптимизировать затраты на техподдержку с помощью продуктов ISPsystem
Подробнее →
API в DCImanager
Полный список команд доступен в документации.
Операции с пользователями
В DCImanager вы можете удалить, создать или получить список всех пользователей через API.
Операции с серверами
Для серверов доступен более широкий спектр операций.Вы можете получить информацию обо всех серверах или конкретном, его подключениях и даже о конкретной операции. Редактирование или удаление сервера также доступно через API. Кроме того, вы можете обновлять статус операций, запускать восстановление и включать и выключать сервер.
Операции с портами коммутатора
С помощью API вы можете получать информацию о портах, редактировать порты, создавать или удалять их. Также доступно включение или отключение портов.
Операции с питанием сервера
API охватывает основные сценарии управления питанием сервера: включение или выключение сервера или его перезагрузка.
Операции с IP-адресами
В DCImanager вы можете получить список адресов, удалить, изменить или добавить IP-адреса с помощью API.
API в VMmanager
Полный список команд доступен в документации.
Бесплатная техническая поддержка
Наша техническая поддержка состоит из сетевых инженеров и администраторов Linux. Консультируем или помогаем решить проблему «на месте» подключившись к вашей платформе.
Интуитивно понятный интерфейс
ИТ-администратору и внутренним пользователям будет проще управлять инфраструктурой благодаря простому и интуитивно понятному интерфейсу.
Регулярные улучшения
Команда ISPsystem выпускает обновления каждые 2 недели. Продукт учитывает тенденции рынка и запросы пользователей.
Безопасность и стабильность
Система мониторинга и аналитики позволяет ИТ-администратору отслеживать состояние всей системы и предотвращать сбои.
Создание системы поставщика API
- Поставщик API используется для абстрагирования соединения с серверной / целевой системой
- API-прокси — это фактический API, который содержит логику для подключения к целевой системе.Здесь вы можете моделировать поток, добавлять политики безопасности, преобразовывать входящее сообщение или искать инъекции контента
- Продукт API, который объединяет один или несколько прокси API, прежде чем они будут представлены на портале разработчика API, чтобы разработчик мог использовать их.
Вы будете использовать SAP Cloud Platform, API Management для создания поставщика API. Этот поставщик API будет подключаться к серверной системе, в вашем случае к системе разработчика шлюза SAP. В реальной жизни поставщик API может подключиться к вашей системе разработчика.После того, как вы создали и протестировали на нем прокси-сервер API, вы должны перенести прокси в свою производительную систему, и теперь базовый поставщик API будет указывать на вашу производительную внутреннюю систему.
Шаг 1. Узнайте об инструментах управления API
В следующих парах руководств, которые являются частью этой серии, вы познакомитесь с различными инструментами, которые предоставляет Управление API. Получите обзор инструментов и того, как каждый компонент работает вместе, чтобы помочь в создании вашего прокси.
Ваш прокси — это то, что вы открываете внешнему миру, чтобы он мог использовать ваш API. Просмотрите блог, чтобы узнать о различных строительных блоках прокси и о том, как инструменты SAP, предоставляемые через API Management, упрощают вам как разработчику.
Шаг 2. Откройте портал управления SAP API.
Откройте портал SAP API Management API Portal (URL-адрес можно получить в разделе «Включить SAP Cloud Platform, API Management Service»).
Выполнено
Войдите, чтобы ответить на вопрос
Шаг 3. Быстрое начало создания поставщика API
Из плитки Quick Action на главном экране вы можете сразу создать поставщика API, щелкнув Поставщик API .
Это вызовет мастер создания для поставщика API.
Выполнено
Войдите, чтобы ответить на вопрос
Шаг 4. Просмотр и создание поставщиков API
Чтобы перейти в область API Developer, выберите Hamburger Menu в верхнем левом углу и нажмите Configure .
Поставщики API будет выбран по умолчанию в меню вкладок, чтобы увидеть ранее созданных поставщиков и создать нового.
Чтобы создать нового поставщика на этой странице, нажмите Создать
Выполнено
Войдите, чтобы ответить на вопрос
Шаг 5. Введите информацию о поставщике API.
В синей области обзора введите Имя для поставщика API.
Поле | Значение |
---|---|
Имя | SAPDeveloperSystemES5 |
На вкладке Connection введите следующую информацию.
Поле | Значение |
---|---|
Описание | Общедоступная система шлюза SAP с поддержкой OData |
Хост | sapes5.sapdevcenter.com |
Порт | 443 |
Использовать SSL | (проверено) |
в помещении | (не отмечено) |
На вкладке Аутентификация укажите следующую информацию.
Поле | Значение |
---|---|
Тип аутентификации | Базовый |
Имя пользователя | |
Пароль | <ваш_ пароль_GATEWAY> |
На вкладке Параметры службы каталога укажите следующую информацию.
Поле | Значение |
---|---|
Префикс пути | / sap / opu / odata |
URL сбора услуг | / IWFND / CATALOGSERVICE / ServiceCollection |
Выполнено
Войдите, чтобы ответить на вопрос
Шаг 6. Сохраните поставщика API
Нажмите Сохранить вверху справа.
Выполнено
Войдите, чтобы ответить на вопрос
Шаг 7. Проверьте настройки
Чтобы проверить настройки, щелкните вкладку Настройки службы каталогов в поставщике API. Щелкните ссылку URL каталога , чтобы просмотреть каталог.
Выполнено
Войдите, чтобы ответить на вопрос
Шаг 8. Просмотрите список услуг.
Если URL-адрес был правильным, вы должны увидеть список служб, доступных в системе SAP Gateway (этот экран может выглядеть по-разному в разных браузерах).Если вы правильно ввели данные для аутентификации, не должен запрашивать имя пользователя и пароль для . Если вас попросят ввести имя пользователя и пароль, убедитесь, что ваши учетные данные на вкладке «Проверка подлинности поставщика API» являются вашими правильными учетными данными шлюза . После 3 неудачных попыток ваш шлюз заблокируется.
Выполнено
Войдите, чтобы ответить на вопрос
Шаг 9. Вернитесь к обзору поставщика API
Когда поставщик API был успешно сохранен, быстро появится всплывающее сообщение, и вы увидите все значения, которые вы ввели ранее.Щелкните ссылку SAPDeveloperSystemES4
, чтобы вернуться к снимку экрана обзора
поставщика API.
Выполнено
Войдите, чтобы ответить на вопрос
Шаг 10. Просмотр поставщиков
Теперь вы можете увидеть одного поставщика API в списке доступных поставщиков API.
Выполнено
Войдите, чтобы ответить на вопрос
.