Chuyển tới nội dung chính

Request():put()

Thực thi một yêu cầu PUT và trả về một đối tượng Response. Phương thức này được dùng để thay thế hoàn toàn một tài nguyên trên máy chủ.

Khai báo

put(): 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 put() gửi một yêu cầu HTTP PUT đến URL được chỉ định khi tạo đối tượng Request. Yêu cầu PUT thường được dùng để thay thế hoàn toàn một tài nguyên hiện có bằng dữ liệu mới, hoặc để tạo một tài nguyên tại một URL cụ thể.

Sử dụng setParameter() để thêm dữ liệu vào phần thân yêu cầu (request body) trước khi gọi put().

Ví dụ

Yêu cầu PUT cơ bản

-- Thay thế toàn bộ dữ liệu của một người dùng
local response = Request("https://api.example.com/users/123")
:setParameter("name", "John Smith")
:setParameter("email", "john.smith@example.com")
:setParameter("age", "35")
:setParameter("status", "active")
:put()

Yêu cầu PUT với JSON Headers

-- Thay thế toàn bộ một bài đăng bằng nội dung mới
local response = Request("https://api.example.com/posts/456")
:setHeader("Content-Type", "application/json")
:setHeader("Authorization", "Bearer your-token-here")
:setParameter("title", "Completely New Title")
:setParameter("body", "Completely new post content")
:setParameter("userId", "1")
:setParameter("status", "published")
:put()

Xử lý phản hồi PUT

-- 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("name", "Jane Doe")
:setParameter("email", "jane.doe@example.com")
:setParameter("bio", "Software Developer")
:setParameter("website", "https://jane.example.com")
:setParameter("location", "San Francisco")
:put()

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 người dùng đã cập nhật: " .. data)
elseif statusCode == 201 then
print("Người dùng đã được tạo thành công!")
print("Dữ liệu người dùng mới: " .. data)
else
print("Cập nhật người dùng thất bại. Mã trạng thái: " .. statusCode)
end

PUT để tạo tài nguyên

-- Tạo một tài nguyên mới tại một URL cụ thể
local response = Request("https://api.example.com/files/document-v2")
:setHeader("Content-Type", "application/json")
:setParameter("content", "This is the new document content")
:setParameter("version", "2.0")
:setParameter("author", "John Doe")
:put()

local status = response:getResponseCode()
if status == 201 then
print("Tài liệu đã được tạo thành công!")
elseif status == 200 then
print("Tài liệu đã được thay thế thành công!")
else
print("Thao tác thất bại với mã trạng thái: " .. status)
end

Cập nhật PUT 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("title", "Updated Article Title")
:setParameter("content", "Updated article content")
:setParameter("author", "John Doe")
:put()

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 == 201 then
print("Bài viết đã được cập nhật/thay thế thành công")
end

Thay thế toàn bộ tài nguyên

-- Thay thế toàn bộ một sản phẩm bằng dữ liệu mới
local response = Request("https://api.example.com/products/456")
:setHeader("Content-Type", "application/json")
:setParameter("name", "Premium Widget")
:setParameter("description", "A high-quality widget with advanced features")
:setParameter("price", "99.99")
:setParameter("stock", "50")
:setParameter("category", "electronics")
:setParameter("specs", '{"color": "black", "weight": "200g", "warranty": "2 years"}')
:put()

local updatedProduct = response:getData()
print("Sản phẩm đã được thay thế: " .. 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ọi put()
  • Yêu cầu PUT nên chứa toàn bộ biểu diễn của tài nguyên, chứ không chỉ các thay đổi
  • PUT khác với PATCH ở chỗ PUT thay thế toàn bộ tài nguyên, trong khi PATCH chỉ cập nhật một phần
  • Các thao tác PUT thành công thường trả về:
    • 200 OK kèm tài nguyên đã cập nhật trong phần thân phản hồi (đối với cập nhật)
    • 201 Created kèm tài nguyên mới trong phần thân phản hồi (đối với tạo mới)
    • 204 No Content nếu thao tác 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 PUT là idempotent - việc thực hiện cùng một yêu cầu nhiều lần sẽ cho ra kết quả như nhau
  • Hãy cẩn thận khi sử dụng yêu cầu PUT vì chúng sẽ thay thế hoàn toàn dữ liệu hiện có