Request():patch()
Thực thi một yêu cầu PATCH và trả về một đối tượng Response. Phương thức này được dùng để cập nhật một phần tài nguyên trên máy chủ.
Khai báo
patch(): Response
Trả về
Response - Đối tượng phản hồi chứa kết quả từ máy chủ
Mô tả
Phương thức patch() gửi một yêu cầu HTTP PATCH đến URL được chỉ định khi tạo đối tượng Request. Yêu cầu PATCH thường được dùng để cập nhật một phần tài nguyên hiện có, chỉ thay đổi các trường được cung cấp trong phần thân yêu cầu (request body).
Sử dụng setParameter() để thêm dữ liệu vào phần thân yêu cầu trước khi gọi patch().
Ví dụ
Yêu cầu PATCH cơ bản
-- Chỉ cập nhật trường email của một người dùng
local response = Request("https://api.example.com/users/123")
:setParameter("email", "newemail@example.com")
:patch()
Yêu cầu PATCH với JSON Headers
-- Cập nhật một phần bài đăng với nhiều trường
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()
Xử lý phản hồi PATCH
-- Cập nhật hồ sơ người dùng và xử lý phản hồi
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("Người dùng đã được cập nhật thành công!")
print("Dữ liệu đã cập nhật: " .. data)
elseif statusCode == 204 then
print("Người dùng đã được cập nhật thành công! (Không có nội dung trả về)")
else
print("Cập nhật người dùng thất bại. Mã trạng thái: " .. statusCode)
end
Cập nhật PATCH có điều kiện
-- Chỉ cập nhật nếu tài nguyên chưa bị thay đổi
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("Cập nhật thất bại: Tài nguyên đã bị người dùng khác thay đổi")
elseif status == 200 or status == 204 then
print("Bài viết đã được cập nhật thành công")
end
PATCH với chọn trường cụ thể
-- Cập nhật các trường cụ thể và để nguyên các trường khác
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("Sản phẩm đã được cập nhật: " .. updatedProduct)
Lưu ý
- Sử dụng
setParameter()để thêm dữ liệu vào phần thân yêu cầu trước khi gọipatch() - Yêu cầu PATCH chỉ nên chứa các trường bạn muốn cập nhật, chứ không phải toàn bộ tài nguyên
- PATCH khác với PUT ở chỗ PATCH thực hiện cập nhật một phần, trong khi PUT thay thế toàn bộ tài nguyên
- Các thao tác PATCH thành công thường trả về:
200 OKkèm tài nguyên đã cập nhật trong phần thân phản hồi204 No Contentnếu cập nhật thành công nhưng không cần phần thân phản hồi
- Phương thức trả về một đối tượng Response mà bạn có thể dùng để truy cập dữ liệu phản hồi và mã trạng thái
- Luôn kiểm tra mã trạng thái phản hồi để đảm bảo yêu cầu đã thành công
- Yêu cầu PATCH không nhất thiết idempotent - việc thực hiện cùng một yêu cầu nhiều lần có thể tạo ra các hiệu ứng khác nhau tùy thuộc vào cách triển khai