🌐 Что такое API и CRUD простыми словами

Что такое API

API (Application Programming Interface) – это программный интерфейс. Он обеспечивает взаимодействие двух программ между собой и позволяет без особых усилий встраивать контент с любого сайта. Основной задачей API является создание связи между двумя приложениями. API позволяет отправлять запросы на передачу или получение информации. Взаимодействие осуществляется через JSON, а данные получаем в приложениях с помощью API-запросов. API-запрос включает в себя 4 компонента: endpoint (точка приема запроса), header (заголовок), method (метод) и data (данные). После вызова всех компонентов мы можем построить API-запрос.

CRUD-операции

CRUD-операции включают в себя 4 функции: Create (создание), Read (чтение), Update (редактирование) и Delete (удаление). Это основные методы работы с базами данных. Операции CRUD предназначены для редактирования данных программы. Давайте рассмотрим подробнее, что означает каждая операция:

  • GET – метод GET позволяет получить информацию из источника/базы данных.
  • POST – метод POST позволяет вносить информацию в источник/базу данных.
  • PUT – метод PUT позволяет обновлять существующую информацию в источнике/базе данных.
  • DELETE – метод DELETE удалять существующую информацию из источника/базы данных.

JSON

JSON (JavaScript Object Notation) используется для представления данных на сервере в текстовом формате. Он легко читается как людьми, так и машинами. Вот как выглядят данные в JSON:

Типы API

  • Open API – означает, что API находится в свободном доступе и открыт для всех.
  • Partner API – в данном случае происходит взаимодействие между сервером и клиентами.
  • Private API – защищенный API, может использоваться только для внутренних операций, например, платежей.

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

***

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

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

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

Источники

  • https://dev.to/iftakher_hossen/learn-about-api-1cae

Компьютерные сети от А до Я: классификация, стандарты и уровни

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

Разбираем по косточкам компьютерные сети: HTTP, TCP, REST

Большинство разговоров о компьютерных сетях сводится к набору аббревиатур: HTTP, TCP, REST. Разберёмся в том, как всё устроено.

8 книг по компьютерным сетям

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

CRUD | HTTP API

Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

В программировании часто используется аббревиатура CRUD. Она обозначает четыре базовых операции над информацией:

  • Создание
  • Чтение
  • Обновление
  • Удаление

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

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

Посмотрим на пример данных:

МетодURLОперация
GET/usersСписок пользователей
GET/users/1Информация о пользователе
POST/users/addДобавление пользователя
PATCH/users/1Обновление пользователя
DELETE/users/1Удаление пользователя

Как видите, в URL постоянно повторяется 1 — это идентификатор конкретного пользователя. Он будет меняться в зависимости от того, с каким пользователем мы работаем прямо сейчас.

Кстати, идентификатор необязательно должен быть числом. Здесь все зависит от того, что бэкенд считает идентификатором и как идентификаторы создаются в базе данных. Например, в MongoDB идентификатор состоит из чисел и букв.

Давайте вернемся к примеру выше и обратим внимание на использование методов HTTP. У методов есть определенный смысл:

  • GET нужен для извлечения данных
  • POST — для создания и отправки форм
  • PATCH — для обновления
  • DELETE — для удаления

При этом URL часто остается одним и тем же.

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

Кеширование — это такая техника, которая позволяет веб-серверу или прокси сохранить ответ от сервера и отдавать его при следующих запросах без обращения к самому серверу.

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

Методы POST, PATCH и DELETE кешировать нельзя — они должны постоянно приходить на сервер, так как они вносят изменения.

Добавление пользователя

Попробуем добавить пользователя. Для этого по документации Dummy JSON нам нужно отправить POST-запрос на эндпоинт https://dummyjson.com/users/add.

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

  1. Указать заголовок Content-Type со значением application/json
  2. Преобразовать данные в JSON

В итоге запрос будет выглядеть так:

POST /users/add HTTP/1.1
HOST: dummyjson.com
Content-Length: 33
Content-Type: application/json
{ "firstName": "Nik", "age": 20 }

Есть несколько возможных вариантов ответа от сервера:

  • Код 201 – ресурс успешно создан
  • Код 422 – ошибка валидации
  • Код 406 – некорректные данные или неверный формат

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

Обновление пользователя

Для обновления пользователя мы должны отправить PATCH-запрос на эндпоинт https://dummyjson.com/users/{id}. Обновлять можно любой набор параметров, не обязательно сразу все:

PATCH /users/1 HTTP/1.1
HOST: dummyjson.com
Content-Length: 23
Content-Type: application/json
{ "firstName": "Nina" }

