API mở – Xâm nhập mặn Sóc Trăng Phiên bản 1.0 · Cổng thông tin đấu nối dữ liệu quan trắc & dự báo

Nội dung
Giới thiệu Xác thực Hạn mức Định dạng phản hồi Mã lỗi stations observations forecast communes statistics Ví dụ tích hợp

Giới thiệu

API mở cung cấp dữ liệu quan trắc tài nguyên nước và kết quả dự báo xâm nhập mặn trên hệ thống sông, kênh chính tỉnh Sóc Trăng cho các cơ quan, đơn vị liên quan (Sở TN&MT, Sở NN&PTNT, các bên phối hợp) tự truy cập và lấy dữ liệu.

GET http://dubaoxnmst.hcmunre.edu.vn/api/v1/         → thông tin dịch vụ + danh sách endpoint (không cần key)

Xác thực

Mỗi cơ quan/đối tác được cấp một API key riêng (quản trị viên tạo tại trang Quản trị API). Gửi key theo một trong hai cách:

curl -H "X-API-Key: <API_KEY>" "http://dubaoxnmst.hcmunre.edu.vn/api/v1/stations"

# hoặc qua query string
curl "http://dubaoxnmst.hcmunre.edu.vn/api/v1/stations?api_key=<API_KEY>"
Key dùng thử: demo_public_readonly_key_2026 Sao chép
Chỉ đọc, hạn mức 500 request/ngày. Quản trị viên có thể tắt key này bất cứ lúc nào.

Mỗi key được gán một hoặc nhiều scope (phạm vi truy cập):

ScopeCho phép gọiÝ nghĩa
stations/stationsDanh sách & thông tin trạm quan trắc
observations/observationsDữ liệu quan trắc chuỗi thời gian (mực nước / lưu lượng / độ mặn)
forecast/forecastKết quả dự báo độ mặn từ mô hình AI
communes/communesMức xâm nhập mặn theo xã (hiện tại & dự báo)
statistics/statisticsThống kê tổng hợp toàn tỉnh

Hạn mức (rate limit)

Mỗi key có hạn mức số request/ngày (mặc định 5000, quản trị viên điều chỉnh được). Phản hồi kèm header:

Vượt hạn mức → HTTP 429 với mã lỗi rate_limited.

Định dạng phản hồi

{
  "success": true,
  "api_version": "1.0",
  "generated_at": "2026-09-06T20:00:00+07:00",
  "request": { "endpoint": "observations", "params": { ... } },
  "meta":    { "count": 100, "total": 5000, "limit": 1000, "offset": 0, "unit": { ... } },
  "data":    [ ... ]
}

Khi lỗi:

{
  "success": false,
  "api_version": "1.0",
  "error": { "code": "rate_limited", "message": "Đã vượt hạn mức ..." }
}

Mã lỗi & HTTP status

HTTPcodeNguyên nhân
400missing_param / bad_param / range_too_largeTham số thiếu hoặc sai định dạng
401missing_api_key / invalid_api_keyKhông gửi key hoặc key không tồn tại
403client_disabled / scope_forbiddenKey bị tắt hoặc không có scope tương ứng
404station_not_found / unknown_endpointMã trạm / endpoint không tồn tại
429rate_limitedVượt hạn mức request/ngày
500server_errorLỗi máy chủ

Endpoint

GET/stationsscope: stations

Danh sách toàn bộ trạm quan trắc kèm số đo mới nhất (mực nước, lưu lượng, độ mặn).

GET/stations/{ma_tram}scope: stations

Chi tiết một trạm + số đo mới nhất + khoảng thời gian dữ liệu sẵn có. 404 nếu mã trạm không tồn tại.

curl -H "X-API-Key: demo_public_readonly_key_2026" "http://dubaoxnmst.hcmunre.edu.vn/api/v1/stations/NGA_NAM"
GET/observationsscope: observations

Dữ liệu quan trắc chuỗi thời gian từ CSDL trung tâm, lọc theo trạm / yếu tố môi trường / khoảng thời gian.

