что такое rest api простыми словами

О REST API простыми словами

REST API — два часто встречающихся акронима (сокращение с английского), которые расшифровываются как: Representational State Transfer и Application programming interface. Итак, REST — это архитектурный стиль взаимодействия элементов распределенной системы. Так называется стиль взаимодействия между отдельными частями системы, которые не обязательно должны быть расположены в одном месте. Другими словами, это специальный стиль, обладающий набором ограничений, которые должны учитываться на этапах проектирования системы.

Из истории

По своей сути концепция REST лежит в основе интернета, однако сам термин был введен только в 2000 году Роем Филдингом, который также отметился участием в создании протокола HTTP.

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

Структура REST API

Архитектура REST API имеет несколько особенностей:

Рассмотрим каждый элемент подробнее.

Архитектура «клиент-сервер»

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

Stateless-сервер

Состояние клиента не хранится на сервере — это ложится на самого клиента. Благодаря этому упрощается доработка и сопровождение сервера, что делает его максимально стабильным.

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

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

Многослойная структура

Со стороны клиента должно быть совершенно незаметно:

Единый интерфейс

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

Ключ по требованию

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

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Требования к структуре

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

Клиент-серверная модель

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

Разграничение на «клиента» и «сервер» дает возможность развиваться частям единой системы независимо.

Отсутствие состояния

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

При соответствии данному требованию клиентская и серверная части смогут «понимать» друг друга без опоры на полученные ранее друг о друге сведения.

Кэширование

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

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

Единообразие интерфейса

Еще одним обязательным требованием к системе REST является унифицированный тип интерфейса. В приложении клиент должен понимать, на какой адрес и в каком формате должен быть отправлен запрос, а сервер — в каком формате требуется составлять ответы.

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

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

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

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

Код по требованию

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

Преимущества REST API

Система, соблюдающая все требования РЕСТ АПИ, будет обладать целым рядом преимуществ. В их числе:

Если говорить простыми словами, то REST API — это набор правил (всего их 6), соблюдение которых дает возможность правильно организовать написание серверного кода приложения, чтобы все системы обменивались данными, были легко масштабируемыми и производительными.

Источник

Основы REST: теория и практика

Авторизуйтесь

Основы REST: теория и практика

REST, Representational State Transfer, является архитектурным стилем для обеспечения стандартов между компьютерными системами в сети, что облегчает для систем обмен данными друг с другом. Системы, отвечающие требованиям REST и часто называемые RESTful, характеризуются тем, что не имеют сохранения состояния и разделяют интересы клиента и сервера. Мы рассмотрим, что означают эти термины и почему они являются полезными для услуг в Интернете.

Разделение клиента и сервера

В архитектурном стиле REST реализация клиента и реализация сервера могут быть выполнены независимо друг от друга. Это означает, что код на стороне клиента может быть изменён в любое время без ущерба для работы сервера, а код на стороне сервера может быть изменён без влияния на работу клиента.

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

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

Отсутствие сохранения состояния

Системы, которые следуют парадигме REST, не имеют сохранения состояния, что означает, что серверу не нужно знать о состоянии клиента и наоборот. Таким образом, и сервер, и клиент могут понять любое полученное сообщение, даже не увидев предыдущих сообщений. Это отсутствие сохранения состояния обеспечивается за счёт использования ресурсов, а не команд. Они описывают любые объекты, документы или вещи, которые могут потребоваться для хранения или отправки в другие службы.

25–27 ноября, Онлайн, Беcплатно

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

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

Взаимодействие между клиентом и сервером

В архитектуре REST клиенты отправляют запросы на поиск или изменение ресурсов, а серверы отправляют ответы на эти запросы. Давайте рассмотрим стандартные способы направления запросов и ответов.

Отправка запросов

REST требует, чтобы клиент сделал запрос на сервер для получения или изменения данных на сервере. Запрос обычно состоит из:

Существует 4 основных метода НТТР, которые мы используем в запросах для взаимодействия с ресурсами в системе REST:

В заголовке запроса клиент отправляет тип контента, который он может получить с сервера. Это поле называется Accept. Оно обеспечивает, что сервер не посылает данные, которые не могут быть поняты или обработаны клиентом. Параметры типов контента — это типы MIME (или Multipurpose Internet Mail Extensions, о которых вы можете прочитать больше в MDN Web Docs).

