Request():patch()
Выполняет PATCH-запрос и возвращает объект Response. Этот метод используется для частичного обновления ресурса на сервере.
Сигнатура
patch(): Response
Возвращаемое значение
Response — объект ответа, содержащий ответ сервера
Описание
Метод patch() отправляет HTTP PATCH-запрос на URL-адрес, указанный при создании объекта Request. PATCH-запросы обычно используются для частичного обновления существующих ресурсов, изменяя только те поля, которые указаны в теле запроса.
Используйте setParameter(), чтобы добавить данные в тело запроса перед вызовом patch().
Примеры
Базовый PATCH-запрос
-- Update only the email field of a user
local response = Request("https://api.example.com/users/123")
:setParameter("email", "newemail@example.com")
:patch()
PATCH-запрос с JSON-заголовками
-- Partially update a post with multiple fields
local response = Request("https://api.example.com/posts/456")
:setHeader("Content-Type", "application/json")
:setHeader("Authorization", "Bearer your-token-here")
:setParameter("title", "Updated Post Title")
:setParameter("status", "published")
:patch()
Обработка PATCH-ответа
-- Update user profile and handle response
local response = Request("https://api.example.com/users/789")
:setHeader("Content-Type", "application/json")
:setHeader("Authorization", "Bearer token123")
:setParameter("bio", "Updated bio information")
:setParameter("website", "https://mywebsite.com")
:patch()
local data = response:getData()
local statusCode = response:getResponseCode()
if statusCode == 200 then
print("User updated successfully!")
print("Updated data: " .. data)
elseif statusCode == 204 then
print("User updated successfully! (No content returned)")
else
print("Failed to update user. Status: " .. statusCode)
end
Условное PATCH-обновление
-- Update only if resource hasn't been modified
local response = Request("https://api.example.com/articles/123")
:setHeader("Content-Type", "application/json")
:setHeader("If-Match", "etag-value-here")
:setHeader("Authorization", "Bearer token")
:setParameter("content", "Updated article content")
:setParameter("lastModified", "2023-12-01")
:patch()
local status = response:getResponseCode()
if status == 412 then
print("Update failed: Resource has been modified by another user")
elseif status == 200 or status == 204 then
print("Article updated successfully")
end
PATCH с выбором полей
-- Update specific fields while leaving others unchanged
local response = Request("https://api.example.com/products/456")
:setHeader("Content-Type", "application/json")
:setParameter("price", "29.99")
:setParameter("stock", "150")
:setParameter("discount", "10")
:patch()
local updatedProduct = response:getData()
print("Product updated: " .. updatedProduct)
Примечания
- Используйте
setParameter(), чтобы добавить данные в тело запроса перед вызовомpatch() - PATCH-запросы должны содержать только те поля, которые вы хотите обновить, а не весь ресурс целиком
- PATCH отличается от PUT тем, что PATCH выполняет частичные обновления, тогда как PUT заменяет весь ресурс
- Успешные операции PATCH обычно возвращают:
200 OKс обновлённым ресурсом в теле ответа204 No Content, если обновление выполнено успешно, но тело ответа не требуется
- Метод возвращает объект Response, с помощью которого вы можете получить данные ответа и код состояния
- Всегда проверяйте код состояния ответа, чтобы убедиться в успешности запроса
- PATCH-запросы не обязательно идемпотентны — повторение одного и того же запроса несколько раз может давать разные результаты в зависимости от реализации