Перейти до основного вмісту

Основні методи HTTP

Ідемпотентність

Властивість об'єкта або операції при повторному застосуванні операції до об'єкта давати той самий результат, як і за першому. Приклади:

  • додавання з нулем: a=a+0=(a+0)+0=((a+0)+0)+0=...
  • множення на одиницю: x = x*1 = (x*1)*1 = ((x*1)*1)*1 = ...;

З точки зору служби RESTful, щоб операція була ідемпотентна, клієнти можуть здійснювати один і той же виклик кілька разів, здійснюючи той самий результат, працюючи як "сеттер" метод мовою програмування. Іншими словами, створення кількох однакових запитів має той самий ефект як і відправка одного запиту. Хоча ідемпотентні операції роблять один і той же результат на сервері, сама відповідь може відрізнятися тобто стан ресурсу може змінитися між запитами.

Основні або найчастіше використовувані HTTP-методи GET/POST/PUT/DELETE

  • GET запитує уявлення ресурсу. Запити з використанням цього методу можуть лише витягувати дані.

  • POST використовується для надсилання сутностей до певного ресурсу. Викликає зміну стану та побічні ефекти на сервері, оскільки найчастіше створює новий ресурс за надісланим уявленням

  • PUT замінює ресурс поточним поданням запиту

  • DELETE видаляє вказаний ресурс.

  • PATCH використовується для часткової зміни ресурсу

HTTP метод GET

Використовується для отримання (або читання) представлення ресурсу. В разі успішної адреси, метод GET повертається представлення ресурсу у форматі XML або JSON у поєднанні з кодом стану HTTP 200 (OK). У разі невдачі повертається код 404 (NOT FOUND) або 400 (BAD REQUEST). Є безпечним (Ідемопотентним) методом. Це означає, що він призначений лише для отримання інформації та не повинен змінювати стан сервера або мати побічні ефекти.

HTTP метод POST

Запит часто використовується для створення нових ресурсів. На практиці він також використовується для створення вкладених ресурсів. При створенні нового ресурсу, POST запит надсилає уявлення, а сервіс бере на себе відповідальність призначення нового ресурсу ID тощо. За успішного створення ресурсу повертається HTTP код 201 Create, а також може бути встановлений заголовок Location з адресою створеного ресурсу. Метод POST не є безпечним або ідемпотентним запитом оскільки відбувається побічний ефект - створення ресурсу.

HTTP метод PUT (PATCH)

Зазвичай використовується оновлення ресурсу. Тіло запиту під час відправлення PUT-запит до існуючого ресурсу URL повинен містити оновлені дані оригінального ресурсу (повністю, або лише оновлювану частину - PATCH). При успішному оновленні повертається код 200 (або 204 якщо не був переданий будь-який контент у тілі відповіді). Метод PUT вважається небезпечною операцією, так як у процесі виконання відбувається модифікація (або створення) екземплярів ресурсу на стороні сервера, але це метод ідемпотентен. Іншими словами, створення або оновлення ресурсу за допомогою надсилання PUT запиту - ресурс не зникне, розташовуватиметься там же, де і був

HTTP метод DELETE

Використовується для видалення ресурсу, ідентифікованого конкретним URL (ID). При успішному видаленні ресурсу повертається код 200 (OK) HTTP, спільно з тілом відповіді, що містить дані віддаленого ресурсу. Також можливе використання HTTP коду 204 (NO CONTENT) без тіла відповіді. Відповідно до специфікації HTTP, метод DELETE ідемпотентний. Якщо ви виконуєте DELETE запит до ресурсу, він видаляється. Повторний DELETE запит до ресурсу закінчиться також: ресурс видалено.

Коди відповіді HTTP

Як видно, будь-яка відповідь від сервера має вказувати код стану HTTP. Він показує, чи успішно виконано певний HTTP запит. Коди поділяються на п'ять груп:

  1. Інформаційні 100 - 199
  100: Continue
  1. Успішні 200 - 299
  200: OK
201: Created
202: Accepted
204: No Content
  1. Перенаправлення 300 - 399
  301: Moved Permanently
307: Temporary Redirect
  1. Клієнтські помилки 400 - 499
  400: Bad Request
401: Unauthorized
403: Forbidden
404: Not Found
  1. Серверні помилки 500 - 599
  500: Internal Server Error
501: Not Implemented
502: Bad Gateway
503: Service Unavailable
504: Gateway Timeout

Докладніше почитайте у стандарті RFC 2616 або простіше MDN