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:

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
}