REST API · Бета

API-н баримт бичиг

wallmarkets-ыг аппликейшнүүддээ нэгтгэ. Хүргэлт, буцаалт, бүтээгдэхүүн, супермаркетуудыг програмчлалын аргаар удирд.

API нь бета шатандаа байна. Төгсгөлийн цэгүүд болон хариу формат өөрчлөгдөж болно. Гэнэтийн өөрчлөлтөөс зайлсхийхийн тулд интеграцаа тодорхой API хувилбарт холбо.

Танилцуулга

wallmarkets API нь хүргэлт, буцаалт, бүтээгдэхүүн, супермаркет дансуудыг програмчлалын аргаар удирдах боломжийг олгоно. Бүх төгсгөлийн цэгүүд JSON буцаадаг бөгөөд API түлхүүрээр баталгаажуулах шаардлагатай.

Суурь URL

https://www.wallmarkets.store/api/v1

Хариултын формат

Хариу бүр статус талбар болон өгөгдлийн ачааллыг (эсвэл алдаа гарсан тохиолдолд алдааны объект) агуулна.

{
  "status": "success",
  "data": { ... }
}

Нэвтрэлт

Хүсэлт бүрийг Authorization толгой хэсэгт Bearer токен хэлбэрээр API түлхүүрээ оруулан баталгаажуул.

API түлхүүр үүсгэх

Дансны тохиргоо > API түлхүүрүүд хэсэгт түлхүүрүүд үүсгэ. Түлхүүр бүр дараахыг дэмждэг:

  • Хүрээ: Нөөц тус бүрээр хандалтыг хязгаарлах (жишээ нь deliveries:read, returns:write, products:read)
  • Хугацаа дуусах: Сонголттой дуусах огноо — хугацаа дууссан түлхүүрүүд автоматаар татгалзагдана
  • Эргэлт: Түлхүүрийг эргүүлэх нь түлхүүрийн ID-г өөрчлөхгүйгээр шинэ нууц авах боломжийг олгоно
Түлхүүрүүд сервер талд хэшлэгдсэн (SHA-256). Үүсгэсний дараа түлхүүрээ шууд хуулах — дахин харах боломжгүй болно.

Нэвтрэлтийн толгой

Authorization: Bearer YOUR_API_KEY

Жишээ хүсэлт

curl -X GET \
  https://www.wallmarkets.store/api/v1/deliveries \
  -H 'Authorization: Bearer wm_live_abc123...'

Хурдны хязгаар

Хурдны хязгаарлалт нь үйлчилгээний тогтвортой байдлыг хамгаална. Хязгаарлалт нь төлөвлөгөөгөөр ялгаатай:

Төлөвлөгөөгөөр хязгаарлалт

API төлөвлөгөө Цагийн хүсэлтийн хязгаар Минутын тэсрэлтийн хязгаар
Үнэгүй 60 requests/hour 10 requests/minute
Pro 1,000 requests/hour 60 requests/minute
Бизнес 10,000 requests/hour 300 requests/minute

Хурдны хязгаарын толгой

Хариу бүр дараах толгой хэсгүүдийг агуулна:

  • X-RateLimit-Limit: Цагт хамгийн их хүсэлт
  • X-RateLimit-Remaining: Одоогийн цонхонд үлдсэн хүсэлтүүд
  • X-RateLimit-Reset: Цонх шинэчлэгдэх UTC эпох секунд

Хүргэлтийн API

Шаардлагатай хүрээ: deliveries:read / deliveries:write

Хүргэлтийн жагсаалт

GET /api/v1/deliveries

Баталгаажуулсан хэрэглэгчийн хүргэлтүүдийн хуудасласан жагсаалтыг буцаана.

# Query Parameters
?page=1&per_page=20&status=pending&date_from=2024-01-01&supermarket_id=5

Хүргэлт авах

GET /api/v1/deliveries/{delivery_id}
{
  "id": 123,
  "supermarket_name": "E-mart",
  "subchain_name": "Sukhbaatar Branch",
  "products": [
    {"product_id": 8, "name": "Product A", "quantity": 10, "unit_price": 5000},
    {"product_id": 15, "name": "Product B", "quantity": 5, "unit_price": 12000}
  ],
  "total_value": 110000,
  "delivery_date": "2024-10-15",
  "status": "completed",
  "created_at": "2024-10-01T10:30:00Z"
}

Хүргэлт үүсгэх

POST /api/v1/deliveries
{
  "supermarket_id": 5,
  "subchain_id": 12,
  "products": [
    {"product_id": 8, "quantity": 10},
    {"product_id": 15, "quantity": 5}
  ],
  "delivery_date": "2024-10-20",
  "notes": "Urgent delivery"
}

Хүргэлтийн төлөв шинэчлэх

PATCH /api/v1/deliveries/{delivery_id}
{
  "status": "completed"
}

Хүчинтэй шилжилтүүд: pending → in_transit → completed, эсвэл pending → cancelled.

Буцаалтын API

Шаардлагатай хүрээ: returns:read / returns:write

Буцаалтын жагсаалт

GET /api/v1/returns

Хуудасласан жагсаалтыг буцаана. Хүргэлт, супермаркет, шалтгаан эсвэл огнооны мужаар шүү.

# Query Parameters
?page=1&per_page=20&reason=damaged&delivery_id=123

Буцаалт үүсгэх

POST /api/v1/returns
{
  "delivery_id": 123,
  "product_id": 8,
  "quantity": 3,
  "reason": "damaged",
  "return_date": "2024-10-18",
  "description": "Products arrived damaged during transit"
}

