Перейти к основному содержимому

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-запросы не обязательно идемпотентны — повторение одного и того же запроса несколько раз может давать разные результаты в зависимости от реализации