Bạn có thể sử dụng yêu cầu theo lô với Merchant API để gửi nhiều yêu cầu HTTP trong một lệnh gọi API.
Nếu bạn muốn thực hiện việc tạo yêu cầu hàng loạt bằng thư viện ứng dụng, hãy xem bài viết Tái cấu trúc mã cho các yêu cầu đồng thời.
Yêu cầu theo lô là một yêu cầu HTTP tiêu chuẩn duy nhất chứa nhiều lệnh gọi API, sử dụng loại nội dung multipart/mixed. Trong yêu cầu HTTP chính, mỗi phần chứa một yêu cầu HTTP lồng nhau.
Bạn có thể gửi yêu cầu theo lô đến batchPath được chỉ định cho API.
batchPath cho Merchant API là batch/{sub-api}/v1. Bạn
có thể tìm thấy batchPath cho các API khác trong tài liệu
khám phá của các API đó.
Sau đây là một số lý do khiến bạn nên gửi yêu cầu theo lô:
- Bạn vừa bắt đầu sử dụng API và có nhiều dữ liệu cần tải lên.
- Người dùng đã thay đổi dữ liệu khi ứng dụng của bạn không có kết nối mạng và ứng dụng cần đồng bộ hoá dữ liệu cục bộ với máy chủ.
Việc gửi nhiều yêu cầu song song giúp bạn không phải chờ yêu cầu phụ chậm nhất, nhờ đó cải thiện thời gian phản hồi của máy chủ và giảm độ trễ.
Viết yêu cầu theo lô
Sau đây là một yêu cầu theo lô mẫu của Merchant API. Yêu cầu này kết hợp một yêu cầu GET để truy xuất kho hàng tại khu vực của một sản phẩm và một yêu cầu INSERT để cập nhật kho hàng tại khu vực của cùng sản phẩm đó. Bạn nên làm theo định dạng của ví dụ sau:
- Sử dụng
https://merchantapi.googleapis.com/batch/{sub-api}/v1làm URL cơ sở. - Chỉ định một ranh giới để phân tách từng yêu cầu lồng nhau, ví dụ:
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \ - Phân tách từng yêu cầu lồng nhau bằng ranh giới, ví dụ:
--batch_inventory. - Thêm
Content-Type: application/httpvào đầu mỗi yêu cầu lồng nhau. - Sử dụng
Content-IDđể gắn nhãn cho từng yêu cầu lồng nhau bằng mã nhận dạng của riêng bạn. Ví dụ:Content-ID: <get~en~US~123456>. - Thêm một dòng trống giữa tiêu đề, đường dẫn và nội dung của mỗi yêu cầu lồng nhau. Nếu yêu cầu lồng nhau không có nội dung, hãy để trống một dòng trước ranh giới tiếp theo.
- Đừng đưa URL cơ sở vào từng yêu cầu lồng nhau riêng lẻ.
- Kết thúc yêu cầu chính bằng ranh giới cuối cùng, ví dụ:
--batch_inventory–.
curl https://merchantapi.googleapis.com/batch/inventories/v1 \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'Content-Type: multipart/mixed,boundary=batch_inventory' \
--data '
--batch_inventory
Content-Type: application/http
Content-ID: <get~en~US~123456>
GET /inventories/v1/accounts/123/products/en~US~123456/regionalInventories
--batch_inventory
Content-Type: application/http
Content-ID: <post~en~US~123456>
POST /inventories/v1/accounts/123/products/en~US~123456/regionalInventories:insert
{
"region": "123456",
"price": {
"amountMicros": "100000000",
"currencyCode": "USD"
}
}
--batch_inventory--'
Lưu ý khi đặt hàng
- Các yêu cầu có thể không thực thi theo thứ tự bạn chỉ định.
- Sử dụng
Content-IDđể xác định từng yêu cầu. - Nếu bạn cần thực thi các lệnh gọi theo một thứ tự nhất định, hãy gửi riêng các lệnh gọi đó và đợi phản hồi cho yêu cầu đầu tiên trước khi gửi yêu cầu tiếp theo.
Đọc phản hồi theo lô
Sau đây là ví dụ về phản hồi theo lô HTTP. Thứ tự của các phản hồi có thể không khớp với thứ tự của các yêu cầu. Sử dụng Content-ID để xác định yêu cầu lồng nhau mà mỗi phản hồi lồng nhau thuộc về. Trong các phản hồi, API sẽ thêm tiền tố response- vào mỗi Content-ID.
--batch_inventory
Content-Type: application/http
Content-ID: <response-get~en~US~123456>
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer
{}
--batch_inventory
Content-Type: application/http
Content-ID: <response-post~en~US~123456>
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: X-Origin
Vary: Referer
{
"name": "accounts/123/products/en~US~123456/regionalInventories/123456",
"region": "123456",
"price": {
"amountMicros": "100000000",
"currencyCode": "USD"
}
}
--batch_inventory--
Giới hạn
Yêu cầu theo lô có các giới hạn sau:
- 2.000 yêu cầu lồng nhau cho mỗi yêu cầu theo lô.
Nếu một yêu cầu theo lô vượt quá bất kỳ giới hạn nào trong số này, thì API sẽ trả về lỗi 400 Bad Request và từ chối toàn bộ yêu cầu.