Semver API
Phân tích, kiểm tra phiên bản theo Semantic Versioning, so sánh, kiểm tra range kiểu npm (^, ~, x, ||), sắp xếp danh sách và tính phiên bản major / minor / patch / pre-release tiếp theo.
API semver áp dụng đúng quy tắc của thư viện semver của npm, bản cài đặt tham chiếu của Semantic Versioning 2.0.0. Với version, API phân tích phiên bản (major, minor, patch, phần pre-release và build), so sánh với compare= (thấp hơn / cao hơn / bằng và khác ở phần nào), kiểm tra với range như ^1.2.0, ~3.4, >=2 <3, 1.x || 2.x hay 1.2.3 - 2.0.0, và liệt kê phiên bản tiếp theo cho mọi kiểu phát hành.
Với versions (mảng hoặc danh sách phân cách bằng dấu phẩy), API sắp xếp, báo các mục không hợp lệ, trả về phiên bản mới nhất và mới nhất ổn định, và khi có range thì liệt kê các phiên bản thoả mãn cùng phiên bản cao nhất, thấp nhất khớp, đúng cách trình quản lý gói chọn phiên bản.
coerce=true chuyển các chuỗi lỏng như v2, 1.2 hay release-3.4.1 thành phiên bản hợp lệ; bản pre-release chỉ khớp với range có nhắc tới chúng, trừ khi include_prerelease=true.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
version | query|body | string | không | Phiên bản cần phân tích. | |
compare | query|body | string | không | Phiên bản khác để so sánh. | |
range | query|body | string | không | Range kiểu npm, ví dụ ^1.2.0. | |
versions | query|body | string | không | Danh sách cần sắp xếp / lọc (mảng hoặc phân cách bằng dấu phẩy). | |
bump | query|body | string | không | major, minor, patch, premajor, preminor, prepatch, prerelease. | |
coerce | query|body | boolean | không | false | Chấp nhận chuỗi lỏng (v2, 1.2). |
include_prerelease | query|body | boolean | không | false | Cho range khớp cả pre-release. |
Ví dụ
curl "https://apibox.io.vn/v1/semver?versions=1.0.0,2.0.0-rc.1,1.10.0,1.2.0&range=>=1.2 <2" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch('https://apibox.io.vn/v1/semver?versions=1.0.0,2.0.0-rc.1,1.10.0,1.2.0&range=>=1.2 <2', {
method: 'GET',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
},
});
const data = await res.json();
console.log(data);import requests
res = requests.get(
"https://apibox.io.vn/v1/semver?versions=1.0.0,2.0.0-rc.1,1.10.0,1.2.0&range=>=1.2 <2",
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/semver?versions=1.0.0,2.0.0-rc.1,1.10.0,1.2.0&range=>=1.2 <2');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY'],
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"count": 4,
"sorted": [
"1.0.0",
"1.2.0",
"1.10.0",
"2.0.0-rc.1"
],
"invalid": [],
"latest": "2.0.0-rc.1",
"latest_stable": "1.10.0",
"range": ">=1.2 <2",
"normalized_range": ">=1.2.0 <2.0.0-0",
"satisfying": [
"1.10.0",
"1.2.0"
],
"max_satisfying": "1.10.0",
"min_satisfying": "1.2.0"
}
Ứng dụng
- Kiểm tra cập nhật trong ứng dụng, CLI
- Tự động hoá phát hành: tính phiên bản tiếp theo
- Dashboard dependency: phiên bản nào thoả range
- Sắp xếp tag, bản phát hành đúng thứ tự (1.10 sau 1.9)
Hỏi đáp
^1.2.3 cho phép những phiên bản nào?
Mọi phiên bản >=1.2.3 và <2.0.0. Với 0.x thì chặt hơn: ^0.2.3 nghĩa là >=0.2.3 <0.3.0.
Vì sao 2.0.0-rc.1 không thoả >=1.0.0?
Theo quy tắc npm, pre-release chỉ khớp với điều kiện có pre-release trên cùng phiên bản. Dùng include_prerelease=true để tính cả chúng.
Vì sao 1.10.0 đứng sau 1.9.0?
Mỗi phần được so sánh như số, khác với sắp xếp chuỗi thông thường.
API liên quan
Tạo UUID
Sinh tối đa 1.000 UUID v4, UUID v7 theo thời gian, ULID, Nano ID hoặc mã hex ngẫu nhiên mỗi request. Ngẫu nhiên an toàn, hỗ trợ chữ in hoa.
⏱Phân tích biểu thức cron
Kiểm tra biểu thức cron và xem các lần chạy tiếp theo theo múi giờ bất kỳ, kèm mô tả dễ hiểu. Hỗ trợ cú pháp cron 5, 6 và 7 trường.
🕒Giờ & múi giờ
Lấy giờ hiện tại ở mọi múi giờ, đổi giữa các múi giờ và Unix timestamp (giây hoặc mili giây), kèm độ lệch UTC và thứ trong tuần cho tối đa 30 múi giờ.