HTTP và REST
Nội dung bài · 5 mục
- 1.Khái niệm
- 2.Ví dụ
- 3.Thử ngay
- 4.Lỗi hay gặp
- 5.Tóm tắt
App bán hàng trên điện thoại cần lấy danh sách sản phẩm từ server. Hai bên nói chuyện với nhau bằng HTTP. Trước khi viết API, bạn cần biết một request gồm những gì và server trả lời ra sao. Khoá này ghép C#, OOP (interface, DI) và SQL (Oracle) đã học thành một API.
Khái niệm
🌐 HTTP: giao thức để client và server trao đổi dữ liệu, trong đó client gửi request và server trả về response.
📮 HTTP method: phần của request cho biết client muốn làm gì, gồm GET, POST, PUT, DELETE.
🔢 Status code: số ba chữ số trong response cho biết kết quả: 2xx là thành công, 4xx là lỗi phía client, 5xx là lỗi phía server.
🧭 REST: cách thiết kế API mà mỗi URL trỏ tới một tài nguyên (danh từ), còn việc cần làm thể hiện bằng HTTP method.
Ví dụ
Client xin sản phẩm số 1:
GET /api/products/1 HTTP/1.1
Host: localhost:5000Server trả lời:
HTTP/1.1 200 OK
Content-Type: application/json
{ "id": 1, "name": "Pen", "price": 5000 }- Dòng đầu của request gồm method (
GET) và đường dẫn (/api/products/1). - Dòng đầu của response có status code (
200 OK). - Các dòng
Tên: giá trịsau dòng đầu là header, chở thông tin kèm theo như kiểu dữ liệu của body. - Dữ liệu trả về ở dạng JSON, một định dạng chữ gồm các cặp tên và giá trị.
Một API sản phẩm theo kiểu REST:
| Method | URL | Việc |
|---|---|---|
| GET | /api/products |
lấy danh sách |
| GET | /api/products/1 |
lấy sản phẩm số 1 |
| POST | /api/products |
tạo sản phẩm mới |
| PUT | /api/products/1 |
cập nhật sản phẩm số 1 |
| DELETE | /api/products/1 |
xoá sản phẩm số 1 |
Status code hay gặp:
| Code | Ý nghĩa |
|---|---|
| 200 OK | thành công, có dữ liệu trả về |
| 201 Created | đã tạo mới |
| 204 No Content | thành công, không có dữ liệu |
| 400 Bad Request | dữ liệu gửi lên sai |
| 404 Not Found | không tìm thấy |
| 500 Internal Server Error | server bị lỗi |
Thử ngay
Gọi một API công khai bằng curl. Trên Windows, gõ curl.exe thay cho
curl, vì trong PowerShell chữ curl là một lệnh khác.
curl -i https://jsonplaceholder.typicode.com/users/1
curl -i https://jsonplaceholder.typicode.com/users/9999Tuỳ chọn -i in cả phần đầu của response, trong đó có status code.
Đoán trước khi chạy: lần gọi thứ hai hỏi user không tồn tại. Status code là bao nhiêu?
Xem kết quả
Lần 1: status 200, body là JSON thông tin user số 1
Lần 2: status 404, body là {}Server trả 404 Not Found vì không có user 9999. Chỉ cần nhìn status code là client biết kết quả, không cần đọc body.
Lỗi hay gặp
Đặt động từ vào URL. REST dùng method để nói việc cần làm.
// SAI
GET /api/deleteProduct?id=1// ĐÚNG
DELETE /api/products/1Trả 200 cho cả trường hợp lỗi. Client phải đọc body mới biết có lỗi hay không.
// SAI
HTTP/1.1 200 OK
{ "error": "Không tìm thấy sản phẩm" }// ĐÚNG
HTTP/1.1 404 Not FoundTóm tắt
- Client gửi request, server trả response, qua giao thức HTTP.
- Method nói việc cần làm: GET đọc, POST tạo, PUT sửa, DELETE xoá.
- Status code nói kết quả: 2xx thành công, 4xx lỗi phía client, 5xx lỗi phía server.
- REST: URL là danh từ chỉ tài nguyên, việc cần làm nằm ở method.
Tự kiểm tra
0/3 câuClient muốn cập nhật giá của đơn hàng số 7. Request nào đúng kiểu REST?
Client gửi email sai định dạng khi đăng ký. Server nên trả status code nào?
Server bị lỗi kết nối database khi xử lý request. Status code phù hợp thuộc nhóm nào?