Если все прошло успешно, то возможны два варианта ответа:

  • Код 200 с какими-то данными — например, JSON с обновленными данными ресурса
  • Код 204 — нет тела ответа

Удаление пользователя

Для удаления пользователя мы должны отправить DELETE-запрос на эндпоинт https://dummyjson.com/users/{id}. Тела запроса в таком случае нет, потому что все понятно из адреса запроса:

DELETE /users/1 HTTP/1.1
HOST: dummyjson.com

Если все прошло успешно, то возможны два варианта ответа:

  • Код 200 и какие-то данные
  • Код 204 и пустое тело ответа

Идемпотентность

Когда мы работаем с API, очень важна идемпотентность запросов.

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

Для примера возьмем эндпоинт /users. Он возвращает список пользователей и ничего не меняет на сервере. Каждый новый вызов этого эндпоинта возвращает идентичный список пользователей — значит, это идемпотентный запрос.

Список пользователей может поменяться, если его меняют где-то в другом месте. Но даже это не поменяет идемпотентность GET-запроса на /users, ведь он сам ничего не меняет.

А вот POST-запрос — точно не идемпотентный. Каждый вызов

/users/add имеет два исхода:

  • Добавляет нового пользователя, хотя и с теми же самыми данными
  • Возвращает ошибку, если на сервере добавлена проверка на уникальность каких-то данных

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

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

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Электронная почта *

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Методы HTTP CRUD

В этом уроке мы обсудим функциональность CRUD и рассмотрим оставшиеся два метода HTTP: PATCH и DELETE. В совокупности функциональные возможности, предлагаемые полным набором методов HTTP (GET, POST, PATCH и DELETE), обычно обозначаются в отрасли как CRUD .

Методы HTTP-запроса


CRUD означает C reate R ead U pdate D elete 900 23 . По сути, это сокращение для полного списка того, что мы можем делать с объектами в программах MVC. Каждое из этих действий соответствует другому методу HTTP. Давайте рассмотрим каждую часть CRUD и обсудим метод HTTP, соответствующий каждому термину CRUD. Часть из этого будет обзором:

GET

Чтение Часть CRUD

GET запрашивает информацию с сервера, которая обычно отображается пользователям. ASP.NET включает метод HttpGet() для запросов GET.

POST

Create Часть CRUD

POST добавляет информацию о сервере. MVC имеет метод HttpPost() для запросов POST. Чтобы создать запросы POST, мы делаем три вещи:

  1. Добавляем метод атрибут post в HTML-форму.
  2. Добавьте атрибут действия с предполагаемым путем почтового запроса.
  3. Добавьте атрибут type submit к кнопке формы.

При отправке формы будет запущен запрос POST.

В MVC формы HTML без атрибута метода post вместо этого отправляются как запросы GET. Это распространенная ошибка!

PATCH

Обновление
Часть CRUD

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

Например, если мы обновляем подпись к фотографии, размещенной на Facebook, мы отправляем запрос PATCH. Фотография уже существует на их сервере, и мы просто обновляем один из атрибутов фотографии.

Вот удобный способ запомнить разницу между POST и PATCH:

  • ЗАПЛАТКА — это как залатать старые джинсы или любимое одеяло. (Популярный) предмет уже существует, мы просто его меняем.

  • POST похож на публикацию в социальных сетях. Эта фотография, твит или статус не существовали на их серверах, пока вы их не опубликовали. Вы делаете что-то новое!

УДАЛИТЬ

Удалить Часть CRUD

Как следует из названия, УДАЛИТЬ удаляет данные с сервера. Это тоже похоже на более конкретный запрос POST. Он не добавляет никакой новой информации, а просто удаляет указанные данные.

Визуальный справочник


Немного сбивает с толку то, что термины CRUD не соответствуют именам методов HTTP (кроме DELETE). Однако вскоре это станет второй натурой. А пока вот полезная ссылка:

Ограничения HTML-форм


Также важно понимать ограничения HTML-форм. Прежде всего, HTML-формы могут запускать только запросы GET и POST .

В какой-то момент ранние проекты HTML5-форм сделали поддерживают разные запросы. Любопытные могут посмотреть черновики из W3 здесь. (W3 — это консорциум World Wide Web. Они разрабатывают стандарты для HTML и Интернета в целом.) Но позже, перед выпуском HTML5, поддержка была прекращена.

Обход ограничений HTML в MVC

ASP.NET Core 6.0 действительно ли содержит методы HttpPut() и HttpDelete() для определения маршрутов для обработки этих запросов. Однако мы не можем активировать их с помощью форм. Даже кнопка, которая отправляет запрос, технически считается HTML-формой.

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

