Kho JSON API
Lưu tài liệu JSON nhỏ và đọc, cập nhật qua REST: merge patch, lịch sử phiên bản, khoá lạc quan, TTL và chế độ đọc công khai không cần key.
POST /v1/json-store với {"data": …} (bất kỳ giá trị JSON nào), cùng name, public và ttl_seconds tuỳ chọn để tạo tài liệu; kết quả gồm id và URL /v1/json-store/{id}. GET trả tài liệu kèm thông tin (raw=true: chỉ nội dung, có ETag), PUT (hoặc POST) thay toàn bộ data, PATCH áp dụng JSON Merge Patch (RFC 7386: giá trị null để xoá khoá) và DELETE để xoá. Có thể đổi tên, chế độ công khai và TTL mà không động tới dữ liệu.
Mỗi lần ghi tăng version; gửi if_version (hoặc header If-Match: "v3") để từ chối ghi khi tài liệu đã bị người khác sửa trong lúc đó (409 version_conflict). Các phiên bản trước được giữ lại (/{id}/versions, /{id}/versions/{n}): 3 với gói Free, 10 với Starter, 25 với Pro. Tài liệu có public=true ai cũng đọc được bằng GET /v1/json-store/{id} mà không cần API key (JSON thô, CORS *, trả về dạng application/json kèm nosniff nên không thể biến thành trang web; lượt đọc này miễn phí, cache 10 giây và giới hạn tần suất theo tài liệu). Tài liệu có ttl_seconds (60 giây tới 365 ngày) sẽ tự biến mất khi hết hạn.
Tài liệu gắn với tài khoản (API key hoặc đã đăng nhập). Giới hạn theo gói: Free 10 tài liệu, mỗi tài liệu tối đa 100 KB (tổng 5 MB kể cả phiên bản), Starter 100 × 512 KB (100 MB), Pro 1.000 × 1 MB (500 MB). Mỗi lệnh gọi có xác thực tính một request. Dữ liệu lưu trong cơ sở dữ liệu D1 (nhất quán ngay: đọc liền sau khi ghi sẽ thấy dữ liệu mới). Không lưu bí mật hay dữ liệu cá nhân trong tài liệu công khai.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
data | body | object | có | Tài liệu JSON (bất kỳ giá trị JSON nào). Bắt buộc khi tạo; với PATCH là merge patch. | |
name | body | string | không | Tên hiển thị (tối đa 100 ký tự). | |
public | body | boolean | không | false | Cho phép GET không cần API key (JSON thô). |
ttl_seconds | body | number | không | Tài liệu hết hạn sau 60 giây – 365 ngày; 0 để bỏ hạn. | |
if_version | body|query | number | không | Chỉ PUT / PATCH khi tài liệu vẫn ở phiên bản này (hoặc If-Match: "v<n>"). | |
raw | query | boolean | không | false | GET: chỉ trả về nội dung tài liệu. |
id | path | string | không | /{id} (GET, PUT, POST, PATCH, DELETE), /{id}/versions, /{id}/versions/{n}. |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/json-store" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Cấu hình","public":true,"data":{"theme":"dark","flags":{"beta":true,"old":1}}}'const res = await fetch('https://apibox.io.vn/v1/json-store', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "Cấu hình",
"public": true,
"data": {
"theme": "dark",
"flags": {
"beta": true,
"old": 1
}
}
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/json-store",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"name": "Cấu hình", "public": True, "data": {"theme": "dark", "flags": {"beta": True, "old": 1}}},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/json-store');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"name":"Cấu hình","public":true,"data":{"theme":"dark","flags":{"beta":true,"old":1}}}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"id": "js_vb1uxwnz96v8s4nvmydv",
"name": "Cấu hình",
"url": "https://apibox.io.vn/v1/json-store/js_vb1uxwnz96v8s4nvmydv",
"public": true,
"size": 46,
"version": 1,
"expires_at": null,
"created_at": "2026-11-11T03:21:15.000Z",
"updated_at": "2026-11-11T03:21:15.000Z",
"data": {
"theme": "dark",
"flags": {
"beta": true,
"old": 1
}
}
}
Ứng dụng
- Lưu feature flag hoặc cấu hình từ xa cho ứng dụng mà không cần backend
- Lưu trạng thái cho bản prototype, dự án hackathon, công cụ no-code
- Công bố bộ dữ liệu JSON nhỏ để front-end đọc mà không cần key
- Chia sẻ dữ liệu test giữa các job CI, có lịch sử phiên bản
Hỏi đáp
Tài liệu công khai có đọc được mà không cần API key không?
Có, GET /v1/json-store/{id} không kèm key sẽ trả JSON thô nếu tài liệu ở chế độ công khai. Mọi thao tác ghi luôn cần key của chủ sở hữu.
Làm sao để không ghi đè thay đổi của người khác?
Đọc version trước, rồi gửi if_version (hoặc If-Match: "v<n>") kèm PUT / PATCH. Nếu tài liệu đã đổi trong lúc đó, bạn nhận lỗi 409 version_conflict.
Khi tài liệu hết hạn thì sao?
Sau ttl_seconds, tài liệu trả về 404 và bị xoá cùng các phiên bản trong lượt dọn dẹp hằng ngày.
API liên quan
Kiểm tra JSON
Kiểm tra cú pháp JSON, báo đúng dòng và cột bị lỗi, và validate dữ liệu theo JSON Schema (draft 4, 7, 2019-09 hoặc 2020-12).
{ }Định dạng JSON
Làm đẹp JSON với thụt lề 0-8 dấu cách hoặc tab, rút gọn (minify) hoặc sắp xếp key theo bảng chữ cái. Báo lỗi cú pháp kèm dòng và cột.
CSVCSV sang JSON
Chuyển CSV thành mảng object JSON theo dòng tiêu đề, tự nhận dấu phân cách, tự chuyển số và boolean, báo lỗi từng dòng.