Буцаалт авах

GET /api/v1/returns/{return_id}
{
  "id": 42,
  "delivery_id": 123,
  "product_id": 8,
  "product_name": "Product A",
  "quantity": 3,
  "reason": "damaged",
  "description": "Products arrived damaged during transit",
  "return_date": "2024-10-18",
  "credit_amount": 15000,
  "created_at": "2024-10-18T09:15:00Z"
}

Бүтээгдэхүүний API

Шаардлагатай хүрээ: products:read / products:write

Бүтээгдэхүүний жагсаалт

GET /api/v1/products

Баталгаажуулсан хэрэглэгчийн бүх бүтээгдэхүүнийг буцаана. Ангилалаар шүүх эсвэл нэрээр хайх.

# Query Parameters
?page=1&per_page=50&category=Dairy&search=milk

Бүтээгдэхүүн авах

GET /api/v1/products/{product_id}
{
  "id": 8,
  "sequential_id": "P-0008",
  "name": "Whole Milk 1L",
  "weight": 1.05,
  "price": 5000,
  "category": "Dairy",
  "created_at": "2024-08-01T12:00:00Z"
}

Бүтээгдэхүүн үүсгэх

POST /api/v1/products
{
  "name": "Whole Milk 1L",
  "weight": 1.05,
  "price": 5000,
  "category": "Dairy"
}

Өвөрмөц sequential_id автоматаар оноогдоно.

Бүтээгдэхүүн шинэчлэх

PATCH /api/v1/products/{product_id}
{
  "price": 5500
}

Зөвхөн оруулсан талбарууд шинэчлэгдэнэ. Түүхэн хүргэлтийн бүртгэлд нөлөөлөхгүй.

Супермаркетын API

Шаардлагатай хүрээ: supermarkets:read / supermarkets:write

Супермаркетын жагсаалт

GET /api/v1/supermarkets
[
  {
    "id": 5,
    "name": "E-mart",
    "branches": [
      {"id": 12, "name": "Sukhbaatar Branch", "address": "..."},
      {"id": 13, "name": "Bayangol Branch", "address": "..."}
    ]
  }
]

Супермаркет авах

GET /api/v1/supermarkets/{supermarket_id}

Супермаркетийн дэлгэрэнгүй мэдээллийг бүх салбар, хүргэлтийн цонх, холбоо барих мэдээллийн хамт буцаана.

Супермаркет үүсгэх

POST /api/v1/supermarkets
{
  "name": "E-mart",
  "contact_email": "buyer@emart.mn",
  "branches": [
    {
      "name": "Sukhbaatar Branch",
      "address": "Peace Avenue 15, UB",
      "delivery_window": "08:00-12:00"
    }
  ]
}

Вебхукууд

Үйл явдал болоход бодит цагийн HTTP дуудлага хүлээн авахын тулд вебхукуудад бүртгүүл. 10 дараалсан хүргэлтийн алдааны дараа вебхукууд автоматаар идэвхгүй болно.

Үйл явдлын төрөл

Вебхук үйл явдал Дуудлагын утга
delivery.created Шинэ хүргэлт үүсгэгдсэн
delivery.in_transit Хүргэлт илгээгдсэн
delivery.completed Хүргэлт дууссан гэж тэмдэглэгдсэн
delivery.cancelled Хүргэлт цуцлагдсан
return.created Шинэ буцаалт боловсруулагдсан
product.created Шинэ бүтээгдэхүүн нэмэгдсэн
product.updated Бүтээгдэхүүн өөрчлөгдсөн

Вебхук ачааллын жишээ

{
  "event": "delivery.completed",
  "timestamp": "2024-10-15T14:30:00Z",
  "data": {
    "delivery_id": 123,
    "supermarket_name": "E-mart",
    "subchain_name": "Sukhbaatar Branch",
    "total_value": 110000,
    "completed_at": "2024-10-15T14:30:00Z"
  }
}

Дахин оролдох бодлого

Амжилтгүй хүргэлтүүдийг экспоненциал бэкаффоор (1 мин, 5 мин, 30 мин) дахин оролдоно. 10 дараалсан алдааны дараа захиалга автоматаар идэвхгүй болно. Вебхук тохиргооноос дахин идэвхжүүл.

Алдаа боловсруулалт

HTTP статус кодууд

HTTP код Хариу төлөв Хөгжүүлэгчийн утга
200 OK Хүсэлт амжилттай
201 Created Нөөц амжилттай үүсгэгдлээ
400 Bad Request Буруу эсвэл дутуу параметрүүд
401 Unauthorized API түлхүүр байхгүй, буруу эсвэл хугацаа нь дууссан
403 Forbidden Түлхүүр нь энэ төгсгөлийн цэгт шаардлагатай хамрах хүрээгүй байна
404 Not Found Нөөц байхгүй эсвэл танд хамаарахгүй
429 Too Many Requests Хурдны хязгаар хэтэрсэн — X-RateLimit-Reset толгойг шалгана уу
500 Internal Server Error Манай талд алдаа гарлаа — дахин оролдох эсвэл дэмжлэгт хандана уу

Алдааны хариуны формат

{
  "status": "error",
  "error": {
    "code": "validation_error",
    "message": "delivery_date must be in the future",
    "field": "delivery_date"
  }
}

Эхлэхэд бэлэн үү?

API түлхүүрээ үүсгэж, wallmarkets-ыг өөрийн аппликейшнд нэгтгэж эхлээрэй.