Карьера аналитика
@analytics_career
Методы в HTTP: инструкция к применению.
Последние четыре больших поста были посвящены асинхронным интеграциям. Пришло время вернуться к теории и практике по синхронным интеграциям, потому что им было уделено не очень много внимания.
На данный момент мы уже знаем, что такое REST (часть 1 и часть 2) и на небольшом примере рассмотрели как выглядит описание простейшего метода.
Как мы знаем, REST сам по себе базируется на HTTP-протоколе и полностью переиспользует его методы. Поэтому сегодня рассмотрим то, какие методы есть в HTTP, за что они отвечают.
Всего есть 6 методов, но один из них я никогда на практике не встречал:
1️⃣ GET
Запрашивает содержимое конкретного ресурса, получает данные и никак не изменяет их. Самый простейший и, наверно, самый часто используемый метод, потому что нам постоянно нужно получать информацию о каком-либо объекте, чтобы с ним дальше работать.
2️⃣ HEAD
Похож на GET, но не возвращает тело ответа, а только стартовую строку и заголовки. Используется для получения метаданных, а также проверки и валидации ресурса.
Вот его я на практике ни разу не встречал, но его функция достаточно логична - вполне представляю, как его можно использовать. Например, если необходимо проверить - что нужный нам ресурс вообще существует.
3️⃣ POST
Создает новый ресурс из переданных данных в запросе - это его основная функция.
Но на самом деле он может использоваться вообще для любой цели, т.е. им можно и запрашивать объекты, и обновлять их, и удалять - самый универсальный метод. В каких случаях это используется я расскажу позже.
4️⃣ PUT
Изменяет содержимое ресурса по-указанному URI. PUT полностью заменяет существующую сущность.
Метод нужно использовать аккуратно, потому что если у нас есть объект состоящий из 5 полей (фамилия, имя, отчество, дата рождения и пол), допустим - то если поменялось только поле "Отчество" и передать на вход методу PUT только его - все остальные поля перезапишутся и у объекта будет заполнено поле "Отчество", а все остальные поля будут = NULL.
Поэтому даже если изменилось только несколько полей - нужно передавать объект целиком.
5️⃣ PATCH
Похож на PUT, но применяется только к фрагменту ресурса (заменяет точечно только часть ресурса).
Казалось бы - почему тогда не использовать только этот метод и забыть про PUT? Однако, метод PATCH тяжелее в реализации и куда проще запилить PUT, просто передавать правильно объект. Да, это приведет к увеличению трафика, но будет намного дешевле в реализации. Поэтому этот метод используется редко.
6️⃣ DELETE
Удаляет конкретный ресурс по-указанному URI.
Тут добавить нечего - у метода одна конкретная цель.
Все вышеперечисленные методы можно разделить на три группы:
1. Безопасные (GET, HEAD) — не изменяют данные, их можно выполнять в любой последовательности;
2. Идемпотентные (GET, HEAD, PUT, DELETE) — при повторном выполнении результаты будут ожидаемо одинаковыми;
3. Неидемпотентные (POST, PATCH) — при повторном выполнении результаты будут разными, если, например, отправить POST-запрос на создание элемента несколько раз подряд, то он может создать несколько элементов с одинаковыми данными.
Примечание: PATCH может быть как идемпотентным, так и нет, в зависимости от его реализации.
Последние четыре больших поста были посвящены асинхронным интеграциям. Пришло время вернуться к теории и практике по синхронным интеграциям, потому что им было уделено не очень много внимания.
На данный момент мы уже знаем, что такое REST (часть 1 и часть 2) и на небольшом примере рассмотрели как выглядит описание простейшего метода.
Как мы знаем, REST сам по себе базируется на HTTP-протоколе и полностью переиспользует его методы. Поэтому сегодня рассмотрим то, какие методы есть в HTTP, за что они отвечают.
Всего есть 6 методов, но один из них я никогда на практике не встречал:
1️⃣ GET
Запрашивает содержимое конкретного ресурса, получает данные и никак не изменяет их. Самый простейший и, наверно, самый часто используемый метод, потому что нам постоянно нужно получать информацию о каком-либо объекте, чтобы с ним дальше работать.
2️⃣ HEAD
Похож на GET, но не возвращает тело ответа, а только стартовую строку и заголовки. Используется для получения метаданных, а также проверки и валидации ресурса.
Вот его я на практике ни разу не встречал, но его функция достаточно логична - вполне представляю, как его можно использовать. Например, если необходимо проверить - что нужный нам ресурс вообще существует.
3️⃣ POST
Создает новый ресурс из переданных данных в запросе - это его основная функция.
Но на самом деле он может использоваться вообще для любой цели, т.е. им можно и запрашивать объекты, и обновлять их, и удалять - самый универсальный метод. В каких случаях это используется я расскажу позже.
4️⃣ PUT
Изменяет содержимое ресурса по-указанному URI. PUT полностью заменяет существующую сущность.
Метод нужно использовать аккуратно, потому что если у нас есть объект состоящий из 5 полей (фамилия, имя, отчество, дата рождения и пол), допустим - то если поменялось только поле "Отчество" и передать на вход методу PUT только его - все остальные поля перезапишутся и у объекта будет заполнено поле "Отчество", а все остальные поля будут = NULL.
Поэтому даже если изменилось только несколько полей - нужно передавать объект целиком.
5️⃣ PATCH
Похож на PUT, но применяется только к фрагменту ресурса (заменяет точечно только часть ресурса).
Казалось бы - почему тогда не использовать только этот метод и забыть про PUT? Однако, метод PATCH тяжелее в реализации и куда проще запилить PUT, просто передавать правильно объект. Да, это приведет к увеличению трафика, но будет намного дешевле в реализации. Поэтому этот метод используется редко.
6️⃣ DELETE
Удаляет конкретный ресурс по-указанному URI.
Тут добавить нечего - у метода одна конкретная цель.
Все вышеперечисленные методы можно разделить на три группы:
1. Безопасные (GET, HEAD) — не изменяют данные, их можно выполнять в любой последовательности;
2. Идемпотентные (GET, HEAD, PUT, DELETE) — при повторном выполнении результаты будут ожидаемо одинаковыми;
3. Неидемпотентные (POST, PATCH) — при повторном выполнении результаты будут разными, если, например, отправить POST-запрос на создание элемента несколько раз подряд, то он может создать несколько элементов с одинаковыми данными.
Примечание: PATCH может быть как идемпотентным, так и нет, в зависимости от его реализации.
🔥 11
❤ 3
👍 3
21 1.8K
Обсуждение 0
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram