Ответ
Основные HTTP методы, их назначение и свойства:
Безопасные (не изменяют состояние сервера):
- GET — запрос данных. Идемпотентный.
- HEAD — аналогичен GET, но возвращает только заголовки. Идемпотентный.
- OPTIONS — запрос поддерживаемых методов для ресурса. Идемпотентный.
Небезопасные (изменяют состояние):
- POST — создание ресурса. Не идемпотентный.
- PUT — полное обновление или создание ресурса с известным URI. Идемпотентный.
- PATCH — частичное обновление ресурса. Не идемпотентный.
- DELETE — удаление ресурса. Идемпотентный.
Почему важно различать идемпотентность? Повторный вызов идемпотентного метода (GET, PUT, DELETE) не должен приводить к разным результатам на стороне сервера. Это критично для надежности и автоматических повторов запросов.
Пример на Swift (URLSession):
let url = URL(string: "https://api.example.com/users/1")!
var request = URLRequest(url: url)
request.httpMethod = "PUT" // Идемпотентное обновление
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let userData = ["name": "Alice"]
request.httpBody = try? JSONSerialization.data(withJSONObject: userData)