Đối với các lập trình viên web nói chung thì chúng ta không thể nào mà không nghe đến các từ như get hoặc post, nó thực sự rất phổ biển
SUMARY
Đầu tiên phải nói đến là có tất cả 9 loại request, get và post là 2 loại thông dụng được sử dụng nhiều.
GET: được sử dụng để lấy thông tin từ sever theo URI đã cung cấp.
HEAD: giống với GET nhưng response trả về không có body, chỉ có header
POST: gửi thông tin tới sever thông qua các biểu mẫu http( đăng kí chả hạn..)
PUT: ghi đè tất cả thông tin của đối tượng với những gì được gửi lên
PATCH: ghi đè các thông tin được thay đổi của đối tượng.
DELETE: xóa tài nguyên trên server.
CONNECT: thiết lập một kết nối tới server theo URI.
OPTIONS: mô tả các tùy chọn giao tiếp cho resource.
TRACE: thực hiện một bài test loop - back theo đường dẫn đến resource.
GET VS POST
2 loại request get post gần như đều rất quen thuộc với chúng ta.
với một ứng dụng web được thiết kế theo restful thì get chỉ dùng để lấy dữ liệu và post chỉ dùng để đẩy dữ liệu lên. Nhưng, khi đi phỏng vấn thì chúng ta sẽ thường được hỏi: "Liệu get có thể được dùng để đấy dữ liệu lên hay post có thể được dùng để lấy dữ liệu về hay không ?"
thú thật với các bạn là trước đây tôi đã trả lời là không thể :man_vampire:
Hoàn toàn có thể các bạn nhé. Nhưng có chúng ta không nên sử dụng như vậy, nó phá vỡ các quy tắc thiết kế.
Một chút khác biệt dễ nhận thấy giữa get và post là get thì không có body. Khi dùng get để truyền dữ liệu lên sever chúng ta thấy rằng tất cả các paramater đều bị hiển thị trên url của request, xét về khía cạnh bảo mật thì điều này thật là tệ.
Post thì khác, nó giấu parameters trong body và mã hóa chúng đi, ngăn cản các phần tử trung gian ăn cắp nội dung.
Nhưng post chỉ có tính an toàn đối với client, còn với sever thì lại khác.
Các method như post, put, delete bị coi là unsafe và not idempotent cho server.
POST/PUT/PATCH
Điểm khác biệt giữ post và put đơn giản là put là idempotent còn post thì không, bạn sẽ nhận được thông báo lỗi khi gửi một request post với cùng 1 nội dung 2 lần nhưng put thì không, nó luôn trả về kết quả như nhau.
post: tạo mới
put: ghi đè(toàn bộ) hoặc tạo mới 1 resource
patch: cập một 1 phần của resource
SAFE
một method được coi là safe khi nó không làm thay đổi trạng thái "sate" của server. Nói cách khác, an toàn là chỉ đọc mà không làm thay đổi bất kì điều gì. Các method được coi là safe chỉ có: GET, HEAD và OPTIONS.
Unsafe: PUT, DELETE, POST và PATCH.
IDEMPOTENT
các method được coi là idempotent khi nó có thể thực hiên n + 1 lần mà vẫn trả lại 1 kết quả như ban đầu.
vì điều này nên các method safe thì đều idempotent. Nhưng unsafe chưa chắc đã idempotent.
1 số lưu ý:
header dài tối đa 8kb và cũng phụ thuộc cả vào trình duyệt
body thì limit của nó tùy trình duyệt.
url không dài quá 2 nghìn kí tự (ror)