Поскольку HTML-формы выполняют только запросы GET и POST, мы должны использовать запросы POST для обновления и/или удаления записей. Это может показаться хакерским, но до тех пор, пока сам HTML не изменится, это отраслевой стандарт. Мы увидим, как это работает, в следующих нескольких уроках.

Что такое CRUD? | Codecademy

Создание, чтение, обновление, удаление

Когда мы создаем API, мы хотим, чтобы наши модели предоставляли четыре основных типа функций. Модель должна иметь возможность создавать, читать, обновлять и удалять ресурсы. Ученые-компьютерщики часто называют эти функции аббревиатурой CRUD. Чтобы модель была полной, она должна иметь возможность выполнять не более этих четырех функций. Если действие не может быть описано ни одной из этих четырех операций, то потенциально оно должно быть собственной моделью.

Парадигма CRUD распространена при создании веб-приложений, поскольку она обеспечивает запоминающуюся основу для напоминания разработчикам о том, как создавать полные, пригодные для использования модели. Например, давайте представим систему для отслеживания библиотечных книг. Мы можем представить себе, что в этой гипотетической библиотечной базе данных будет книги ресурсов, в которых будет храниться книги объектов. Допустим, объект book выглядит так:

 «книга»: {
  "id": <Целое>,
  «заголовок»: ,
  «автор»: ,
  «isbn»: <Целое>
} 

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

Создать — это будет состоять из функции, которую мы будем вызывать при добавлении новой библиотечной книги в каталог. . Программа, вызывающая функцию, предоставит значения для «название» , «автор» и «ISBN» . После вызова этой функции в ресурсе books должна появиться новая запись, соответствующая этой новой книге. Кроме того, новой записи присваивается уникальный id , который можно использовать для доступа к этому ресурсу позже.

Чтение — будет состоять из функции, которая будет вызываться для просмотра всех книг, находящихся в настоящее время в каталоге. Этот вызов функции не изменит книги в каталоге — он просто извлечет ресурс и отобразит результаты. У нас также была бы функция для получения одной книги, для которой мы могли бы указать название, автора или ISBN. Опять же, эта книга не будет изменена, только восстановлена.

Обновление — Должна быть функция для вызова, когда информация о книге должна быть изменена. Программа, вызывающая функцию, предоставит новые значения для «название» , «автор» и «ISBN» . После вызова функции соответствующая запись в ресурсе books будет содержать новые предоставленные поля.

Удалить — Должна быть функция для удаления библиотечной книги из каталога. Программа, вызывающая функцию, должна предоставить одно или несколько значений ( «название» , «автор» и/или «isbn» ) для идентификации книги, а затем эта книга будет удалена из списка 9.0034 книги ресурсов. После вызова этой функции ресурс books должен содержать все книги, которые у него были до этого, кроме только что удаленной.

CRUD и REST

В среде REST CRUD часто соответствует HTTP-методам POST, GET, PUT и DELETE соответственно. Это основные элементы системы постоянного хранения.

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

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

Create

Для создания ресурсов в среде REST мы чаще всего используем метод HTTP POST. POST создает новый ресурс указанного типа ресурса.

Например, давайте представим, что мы добавляем новый продукт в сохраненный список блюд для этого ресторана, и блюдо объектов хранятся в ресурсе блюд . Если бы мы хотели создать новый элемент, мы бы использовали запрос POST:

Request:

 POST http://www.myrestaurant.com/dishes/ 

Body —

 {
  "блюдо": {
    "name": "Тост с авокадо",
    "цена": 8
  }
} 

Это создает новый элемент с именем значением «Тост с авокадо» и ценой значением 8. После успешного создания сервер должен вернуть заголовок со ссылкой на вновь созданный ресурс, вместе с кодом ответа HTTP 201 (СОЗДАНО).

Ответ:

Код состояния — 201 (СОЗДАНО)

Тело —

 {
  "блюдо": {
    "идентификатор": 1223,
    "name": "Тост с авокадо",
    "цена": 8
  }
} 

Из этого ответа мы видим, что блюдо с именем «Тост с авокадо» и ценой 8 было успешно создано и добавлено к ресурсу блюд .

Чтение

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

GET можно использовать для чтения всего списка элементов:

Запрос:

 GET http://www.myrestaurant.com/dishes/ 

Ответ: Код состояния — 200 (ОК)

Тело —

 {
  "тарелки": [
    {
      "идентификатор": 1,
      "name": "Роллы с начинкой",
      "цена": 6
    },
    {
      "идентификатор": 2,
      "name": "Палочки с моцареллой",
      "цена": 7
    },
    ...
    {
      "идентификатор": 1223,
      "name": "Тост с авокадо",
      "цена": 8
    },
    {
      "идентификатор": 1224,
      "name": "Мюсли и Йогурт",
      "цена": 5
    }
  ]
} 