Типы MIME, используемые для указания типов контента в поле Accept, состоят из типа и подтипа. Они разделены слэшем (/).

Другие типы и часто используемые подтипы:

Например, клиент, имеющий доступ к ресурсу с идентификатором 123 в ресурсе статей на сервере, может отправить запрос GET следующим образом:

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

Пути должны содержать информацию, необходимую для определения местоположения ресурса с необходимой степенью конкретности. При ссылке на список или коллекцию ресурсов не всегда необходимо добавлять идентификатор. Например, запрос POST на путь somesite.com/persons не будет нуждаться в дополнительном идентификаторе, так как сервер генерирует идентификатор для нового объекта.

В тех случаях, когда сервер отправляет клиенту полезную нагрузку, он должен включать тип контента в заголовок ответа. Это поле заголовка контента предупреждает клиента о типе данных, которые он посылает в теле ответа. Эти типы контента являются типами MIME, точно так же, как они находятся в поле Accept заголовка запроса. Тип контента, который сервер возвращает обратно в ответе, должен быть одним из параметров, указанных клиентом в поле принятия запроса.

Например, клиент получает доступ к ресурсу с идентификатором 123 в разделе статей с этим запросом GET:

Сервер должен отправить обратно контент с заголовком ответа:

Это означает, что запрашиваемый контент возвращается в тело ответа с text/html — типом контента, который клиент будет в состоянии принять.

Коды ответов

Ответы от сервера содержат коды состояния для оповещения клиента об успехе операции. Как разработчику вам не нужно знать каждый код состояния (их много), но вы должны знать самые распространённые и то, как они используются.

Для каждого метода НТТР ожидаются коды статуса, которые сервер должен вернуть в случае успеха:

Если операция не работает, вернётся наиболее конкретный код состояния, соответствующий возникшей проблеме.

Предположим, у нас есть приложение, которое позволяет вам просматривать, создавать, редактировать и удалять клиентов и заказы для небольшого магазина одежды, размещённого на сайте fashionboutique.com. Мы можем создать НТТР API, который позволит клиенту выполнять следующие функции.

Если бы мы хотели увидеть всех клиентов, запрос выглядел бы так:

Возможный заголовок ответа будет выглядеть следующим образом:

Создание нового клиента путем размещения данных:

Затем сервер генерирует идентификатор этого объекта и возвращает его клиенту с таким заголовком:

Для просмотра одного клиента мы используем метод GET, указывая идентификатор этого клиента:

Возможный заголовок ответа будет выглядеть следующим образом:

Мы можем обновить этого клиента, вставив новые данные с помощью метода PUT:

Мы также можем УДАЛИТЬ этого клиента, указав его идентификатор:

Практика с REST

Давайте представим, что мы создаём сайт для сбора фотографий. Мы хотим сделать API, чтобы отслеживать пользователей, места проведения и фотографии этих мест. Этот сайт имеет index.html и style.css. Каждый пользователь имеет имя пользователя и пароль. Каждая фотография имеет место проведения и владельца (т.е. пользователя, который сделал фотографию). Каждое место имеет название и адрес. Можете ли вы разработать систему REST, которая будет учитывать:

Для начала опишите:

Источник

Как правильно работать с REST API

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Коротко обо мне

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

Вступление

Скорее всего вам уже приходилось слышать о таком термине, как REST API, особенно если вы сталкивались с необходимостью получения данных из другого источника (такого как Twitter или Github). Но что же все-таки это такое? Что мы можем с этим делать и как мы можем это использовать?

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

Что же такое REST API?

Давайте представим, что вы пытаетесь найти фильмы о Бэтмене на YouTube. Вы открываете сайт, вбиваете в форму поиска слово «Бэтмен», жмакаете «Окей» и видите список фильмов о супергерое. Похожим образом работает и WEB API. Вы ищите что-то и получаете список результатов от запрашиваемого ресурса.

Дословно API расшифровывается как Application Programming Interface. Это набор правил, позволяющий программам «общаться» друг с другом. Разработчик создает API на сервере и позволяет клиентам обращаться к нему.

REST – это архитектурный подход, определяющий, как API должны выглядеть. Читается как «Representational State Transfer». Этому набору правил и следует разработчик при создании своего приложения. Одно из этих правил гласит, что при обращении к определенному адресу, вы должны получать определенный набор данных (ресурс).

