Partial update với JSON Patch
JSON-PATCH là gì ? Ok. Hãy xem xét một ví dụ dưới đây (mà thực ra cũng là một trường hợp phổ biến trong thực tế) : Ta cần viết một hàm API để chỉnh sửa một record. Với một hệ thống nghiệp vụ thực tế, một model tương ứng với một đối tượng của business có thể chứa rất nhiều property. Ta có thể ...
JSON-PATCH là gì ?
Ok. Hãy xem xét một ví dụ dưới đây (mà thực ra cũng là một trường hợp phổ biến trong thực tế) : Ta cần viết một hàm API để chỉnh sửa một record. Với một hệ thống nghiệp vụ thực tế, một model tương ứng với một đối tượng của business có thể chứa rất nhiều property. Ta có thể gặp những model có thể có 10, vài chục, thậm chí hơn một trăm property. Và giờ hãy xét tới việc ta chỉ muốn thay đổi tên, hoặc một vài mô tả khác của model đó mà thôi.
Vấn đề gặp phải khi sử dụng PUT method
So sanh nhanh giữa việc sử dụng 2 method PUT và PATCH, ta có thể dễ dàng loại bỏ PUT trong trường hợp này, vì 2 hạn chế mà ta sẽ gặp phải
Lãng phí
Việc gửi toàn bộ một object lên CHỈ để cập nhập lại 1, 2, hoặc một vài trường rõ ràng là không cần thiết. Điều này đặc biệt rõ khi mà trong thực tế một record có số lượng property lớn nghĩa là request gửi lên sẽ chiếm nhiều bandawidth hơn - ảnh hưởng rõ rệt với một hệ thống lớn.
Có khả năng gây ra conflict giữa các request
Giả sử khi có 2 người cùng đọc một nội dung, sau đó muốn chỉnh sửa lại thông tin của nội dung đó. Cho rằng thứ mà 2 người đó nhận được như sau
GET /bookings/123 { "id" : 123, "destination": "Ha Noi", "people_count" : 3, "date", "28/03/2018", ....... }
Người thứ nhất muốn chỉnh sửa lại thông tin đặt - nâng số người đăng kí lên 5 - sẽ gửi một request lên server như sau:
PUT /bookings/123 { "id" : 123, "destination": "Ha Noi", "people_count" : 5, "date", "28/03/2018", ....... }
Lúc này, số lượng người đặt đã được tăng lên 5. Tuy nhiên, lại có 1 người thứ 2 muốn đẩy lùi lại ngày đặt tour, vì vậy anh ấy đã gửi tiếp 1 yêu cầu thay đổi như sau:
GET /bookings/123 { "id" : 123, "destination": "Ha Noi", "people_count" : 3, "date", "30/03/2018", ....... }
Lúc này, sau khi xử lý yêu cầu của người 2, vô tình hệ thống đã gây ra bug và làm mất đi thông tin chỉnh sửa của người 1.
Vì 2 vấn đề trên, ta nên nghĩ tới việc sử dụng PATCH method thay thế. Tuy nhiên ...
Vấn đề gặp phải khi sử dụng PATCH method
Ý tưởng về việc "chỉ gửi lên những gì mình muốn chỉnh sửa" nghe khá là hay ho