Tham sốBắt buộcMô tả
stationCóMột hoặc nhiều mã trạm, phân tách bằng dấu phẩy. VD NGA_NAM,SOC_TRANG
paramKhôngsalinity · water_level · flow_rate · all (mặc định all)
from, toKhôngISO 8601 (2026-09-01 hoặc 2026-09-01T08:00:00). Mặc định 7 ngày gần nhất. Khoảng tối đa 366 ngày.
limit, offsetKhôngPhân trang. limit ≤ 5000 (mặc định 1000). meta.total = tổng số dòng khớp.
formatKhôngjson (mặc định) hoặc csv (tải file, có BOM UTF-8)
curl -H "X-API-Key: demo_public_readonly_key_2026" \
  "http://dubaoxnmst.hcmunre.edu.vn/api/v1/observations?station=NGA_NAM,SOC_TRANG¶m=salinity&from=2026-08-01&to=2026-09-01&limit=500"

# Xuất CSV
curl -H "X-API-Key: demo_public_readonly_key_2026" \
  "http://dubaoxnmst.hcmunre.edu.vn/api/v1/observations?station=DAI_NGAI¶m=all&format=csv" -o dai_ngai.csv
GET/forecastscope: forecast

Kết quả dự báo độ mặn theo giờ từ mô hình AI (RandomForestRegressor). meta.model_generated_at cho biết thời điểm mô hình chạy gần nhất; meta.stations_with_forecast liệt kê các trạm có dự báo.

Tham sốMô tả
stationMã trạm (tuỳ chọn, nhiều mã cách nhau bằng dấu phẩy). Bỏ trống = tất cả trạm có dự báo.
from, toLọc theo forecast_time (ISO 8601)
formatjson / csv
curl -H "X-API-Key: demo_public_readonly_key_2026" "http://dubaoxnmst.hcmunre.edu.vn/api/v1/forecast?station=NGA_NAM"
GET/communesscope: communes

Mức xâm nhập mặn theo xã/phường (giá trị và cấp cảnh báo) – dùng để tô bản đồ ở hệ thống bên thứ ba.

Tham sốMô tả
day0 = hiện tại (mặc định); 1–10 = dự báo nội suy theo xu hướng quan trắc 72h.
formatjson / csv
curl -H "X-API-Key: demo_public_readonly_key_2026" "http://dubaoxnmst.hcmunre.edu.vn/api/v1/communes?day=3"
GET/statisticsscope: statistics

Thống kê tổng hợp toàn tỉnh: số trạm, số xã có dữ liệu, phân bố cấp mặn, độ mặn trung bình/cao nhất, mốc cập nhật gần nhất.

curl -H "X-API-Key: demo_public_readonly_key_2026" "http://dubaoxnmst.hcmunre.edu.vn/api/v1/statistics"

Phân cấp độ mặn (dùng chung mọi endpoint)

CấpGiá trị (‰)Nhãn
fresh< 0.5Ngọt
slight0.5 – 1.0Nhẹ
moderate1.0 – 4.0Trung bình
high4.0 – 8.0Cao
critical> 8.0Nguy hiểm

Ví dụ tích hợp

Python

import requests

BASE = "http://dubaoxnmst.hcmunre.edu.vn/api/v1"
KEY  = "demo_public_readonly_key_2026"

r = requests.get(f"{BASE}/observations",
    params={"station": "NGA_NAM,SOC_TRANG", "param": "salinity", "from": "2026-08-01"},
    headers={"X-API-Key": KEY}, timeout=30)
r.raise_for_status()
data = r.json()
print(data["meta"]["total"], "dòng")
for row in data["data"][:5]:
    print(row["thoi_gian"], row["ma_tram"], row["value"], "‰")

JavaScript (fetch)

const res = await fetch(
  "http://dubaoxnmst.hcmunre.edu.vn/api/v1/communes?day=2",
  { headers: { "X-API-Key": "demo_public_readonly_key_2026" } }
);
const { data } = await res.json();
data.forEach(c => console.log(c.name, c.salinity, c.level_label));

Cổng thông tin Xâm nhập mặn tỉnh Sóc Trăng · API v1.0 · Liên hệ quản trị hệ thống để được cấp API key.