Анатомия запроса

Маршрут – это адрес, по которому отправляется ваш запрос. Его структура примерно следующая:

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

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

Для понимания того, какие именно пути вам доступны, вам следует просмотреть документацию. К примеру, предположим, вы хотите получить список репозиториев для конкретного пользователя на Git. Согласно документации, вы можете использовать следующий путь для этого:

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

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

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Последняя часть маршрута – это параметры запроса. Технически запросы не являются частью REST-архитектуры, но на практике сейчас все строится на них. Так что давайте поговорим о них более детально. Параметры запроса позволяют использовать в запросе наборы пар «ключ-значение». Они всегда начинаются знаком вопроса. Каждая пара параметров после чего разделяется амперсантом (что-то вроде этого):

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Как только вы пытаетесь получить список репозиториев для пользователя, вы добавляете эти три опциональных параметра и после чего получаете следующий результат:

Тема связана со специальностями:

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Если же вы желаете получить список моих недавно запушеных репозиториев, вам следует ввести следующее:

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Итак, как же понять, что маршруты рабочие? Что ж, пришло время проверить их на практике!

Тестирование при помощи Curl

Вы моете отправить запрос при помощи любого языка программирования. JavaScript может использовать методы вроде Fetch API или JQuery`s Ajax Method. Руби использует другое. И так далее.

В этой статье я буду использовать такую утилитку, как Curl. Дело в том, что она указана в официальной документации для веб-сервисов. Если вы поймете, как использовать эту утилиту, вы поймете, как работать с API. После чего вы можете производить запросы любым удобным для вас языком.

Перед тем, как продолжить, вам следует убедится, что Curl установлен на вашей машине.

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Ели же он не установлен, самое время установить. В таком случае вы получите ошибку «command not found».

Для того, чтобы использовать утилиту, необходимо ввести следующее (по примеру):

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

И как только вы подтверждаете ввод, вы получаете ответ (наподобие этого):

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Чтобы получить список пользовательских репозиториев, вам следует изменить запрос по тому же принципу, который был оговорен ранее. К примеру, чтобы получить список моих репозиториев, вам следует ввести следующее:

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

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

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Также попробуйте другие команды и произведите запросы! В результате вы получаете похожие ответы.

JSON

JSON – JavaScript Object Notation – общий формат для отправки и приема данных посредством REST API. Ответ, отправляемый Github, также содержится в формате JSON.

Содержание объекта этого формата примерно следующее:

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Возвращаемся к анатомии запроса

Теперь же давайте попробуем разобраться с остальным.

Тип метода

GET – используется для получения со стороны севера определенного ресурса. Если вы производите этот запрос, сервер ищет информацию и отправляет ее вам назад. По сути, он производит операцию чтения на сервере. Дефолтный тип запросов.

POST – нужен для создания определенного ресурса на сервере. Сервер создает в базе данных новую сущность и оповещает вас, был ли процесс создания успешным. По сути, это операция создания.

PUT и PATCH – используются для обновления определенной информации на сервере. В таком случае сервер просто изменяет информацию существующих сущностей в базе данных и оповещает об успехе выполнения операции.

DELETE – как и следует из названия, удаляет указанную сущность из базы или сигнализирует об ошибке, если такой сущности в базе не было.

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

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

GET запрос в этом случае необходим, чтобы получить список всех репозиториев указанного пользователя. Также можно использовать curl:

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Попробуйте отправить этот запрос. В качестве ответа вы получите требование об аутентификации.

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Заголовки

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

Видео курсы по схожей тематике:

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

SQL Базовый. Разбор ДЗ

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Практикум курса C# Стартовый на примерах из GTA 5

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Выполнение домашнего задания по курсу C# Стартовый

Заголовки представляют из себя пары ключей-значений. Пример:

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Также пример с использованием curl:

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

(Примечание: заголовок Content-Type в случае Github для работы не является обязательным. Это всего лишь пример использования заголовка в запросе, ничего более.)

Для просмотра отправленных заголовком можно использовать следующее:

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Здесь звездочка относится к дополнительной информации, предоставленной посредством curl. > относится к заголовкам запроса, а Ярослав Вовченко

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Как стать программистом?

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Кто есть кто в IT компании. Структуры и роли.

К примеру, Твиттер использует первый метод. На момент написания версия Твиттер API была 1.1.

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

С другой стороны, GitHub использует другой способ:

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

В заключение

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

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

Автор перевода: Евгений Лукашук

Еще больше материалов по данной теме:

Источник

Автоматизация Для Самых Маленьких. Заметки. RESTful API

Эта статья — одна из обещанных коротких заметок по ходу цикла статей Автоматизация Для Самых Маленьких.
Поскольку основным способом взаимодействия с IPAM-системой будет RESTful API, я решил рассказать о нём отдельно.

Воздаю хвалы архитекторам современного мира — у нас есть стандартизированные интерфейсы. Да их много — это минус, но они есть — это плюс.

Эти интерфейсы взаимодействия обрели имя API — Application Programming Interface.

Одним из таких интерфейсов является RESTful API, который и используется для работы с NetBox.

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

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

Например, в случае NetBox, добавить новое устройство в него можно следующими способами: через веб-браузер, отправив curl’ом запрос в консоли, использовать Postman, обратиться к библиотеке requests в питоне, воспользоваться SDK pynetbox или перейти в Swagger.

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

Содержание

REST, RESTful, API

Ниже я дам очень упрощённое описание того, что такое REST.

Начнём с того, что RESTful API — это именно интерфейс взаимодействия, основанный на REST, в то время как сам REST (REpresentational State Transfer) — это набор ограничений, используемых для создания WEB-сервисов.

О каких именно ограничениях идёт речь, можно почитать в главе 5 диссертации Роя Филдинга Architectural Styles and the Design of Network-based Software Architectures. Мне же позвольте привести только три наиболее значимых (с моей точки зрения) из них:

А API, который предоставляют RESTful WEB-сервисы, называется RESTful API.

REST — не протокол, а, так называемый, стиль архитектуры (один из). Развиваемому вместе с HTTP Роем Филдингом, REST’у было предназначено использовать HTTP 1.1, в качестве транспорта.

Адрес назначения (или иным словом — объект, или ещё иным — эндпоинт) — это привычный нам URI.

Формат передаваемых данных — XML или JSON.

Для этой серии статей на linkmeup развёрнута read-only (для вас, дорогие, читатели) инсталляция NetBox: netbox.linkmeup.ru:45127.

На чтение права не требуются, но если хочется попробовать читать с токеном, то можно воспользоваться этим: API Token: 90a22967d0bc4bdcd8ca47ec490bbf0b0cb2d9c8.

Давайте интереса ради сделаем один запрос:

То есть утилитой curl мы делаем GET объекта по адресу netbox.linkmeup.ru:45127/api/dcim/devices/1/ с ответом в формате JSON и отступом в 4 пробела.

Или чуть более академически: GET возвращает типизированный объект devices, являющийся параметром объекта DCIM.

Этот запрос можете выполнить и вы — просто скопируйте себе в терминал.

URL, к которому мы обращаемся в запросе, называется Endpoint. В некотором смысле это конечный объект, с которым мы будем взаимодействовать.
Например, в случае netbox’а список всех endpoint’ов можно получить тут.

И ещё обратите внимание на знак / в конце URL — он обязателен.

Вот что мы получим в ответ:

Это JSON (как мы и просили), описывающий device с ID 1: как называется, с какой ролью, какой модели, где стоит итд.

Так будет выглядеть HTTP-запрос:

Так будет выглядеть ответ:

А теперь разберёмся, что же мы натворили.

Структура сообщений HTTP

HTTP-сообщение состоит из трёх частей, только первая из которых является обязательной.

Стартовая строка

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

HTTP-Запрос

Метод определяет, какое действие клиент хочет совершить: получить данные, создать объект, обновить его, удалить.
URI — идентификатор ресурса, куда клиент обращается или иными словами путь к ресурсу/документу.
HTTP_VERSION — соответственно версия HTTP. На сегодняшний день для REST это всегда 1.1.

HTTP-Ответ

HTTP_VERSION — версия HTTP (1.1).
STATUS_CODE — три цифры кода состояния (200, 404, 502 итд)
REASON_PHRASE — Пояснение (OK, NOT FOUND, BAD GATEWAY итд)

Заголовки

В заголовках передаются параметры данной HTTP-транзакции.

Например, в примере выше в HTTP-запросе это были:

Тело HTTP-сообщения

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

В HTTP-ответе это может быть HTML-страничка, или в нашем случае JSON-объект.

Между заголовками и телом должна быть как минимум одна пустая строка.

При использовании метода GET в HTTP-запросе обычно никакого тела нет, потому что передавать нечего. Но тело есть в HTTP-ответе.

А вот например, при POST уже и в запросе будет тело. Давайте о методах и поговорим теперь.

Методы

Как вы уже поняли, для работы с WEB-сервисами HTTP использует методы. То же самое касается и RESTful API.

Возможные сценарии в реальной жизни описываются термином CRUD — Create, Read, Update, Delete.
Вот список наиболее популярных методов HTTP, реализующих CRUD:

Давайте на примере NetBox разберёмся с каждым из них.

HTTP GET

Это метод для получения информации.

Так, например, мы забираем список устройств:

Метод GET безопасный (safe), поскольку не меняет данные, а только запрашивает.

Он идемпотентный с той точки зрения, что один и тот же запрос всегда возвращает одинаковый результат (до тех пор, пока сами данные не поменялись).

На GET сервер возвращает сообщение с HTTP-кодом и телом ответа (response code и response body).

То есть если всё OK, то код ответа — 200 (OK).
Если URL не найден — 404 (NOT FOUND).
Если что-то не так с самим сервером или компонентами, это может быть 500 (SERVER ERROR) или 502 (BAD GATEWAY).
Все возможные коды ответов.

Тело возвращается в формате JSON или XML.

Давайте ещё пару примеров. Теперь мы запросим информацию по конкретному устройству по его имени.

Здесь, чтобы задать условия поиска в URI я ещё указал атритбут объекта (параметр name и его значение mlg-leaf-0). Как вы можете видеть, перед условием и после слэша идёт знак «?», а имя и значение разделяются знаком «=».

Так выглядит запрос.

Если нужно задать пару условий, то запрос будет выглядеть так:

Здесь мы запросили все устройства с ролью leaf, расположенные на сайте mlg.
То есть два условия отделяются друг от друга знаком «&».

Из любопытного и приятного — если через «&» задать два условия с одним именем, то между ними будет на самом деле не логическое «И», а логическое «ИЛИ».

То есть вот такой запрос и в самом деле вернёт два объекта: mlg-leaf-0 и mlg-spine-0

Попробуем обратиться к несуществующему URL.

HTTP POST

POST используется для создания нового объекта в наборе объектов. Или более сложным языком: для создания нового подчинённого ресурса.

Уточнение от arthuriantech:
Включая, но не ограничиваясь. Метод POST предназначен для передачи данных на сервер с целью дальнейшей обработки — он используется для любых действий, которые не нужно стандартизировать в рамках HTTP. До RFC 5789 он был единственным легальным способом вносить частичные изменения.
roy.gbiv.com/untangled/2009/it-is-okay-to-use-post
tools.ietf.org/html/rfc7231#section-4.3.3

То есть, если есть набор devices, то POST позволяет создать новый объект device внутри devices.

Выберем тот же Endpoint и с помощью POST создадим новое устройство.

Здесь уже появляется заголовок Authorization, содержащий токен, который авторизует запрос на запись, а после директивы -d расположен JSON с параметрами создаваемого устройства:

Запрос у вас не сработает, потому что Токен уже не валиден — не пытайтесь записать в NetBox.

В ответ приходит HTTP-ответ с кодом 201 (CREATED) и JSON’ом в теле сообщения, где сервер возвращает все параметры о созданном устройстве.

Теперь новым запросом с методом GET можно его увидеть в выдаче:

«q» в NetBox’е позволяет найти все объекты, содержащие в своём названии строку, идущую дальше.

POST, очевидно, не является ни безопасным, ни идемпотентным — он наверняка меняет данные, и дважды выполненный запрос приведёт или к созданию второго такого же объекта, или к ошибке.

HTTP PUT

Это метод для изменения существующего объекта. Endpoint для PUT выглядит иначе, чем для POST — в нём теперь содержится конкретный объект.

PUT может возвращать коды 201 или 200.

Важный момент с этим методом: нужно передавать все обязательные атрибуты, поскольку PUT замещает собой старый объект.

Поэтому, если например, просто попытаться добавить атрибут asset_tag нашему новому устройству, то получим ошибку:

Но если добавить недостающие поля, то всё сработает:

Обратите внимание на URL здесь — теперь он включает ID устройства, которое мы хотим менять (18).

HTTP PATCH

Этот метод используется для частичного изменения ресурса.
WAT? Спросите вы, а как же PUT?

PUT — изначально существовавший в стандарте метод, предполагающий полную замену изменяемого объекта. Соответственно в методе PUT, как я и писал выше, придётся указать даже те атрибуты объекта, которые не меняются.

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

Здесь также в URL указан ID устройства, но для изменения только один атрибут serial.

HTTP DELETE

Очевидно, удаляет объект.

Метод DELETE идемпотентен с той точки зрения, что повторно выполненный запрос уже ничего не меняет в списке ресурсов (но вернёт код 404 (NOT FOUND).

Способы работы с RESTful API

Curl — это, конечно, очень удобно для доблестных воинов CLI, но есть инструменты получше.

Postman

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

Кроме того запросы и URI можно сохранять и возвращаться к ним позже.

Так мы можем сделать GET:

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами
Здесь указан Token в GET только для примера.

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Postman служит только для работы с RESTful API.

Например, не пытайтесь через него отправить NETCONF XML, как это делал я на заре своей автоматизационной карьеры.

Один из приятных бонусов специфицированного API в том, что вы можете в Postman импортировать все эндпоинты и их методы как коллекцию.

Для этого в окне Import (File->Import) выберите Import From Link и вставьте в окно URL netbox.linkmeup.ru:45127/api/docs/?format=openapi.

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Далее, всё, что только можно, вы найдёте в коллекциях.

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

Python+requests

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

Например, система генерации конфигурации захочет забрать список IP-интерфейсов из NetBox.
В Python есть чудесная библиотека requests, которая реализует работу через HTTP.
Пример запроса списка всех устройств:

Снова добавим новое устройство:

Python+NetBox SDK

В случае NetBox есть также Python SDK — Pynetbox, который представляет все Endpoint’ы NetBox в виде объекта и его атрибутов, делая за вас всю грязную работу по формированию URI и парсингу ответа, хотя и не бесплатно, конечно.

Например, сделаем то же, что и выше, использую pynetbox.
Список всех устройств:

Добавить новое устройство:

SWAGGER

За что ещё стоит поблагодарить ушедшее десятилетие, так это за спецификации API. Если вы перейдёте по этому пути, то попадёте в Swagger UI — документацию по API Netbox.

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

На этой странице перечислены все Endpoint’ы, методы работы с ними, возможные параметры и атрибуты и указано, какие из них обязательны. Кроме того описаны ожидаемые ответы.

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

На этой же странице можно выполнять интерактивные запросы, кликнув на Try it out.

По какой-от причине swagger в качестве Base URL берёт имя сервера без порта, поэтому функция Try it out не работает в моих примерах со Swagger’ом. Но вы можете попробовать это на собственной инсталляции.

При нажатии на Execute Swagger UI сформирует строку curl, с помощью которой можно аналогичный запрос сделать из командной строки.

В Swagger UI можно даже создать объект:

что такое rest api простыми словами. Смотреть фото что такое rest api простыми словами. Смотреть картинку что такое rest api простыми словами. Картинка про что такое rest api простыми словами. Фото что такое rest api простыми словами

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

То, что мы видим на этой странице — это Swagger UI — документация, сгенерированная на основе спецификации API.

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

Поэтому разработчики сегодня всё чаще следуют парадигме API First, когда сначала задумываются об API, а уже потом о реализации.
В этом дизайне сначала специфицируется API, а затем из него генерируются документация, клиентское приложение, серверная часть и необходимы тесты.

Swagger — это фреймворк и язык спецификации (который ныне переименован в OpenAPI 2.0), позволяющие реализовать эту задачу.
Углубляться в него я не буду.

За бо́льшими деталями сюда:

Критика REST и альтернативы

Существует и такая, да. Не всё в том мире 2000-го года так уже радужно.

Не являясь экспертом, не берусь предметно раскрывать вопрос, но дам ссылку на небесспорную статью на Хабре.

Альтернативным интерфейсом взаимодействия компонентов системы сегодня является gRPC. Ему же пророчат большое будущее на ниве новых подходов к работе с сетевым оборудованием. Но о нём мы поговорим когда-то в будущем, когда придёт его черёд.

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

Важно
Токен a9aae70d65c928a554f9a038b9d4703a1583594f был использован только в демонстрационных целях и больше не работает.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *