GraphQL Storefront API
Authentication
App sử dụng storefront_access_token_code
với quyền tương ứng để truy cập tài nguyên. Access token này cần được truyền vào header X-Sapo-Storefront-Access-Token
trong quá trình gọi api
Endpoints
Storefront API sử dụng GraphQL API. Tất cả các truy vấn Storefront API được thực hiện trên một GraphQL endpoint duy nhất, endpoint này chỉ chấp nhận POST request:
POST https://{store_alias}.mysapo.net/api/graphql.json
Rate Limit
Storefront API sử dụng time-based rate limit. Thời gian request được xử lý được sử dụng để xác định rate limit thay vì số lượng request.
Tham số bucket size
hay leaky rate
mô tả trong thuật toán Leaky bucket sẽ được dùng để xác định tốc độ request.
60-second limit
được áp dụng vào địa chỉ IP của request gọi đến thay vì định danh của app.
Nếu bạn sử dụng api ở phía client, app của bạn sẽ ko bị limit bởi việc tăng số lượng user truy cập vào app.
Nếu bạn sử dụng api ở phía server, địa chỉ IP request đến sẽ là địa chỉ server của bạn, có thể tránh rate limit bằng việc caching kết quả trả về
Mặc định:
- Bucket rate là 60s/địa chỉ IP
- Leaky rate là 1/second
Status and error codes
Storefront API trả về http status 200 OK trong hầu hết các trường hợp (kể cả trường hợp đúng ra là 4xx như đối với REST API).
Đối với trường hợp lỗi có thể trả về http status 200 và lỗi được mô tả trong response body hoặc một số lỗi sẽ thể hiện qua http status code
Ví dụ một số lỗi và response trả về:
401 Unauthorized
Thiếu thông tin xác thực trong request
HTTP/1.1 401 Unauthorized
{
"error": "Resource need authentication"
}
429 Too Many Requests
Request bị rate limit
HTTP/1.1 429 Too Many Requests
{
"error": "Too many attempts. Please try again in a few minutes"
}
500 Internal Server Error
Lỗi xử lý từ server
HTTP/1.1 500 Internal Server Error
{
"error": "Something went wrong"
}
Lỗi ko có quyền truy cập tài nguyên
HTTP/1.1 200 OK
{
"errors": [
{
"message": "Access is denied",
"locations": [],
"path": [
"products"
],
"extensions": {
"classification": "AccessDenied"
}
}
],
"data": {
"products": null
}
}
Lỗi sai cú pháp graphql
HTTP/1.1 200 OK
{
"errors": [
{
"message": "Invalid Syntax : offending token '}' at line 3 column 2",
"locations": [
{
"line": 3,
"column": 2
}
],
"extensions": {
"classification": "InvalidSyntax"
}
}
],
"data": null
}