RESTful APIs enable you to develop any kind of web application having all possible CRUD (create, retrieve, update, delete) operations

https://restfulapi.net

RESTfull có các phương thức cơ bản sau:

Method Semantics
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 nameage đâ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ộ.