Các phương thức cơ bản của RESTfull lâu lâu hay quên
RESTful APIs enable you to develop any kind of web application having all possible CRUD (create, retrieve, update, delete) operations
RESTfull có các phương thức cơ bản sau
Method
- GET Retrieve resources
- POST Create a new resource
- PUT Update a resource
- PATCH Update a resource
- DELETE Delete a resource
Ngoài ra còn có HEAD, OPTIONS nhưng hầu như không sử dụng nhiều.
Ở đây ta để ý thấy PUT vs PATCH đều có ý nghĩa là sử dụng để “Update a resource”. Vậy PUT và PATCH có gì khác nhau?
PUT
Theo HTTP RFC, khi sử dụng PUT để update, ta phải gửi 1 bản ghi đầy đủ các field để yêu cầu cập nhật. Nếu chỉ gửi 1 số field nhất định thì những field còn lại sẽ bị xóa (tức bị null)
VD:
Mình có record như sau:
Request: GET /idol/2 Response: { "name": "Khá Bảnh", "age": 25, "skill": "xòe quạt" }
Sau đó mình bổ sung skill vinahey cho anh Bảnh.
Request: PUT /idol/2
Request payload:
{ skill: "xòe quạt, vinahey" }
Bây giờ mình kiểm tra lại xem thông tin a Bảnh đã được cập nhật chưa.
Request: GET /idol/2
Response:
{ "skill": "xòe quạt, vinahey" }
Dường như có vẻ được cập nhật rồi. Ơ mà khoan có gì đó sai sai, field name và age đâu?
Thì ra đó là cách làm việc của PUT.
PATCH
Theo HTTP RFC, PATCH giống PUT về ý nghĩa nhưng khác nhau về cách làm việc, nó chỉ thay đổi những field được yêu cầu thay vì thay đổi toàn bộ record.
Áp dụng lại VD trên:
Mình có record như sau:
Request: GET /idol/2
Response:
{ "name": "Khá Bảnh", "age": 25, "skill": "xòe quạt" }
Sau đó mình bổ sung skill vinahey cho anh Bảnh.
Request: PATCH /idol/2
Request payload:
{ skill: "xòe quạt, vinahey" }
Bây giờ mình kiểm tra lại xem thông tin a Bảnh đã được cập nhật chưa.
Request: GET /idol/2
Response:
{ "name": "Khá Bảnh", "age": 25, "skill": "xòe quạt, vinahey" }
Hoàn hảo, PATCH chỉ cập nhật những field được yêu cầu thay vì cập nhật toàn bộ.