URL: https://api-ecom.duthanhduoc.com/
Đối với các route cần xác thực => Gửi token lên bằng headers với key là authorization
. Token phải bắt đầu bằng 'Bearer '
Là một object
interface Response {
message: string;
data?: any;
}
Ví dụ
{
"message": "Lấy sản phẩm thành công",
"data": {
"_id": "60afb2c76ef5b902180aacba",
"images": [
"https://api-ecom.duthanhduoc.com/images/bbea6d3e-e5b1-494f-ab16-02eece816d50.jpg"
],
"price": 3190000,
"rating": 4.6,
"price_before_discount": 3990000,
"quantity": 138,
"sold": 1200,
"view": 696,
"name": "Điện Thoại Vsmart Active 3 6GB/64GB - Hàng Chính Hãng",
"description": "",
"category": "60afafe76ef5b902180aacb5",
"image": "https://api-ecom.duthanhduoc.com/images/bbea6d3e-e5b1-494f-ab16-02eece816d50.jpg",
"createdAt": "2021-05-27T14:55:03.113Z",
"updatedAt": "2021-06-12T14:22:55.871Z"
}
}
Ví dụ đăng ký email đã tồn tại
{
"message": "Lỗi",
"data": {
"email": "Email đã tồn tại"
}
}
{
"message": "Lỗi do abcxyz"
}
Method: POST body
{
"email": "user2@gmail.com",
"password": "123456"
}
Rules
- email: required, length: 5-160, isEmail
- password: required, length: 6-160
Response
{
"message": "Đăng ký thành công",
"data": {
"access_token": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InVzZXIxNUBnbWFpbC5jb20iLCJpZCI6IjYwYzZmNGViNGVhMWRlMzg5ZjM1NjA1YiIsInJvbGVzIjpbIlVzZXIiXSwiY3JlYXRlZF9hdCI6IjIwMjEtMDYtMTRUMDY6MTk6MjMuNzQ5WiIsImlhdCI6MTYyMzY1MTU2MywiZXhwIjoxNjI0MjU2MzYzfQ.WbNgnd4cewdDNpx-ZLebk1kLgogLctBqgh9fc9Mb3yg",
"expires": "7d",
"user": {
"roles": ["User"],
"_id": "60c6f4eb4ea1de389f35605b",
"email": "user15@gmail.com",
"createdAt": "2021-06-14T06:19:23.703Z",
"updatedAt": "2021-06-14T06:19:23.703Z",
"__v": 0
}
}
}
Method: POST body
{
"email": "user2@gmail.com",
"password": "123456"
}
Rules
- email: required, length: 5-160, isEmail
- password: required, length: 6-160
Response
{
"message": "Đăng nhập thành công",
"data": {
"access_token": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYwOThmNWI1MTY5MDU1MzZlODE4ZjhjYyIsImVtYWlsIjoiYWRtaW5AZ21haWwuY29tIiwicm9sZXMiOlsiVXNlciIsIkFkbWluIl0sImNyZWF0ZWRfYXQiOiIyMDIxLTA2LTE0VDA4OjA4OjI4LjQ5NVoiLCJpYXQiOjE2MjM2NTgxMDgsImV4cCI6MTYyNDI2MjkwOH0.8YITBWt6SXikoaBHf-SlOh_h7ii0UgwY_5-bjCirY",
"expires": "7d",
"user": {
"_id": "6098f5b516905536e818f8cc",
"roles": ["User"],
"email": "user2@gmail.com",
"name": "Real user",
"date_of_birth": null,
"address": "",
"phone": "",
"createdAt": "2021-05-10T08:58:29.081Z",
"updatedAt": "2021-05-10T08:58:29.081Z",
"__v": 0
}
}
}
Method: POST
Method: GET
Response
{
"message": "Lấy người dùng thành công",
"data": {
"_id": "6098f5b516905536e818f8cc",
"roles": ["User"],
"email": "user@gmail.com",
"name": "Real",
"date_of_birth": null,
"address": "",
"phone": "",
"createdAt": "2021-05-10T08:58:29.081Z",
"updatedAt": "2021-05-10T08:58:29.081Z"
}
}
Ví du: products?page=1&limit=30
Method: GET
Query Params:
page
: number. Số trang. Mặc định là 1limit
: number. Số product trên 1 trang. Mặc định là 30order
: 'desc' || 'asc'. Sắp xếp theo thứ tự. Mặc định là 'desc'sort_by
: 'createdAt' || 'view' || 'sold' || 'price'. Sắp xếp theo trường. Mặc định là 'createdAt'.category
: categoryId. Lọc sản phẩm theo categoryexclude
: productId. Loại trừ sản phẩm nào đórating_filter
: number. Lọc sản phẩm có số sao lớn hơn hoặc bằng rating_filterprice_max
: number. Giá cao nhấtprice_min
: number. Giá thấp nhấtname
: string. Tên sản phẩm (lưu ý Tên sản phẩm tiếng Việt phải gõ đầy đủ dấu)
Response
{
"message": "Lấy các sản phẩm thành công",
"data": {
"products": [],
"pagination": {
"page": 1,
"limit": 30,
"page_size": 2
}
}
}
Method: GET
Method: GET
{
"message": "Lấy categories thành công",
"data": [
{
"_id": "60aba4e24efcc70f8892e1c6",
"name": "Áo thun"
},
{
"_id": "60afacca6ef5b902180aacaf",
"name": "Đồng hồ"
},
{
"_id": "60afafe76ef5b902180aacb5",
"name": "Điện thoại"
}
]
}
Method: POST
Body
{
"product_id": "60afb1c56ef5b902180aacb8",
"buy_count": 3
}
Method: GET
Query Params:
status
: Trạng thái đơn hàng
Thông tin status
:
- -1: Sản phẩm đang trong giỏ hàng
- 0: Tất cả sản phâm
- 1: Sản phẩm đang đợi xác nhận từ chủ shop
- 2: Sản phẩm đang được lấy hàng
- 3: Sản phẩm đang vận chuyển
- 4: San phẩm đã được giao
- 5: Sản phẩm đã bị hủy
Method: PUT Body:
{
"product_id": "60afb1c56ef5b902180aacb8",
"buy_count": 3
}
Method: DELETE
body: mảng các purchase_id
["purchase_id"]
Method: POST body: Mảng các object
[{ "product_id": "60afb1c56ef5b902180aacb8", "buy_count": 2 }]
Method: PUT Body:
{
"address": "Việt Nam",
"date_of_birth": "1907-02-18T17:17:56.000Z",
"name": "Dư Thanh Được",
"phone": "04511414",
"avatar": "URL Avatar",
"password": "Mật khẩu cũ",
"new_password": "Mật khẩu mới"
}
Rules
- name: string, maxLength = 160
- phone: string, maxLength = 20
- address: string, maxLength = 160
- date_of_birth: string, ISO8601
- avatar: string, maxLength 1000
- password: string, length 6-160
- new_password: string, length 6-160
Method: POST
Header: 'Content-Type': 'multipart/form-data'
Body: FormData với item có key là image
Rules
- Ảnh phải bé hơn 1MB
- Phải là định dạng ảnh
Lưu ý:
- Có thể lỗi trả về dạng 422 với key là
image
hoặc không có gì cả - Server không đảm bảo ảnh của bạn sẽ tồn tại mãi mãi trên server. Có thể tồn tài vài ngày hoặc lâu hơn.
- Vì là upload ảnh nên hạn chế spam và upload quá nhiều ảnh dẫn đến server quá tải ảnh hưởng đến các bạn khác.
Áp dụng cho /login
và /register
Chỉ cần truyền lên header
expire-access-token
: number => số giây hết hạn của access tokenexpire-refresh-token
: number => số giây hết hạn của refresh token
Method: POST
Body:
{
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InVzZXIxNUBnbWFpbC5jb20iLCJpZCI6IjYwYzZmNGViNGVhMWRlMzg5ZjM1NjA1YiIsInJvbGVzIjpbIlVzZXIiXSwiY3JlYXRlZF9hdCI6IjIwMjEtMDYtMTRUMDY6MTk6MjMuNzQ5WiIsImlhdCI6MTYyMzY1MTU2MywiZXhwIjoxNjI0MjU2MzYzfQ.WbNgnd4cewdDNpx-ZLebk1kLgogLctBqgh9fc9Mb3yg"
}