Động từ HTTP có lẽ là một trong những điều khó hiểu nhất về giao thức HTTP. Chúng tồn tại, và có rất nhiều trong số chúng, nhưng tại sao chúng tồn tại?
Rails dường như muốn hỗ trợ nhiều động từ và thêm một số động từ không được hỗ trợ bởi các trình duyệt web nguyên bản.
Dưới đây là danh sách đầy đủ các động từ http: http://annevankesteren.nl/2007/10/http-methods
Có bản vá HTTP từ RFC chính thức: https://datatracker.ietf.org/doc/rfc5789/?include bản = 1
Các PATCH yêu cầu phương pháp mà một tập hợp các thay đổi được mô tả trong đơn vị yêu cầu được áp dụng cho các tài nguyên được xác định bởi request- URI. Tập hợp các thay đổi được trình bày theo định dạng gọi là "tài liệu vá" được xác định bởi loại phương tiện. Nếu URI yêu cầu không trỏ đến tài nguyên hiện có, máy chủ CÓ THỂ tạo tài nguyên mới, tùy thuộc vào loại tài liệu vá (liệu nó có thể sửa đổi một cách hợp lý tài nguyên null) và quyền, v.v.
Sự khác biệt giữa các yêu cầu PUT và PATCH được phản ánh trong cách máy chủ xử lý thực thể kèm theo để sửa đổi tài nguyên được xác định bởi URI yêu cầu. Trong yêu cầu PUT , thực thể kèm theo được coi là phiên bản sửa đổi của tài nguyên được lưu trữ trên máy chủ gốc và máy khách đang yêu cầu thay thế phiên bản đã lưu trữ. Tuy nhiên, với PATCH , thực thể kèm theo chứa một tập hợp các hướng dẫn mô tả cách một tài nguyên hiện đang cư trú trên máy chủ gốc nên được sửa đổi để tạo ra một phiên bản mới. Các PATCH
phương pháp ảnh hưởng đến tài nguyên được xác định bởi Request-URI , và nó cũng
THÁNGcó tác dụng phụ trên các tài nguyên khác; tức là, các tài nguyên mới có thể được tạo ra, hoặc các tài nguyên hiện có được sửa đổi, bằng cách áp dụng BCHNG .
Theo như tôi biết, động từ PATCH không được sử dụng như trong các ứng dụng rails ... Theo tôi hiểu điều này, nên sử dụng động từ bản vá RFC để gửi hướng dẫn vá như khi bạn thực hiện khác biệt giữa hai tệp. Thay vì gửi lại toàn bộ thực thể, bạn gửi một bản vá có thể nhỏ hơn nhiều so với gửi lại toàn bộ thực thể.
Hãy tưởng tượng bạn muốn chỉnh sửa một tập tin lớn. Bạn chỉnh sửa 3 dòng. Thay vì gửi lại tệp, bạn chỉ cần gửi diff. Về mặt tích cực, việc gửi yêu cầu vá có thể được sử dụng để hợp nhất các tệp không đồng bộ. Một hệ thống kiểm soát phiên bản có khả năng có thể sử dụng động từ PATCH để cập nhật mã từ xa.
Một trường hợp sử dụng có thể khác có phần liên quan đến cơ sở dữ liệu NoQuery, có thể lưu trữ tài liệu. Giả sử chúng ta sử dụng cấu trúc JSON để gửi qua lại dữ liệu từ máy chủ đến máy khách. Nếu chúng ta muốn xóa một trường, chúng ta có thể sử dụng cú pháp tương tự như cú pháp trong mongodb với $ unset . Trên thực tế, phương pháp được sử dụng trong mongodb để cập nhật tài liệu có thể được sử dụng để xử lý các bản vá json.
Lấy ví dụ này:
db.products.update(
{ sku: "unknown" },
{ $unset: { quantity: "", instock: "" } }
)
Chúng ta có thể có một cái gì đó như thế này:
PATCH /products?sku=unknown
{ "$unset": { "quantity": "", "instock": "" } }
Cuối cùng, nhưng không kém phần quan trọng, mọi người có thể nói bất cứ điều gì họ muốn về động từ HTTP. Chỉ có một sự thật và sự thật là ở RFC.