GET-запросы также можно использовать для чтения определенного элемента, если в запросе указан его id : Код состояния — 200 (ОК)

Тело —

 {
  "идентификатор": 1223,
  "name": "Тост с авокадо",
  "цена": 8
} 

После этого запроса информация в базе данных не изменилась. Элемент с id 1223 был получен из ресурса блюд и не изменен. Если ошибок нет, GET вернет HTML или JSON нужного ресурса вместе с кодом ответа 200 (ОК). В случае ошибки чаще всего возвращается код ответа 404 (НЕ НАЙДЕНО).

Обновление

PUT — это метод HTTP, используемый для операции CRUD, Обновление.

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

Запрос:

 PUT http://www.myrestaurant.com/dishes/1223 

Кузов —

 {
  "блюдо": {
    "name": "Тост с авокадо",
    "цена": 10
  }
} 

Этот запрос должен изменить элемент с id 1223, чтобы атрибуты были указаны в теле запроса. это блюдо с id 1223 теперь по-прежнему должно иметь имя «Тост с авокадо», но значение цена теперь должно быть 10, тогда как раньше оно было 8.

Ответ: Код состояния — 200 (ОК)

Тело —

 {
  "блюдо": {
    "name": "Тост с авокадо",
    "цена": 10
  }
} 

Ответ включает код состояния 200 (ОК), означающий, что операция выполнена успешно. При желании ответ может использовать код состояния 204 (БЕЗ СОДЕРЖИМОГО) и не включать тело ответа. Это решение зависит от контекста.

Удалить

Операция CRUD Удалить соответствует HTTP-методу DELETE. Используется для удаления ресурса из системы.

Допустим, дефицит авокадо в мире достиг критической точки, и мы уже совсем не можем себе позволить подавать это современное лакомство. Мы должны войти в базу данных и удалить элемент, который соответствует «Тост с авокадо», который, как мы знаем, имеет идентификатор из 1223.

Запрос:

 УДАЛИТЬ http://www.myrestaurant.com/dishes/1223 

Такой вызов в случае успеха возвращает код ответа 204 (БЕЗ СОДЕРЖИМОГО) без тела ответа. Ресурс блюда больше не должен содержать объект блюдо с идентификатором 1223.

Ответ: Код состояния — 204 (БЕЗ СОДЕРЖИМОГО)

Тело — Нет

Вызов GET для ресурса блюд после этого вызова DELETE вернет исходный список блюд с {"id": 1223, "name": "Avocado". Toast», «price»: 10} запись удалена. Все остальные блюдо объекты в ресурсе блюда должны остаться без изменений. Если бы мы попытались вызвать GET для элемента с id 1223, который мы только что удалили, мы бы получили код ответа 404 (NOT FOUND), а состояние системы должно остаться неизменным.

Вызов DELETE для несуществующего ресурса не должен изменять состояние системы. Вызов должен возвращать код ответа 404 (НЕ НАЙДЕН) и ничего не делать.

Практика CRUD

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

 {
  "сорт": {
    "идентификатор": 1
    "name": "Чистая сила",
    «тренер»: «Бицепс Боб»,
    "длительность": 1,5
   }
} 

Все классы хранятся в ресурсе классов по адресу www.musclecademy.com/classes .

Для каждой операции CRUD запишите ответы на следующие вопросы:

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

Практические ответы CRUD

1) Создать

Маршрут : POST /classes

Влияние на базу данных : Добавляет класс, указанный в теле запроса, в базу данных

90 003 Тело ответа : { "класс" : Недавно созданный класс }

Код успешного ответа : 201

2) Чтение (все классы)

Маршрут : GET /classes

Влияние на базу данных : Нет

Тело ответа : { "классы": [ Массив всех сохраненных классов ] }

Код успешного ответа : 200

3) Чтение (один класс)

Маршрут : GET /classes/:id

900 03 Влияние на базу данных : Нет

Ответ Тело : { "класс": класс с указанным идентификатором }

Код успешного ответа : 200

4) Обновление

Маршрут : PUT /classes/:id

Влияние на базу данных : Обновляет класс с указанным идентификатором, чтобы информация о классе была предоставлена ​​в теле запроса

Тело ответа : { "класс": обновленный класс теперь сохранен в базе данных }

Код успешного ответа : 200

5) Удалить

Маршрут : УДАЛИТЬ /classes/:id

Влияние на базу данных : Удаляет класс с указанным идентификатором из базы данных

Тело ответа : Нет

Код успешного ответа : 204

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