REST API · Node.js

Geo API. Countries, states & cities

Tra cứu dữ liệu địa lý toàn cầu qua HTTP: danh sách quốc gia, tỉnh/bang, thành phố, múi giờ và tìm kiếm. Tất cả trả về JSON.

Base URL  https://geo.empatydev.net Format  JSON Auth  Bearer token Method  GET

01Xác thực

API bảo vệ bằng Bearer token. Đặt token qua biến môi trường API_TOKEN khi chạy server, rồi gửi kèm mỗi request.

# Chạy server có token
API_TOKEN=your-secret-key npm start

Mỗi request phải kèm header:

Authorization: Bearer your-secret-key
# Ví dụ với curl
curl -H "Authorization: Bearer your-secret-key" \
     https://geo.empatydev.net/countries

# Ví dụ với fetch (JavaScript)
fetch("https://geo.empatydev.net/countries", {
  headers: { "Authorization": "Bearer your-secret-key" }
})
Thiếu hoặc sai token401 Unauthorized. So sánh token dùng thuật toán constant-time (chống timing attack). Nếu không đặt API_TOKEN, server chạy chế độ mở (dev) — không yêu cầu token.

02Quốc gia

Danh sách quốc gia và chi tiết một quốc gia (kèm múi giờ, bản dịch tên).

GET/countries

Danh sách tất cả quốc gia (thông tin cơ bản, ~5KB).

GET/countries/:cc

Chi tiết đầy đủ một quốc gia: cờ, tiền tệ, vùng, múi giờ, bản dịch.

# Chi tiết nước Mỹ
curl https://geo.empatydev.net/countries/US

# Kết quả (rút gọn)
{ "name": "United States", "iso2": "US",
  "currency": "USD", "capital": "Washington", "emoji": "🇺🇸" }

03Tỉnh / Bang

Các tỉnh/bang trong một quốc gia, hoặc chi tiết một tỉnh cụ thể.

GET/state/:cc

Tất cả tỉnh/bang của quốc gia.

GET/state/:cc/:sc

Chi tiết một tỉnh/bang theo mã.

# Bang California của Mỹ
curl https://geo.empatydev.net/state/US/CA

04Thành phố

Thành phố theo tỉnh, theo quốc gia, hoặc toàn cầu.

GET/cities/:cc/:sc

Tất cả thành phố trong một tỉnh/bang. Khuyến nghị dùng route này.

GET/cities/:cc

Tất cả thành phố của một quốc gia.
⚠ Dữ liệu lớn — dùng thận trọng

GET/cities

Mọi thành phố trên thế giới.
⚠ 8MB+ — hiếm khi cần

# Thành phố trong bang CA của Mỹ
curl https://geo.empatydev.net/cities/US/CA

# Thành phố của Singapore (tỉnh mã "01")
curl https://geo.empatydev.net/cities/SG/01

06Tên nhanh

Lấy tên từ mã — nhẹ hơn khi chỉ cần tên hiển thị.

GET/name/country/:cc

Tên quốc gia, ví dụ "Japan".

GET/name/state/:cc/:sc

Tên tỉnh/bang, ví dụ "Texas".

07Múi giờ

Múi giờ của cả quốc gia, hoặc của một thành phố cụ thể.

GET/timezones/:cc

Mảng tên múi giờ của quốc gia.

GET/timezone/city/:cc/:sc?city=tên

Bắt buộc có ?city=. Tên phải khớp đúng với dữ liệu thành phố.

# Múi giờ của Los Angeles
curl "https://geo.empatydev.net/timezone/city/US/CA?city=Los%20Angeles"
# "America/Los_Angeles"

08Kiểm tra hợp lệ

Kiểm tra mã có tồn tại không. Luôn trả 200 với { "valid": true|false }.

GET/valid/country/:cc

Mã quốc gia có tồn tại?

GET/valid/state/:cc/:sc

Mã tỉnh/bang có tồn tại trong quốc gia đó?

curl https://geo.empatydev.net/valid/country/US   # {"valid":true}
curl https://geo.empatydev.net/valid/state/US/ZZ  # {"valid":false}

09Mã lỗi

Lỗi trả về JSON dạng { "error": "..." }.

Ý nghĩaKhi nào
200OKCó dữ liệu trả về
400Bad RequestThiếu ?q= hoặc ?city=
401UnauthorizedThiếu hoặc sai Bearer token
404Not FoundKhông tìm thấy dữ liệu / route sai
500Server ErrorLỗi nội bộ khi xử lý

10Bảng tra nhanh

Toàn bộ 14 route trong một bảng.

RouteTrả về
GET /countriesDanh sách quốc gia
GET /countries/:ccChi tiết một quốc gia
GET /state/:ccTỉnh/bang của quốc gia
GET /state/:cc/:scChi tiết một tỉnh/bang
GET /cities/:cc/:scThành phố trong tỉnh/bang
GET /cities/:ccThành phố cả quốc gia ⚠
GET /citiesMọi thành phố (8MB+) ⚠
GET /search/cities/:cc/:sc?q=Tìm thành phố theo tên
GET /name/country/:ccTên quốc gia
GET /name/state/:cc/:scTên tỉnh/bang
GET /timezones/:ccMúi giờ của quốc gia
GET /timezone/city/:cc/:sc?city=Múi giờ một thành phố
GET /valid/country/:ccKiểm tra mã quốc gia
GET /valid/state/:cc/:scKiểm tra mã tỉnh/bang