Bir nechta domen bilan ishlaganda hamma narsani boshqaruv panelida qo'lda qilish qulay: domen qidiriladi, sotib olinadi, nom serverlari yoziladi, DNS yozuvlari qo'shiladi. Lekin mijozlar soni yuzdan oshganda yoki xizmatingiz har bir yangi mijoz uchun avtomatik ravishda domen yoki subdomen yaratishi kerak bo'lganda, qo'lda ishlash sekin va xatoga moyil bo'lib qoladi. Shu yerda domen API yordamga keladi: dastur registrator yoki DNS server bilan to'g'ridan-to'g'ri muloqot qiladi va inson aralashuvisiz bir xil amallarni bajaradi.
API orqali qaysi amallar bajariladi
Domen API odatda boshqaruv panelida qo'lda bajariladigan amallarning dasturiy ko'rinishidir. Eng ko'p ishlatiladigan amallar quyidagilar:
- domen bandligini tekshirish va narxini olish;
- yangi domenni ro'yxatdan o'tkazish va uzaytirish;
- nom serverlarini o'zgartirish va kontakt ma'lumotlarini yangilash;
- transfer kodini olish va transfer holatini kuzatish;
- DNS yozuvlarini qo'shish, o'zgartirish va o'chirish.
Registratorlar bu imkoniyatlarni ikki xil yo'l bilan taqdim etadi. Birinchisi EPP protokoli: u reyestr va akkreditatsiyalangan registratorlar o'rtasida ishlaydi, XML asosida qurilgan va maxsus ulanish, sertifikat hamda shartnoma talab qiladi. Ikkinchisi registratorning o'z REST yoki JSON API'si: u reseller va dasturchilar uchun mo'ljallangan, oddiy HTTPS so'rovlari bilan ishlaydi va kirish token yordamida tasdiqlanadi. Kichik va o'rta biznes uchun deyarli har doim ikkinchi yo'l to'g'ri tanlov hisoblanadi.
Bandlikni tekshirish va ro'yxatdan o'tkazish
Har qanday avtomatik buyurtma jarayoni bandlikni tekshirishdan boshlanadi. Quyidagi misolda shartli api.misol.uz manzili ishlatilgan, chunki har bir registratorning API manzili va so'rov formati o'ziga xos bo'ladi va parametrlar uning hujjatlaridan olinadi:
# Bir nechta domen bandligini tekshirish (manzil shartli, misol uchun)
curl -s -X POST https://api.misol.uz/v1/domains/check \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domains": ["example.uz", "example.com"]}'
Bandlikni mustaqil tekshirish uchun RDAP'dan ham foydalanish mumkin. Xalqaro domenlar uchun RDAP serveri domen topilmasa odatda 404 qaytaradi, lekin bu domen albatta bo'sh degani emas: zahiralangan yoki o'chirish navbatidagi nomlar ham bo'lishi mumkin. Shuning uchun RDAP natijasini faqat qo'shimcha tekshiruv sifatida ishlating, yakuniy qaror esa registrator API'sining javobiga asoslansin:
# 404 - reyestrda yozuv yo'q (bo'sh bo'lishi mumkin), 200 - band
curl -sL -o /dev/null -w "%{http_code}\n" https://rdap.org/domain/example.com
Bu yerda muhim bir qoida bor: mijozdan pul olishdan oldin domen haqiqatan bo'sh ekanini tekshiring va ro'yxatdan o'tish muvaffaqiyatli yakunlanganini tasdiqlab oling. Ro'yxatdan o'tish ko'pincha asinxron jarayon: API so'rovni qabul qilgani darhol domen sizniki bo'ldi degani emas. Holat "kutilmoqda" bo'lsa, uni ma'lum vaqt oralig'ida qayta so'rang yoki registrator taklif qilsa, webhook orqali xabar oling. Agar ro'yxatdan o'tish rad etilsa, tizimingiz mijozga pulni avtomatik qaytarishi yoki uni administratorga ko'rsatishi kerak.
Takroriy so'rovlar va xatolarga chidamlilik
Tarmoq uzilishi har qanday integratsiyada uchraydi. Agar dastur ro'yxatdan o'tish so'rovini yuborib, javobni kutayotganda ulanish uzilsa, u so'rovni qayta yuboradi va domen ikki marta to'lanishi mumkin. Buning oldini olish uchun ko'pchilik API'lar idempotentlik kalitini qo'llab-quvvatlaydi: bir xil kalit bilan kelgan ikkinchi so'rov yangi amal bajarmaydi, balki birinchi natijani qaytaradi. Quyidagi Python misolida shu yondashuv va qayta urinishlar orasidagi kutish vaqtining oshib borishi ko'rsatilgan:
import os, time, uuid, requests
API = "https://api.misol.uz/v1"
HEAD = {"Authorization": f"Bearer {os.environ['API_TOKEN']}"}
def register(domain, contact_id, years=1):
key = str(uuid.uuid4()) # bir xil so'rov ikki marta bajarilmasin
for attempt in range(3):
r = requests.post(f"{API}/domains", headers={**HEAD, "Idempotency-Key": key},
json={"domain": domain, "years": years, "contact": contact_id},
timeout=30)
if r.status_code < 500:
r.raise_for_status()
return r.json()
time.sleep(2 ** attempt)
raise RuntimeError("API javob bermadi")
E'tibor bering, qayta urinish faqat server xatolarida (5xx) amalga oshiriladi. Noto'g'ri parametr yoki yetarli balans yo'qligi kabi xatolarda qayta urinishdan foyda yo'q, ularni darhol log'ga yozib, odamga ko'rsatish kerak. Idempotency-Key sarlavhasini registratoringiz qo'llab-quvvatlashini hujjatlardan tekshiring, aks holda shunga o'xshash himoyani o'z bazangizda buyurtma holati orqali qurishingiz kerak bo'ladi.
DNS yozuvlarini avtomatlashtirish
DNS avtomatlashtirishga ehtiyoj ko'pincha domen ro'yxatdan o'tkazishdan ham ko'proq bo'ladi. Masalan, Toshkentdagi o'quv markazi uchun platforma har bir filialga chilonzor.misol.uz kabi subdomen yaratadi deylik. Subdomen uchun yangi domen sotib olish shart emas, faqat DNS zonaga yozuv qo'shish kifoya. Agar DNS registrator yoki xosting provayderida tursa, buni ularning API'si orqali, agar o'z BIND serveringiz bo'lsa, TSIG kaliti bilan himoyalangan dinamik yangilash orqali qilish mumkin:
# TSIG kalit yaratish (BIND 9)
tsig-keygen -a hmac-sha256 deploy-key > /etc/bind/keys/deploy.key
# A yozuvini almashtirish
nsupdate -k /etc/bind/keys/deploy.key <<'EOF'
server ns1.misol.uz
zone misol.uz
update delete shop.misol.uz. A
update add shop.misol.uz. 300 A 203.0.113.10
send
EOF
# Natijani tekshirish
dig +short shop.misol.uz @ns1.misol.uz
Dinamik yangilash ishlashi uchun zona sozlamasida shu kalitga yangilash ruxsati berilgan bo'lishi kerak, masalan, BIND'da update-policy yoki allow-update direktivasi orqali. Kalitga faqat kerakli zona yoki hatto faqat ma'lum nomlar uchun ruxsat bering.
Xavfsizlik: tokenlar, ruxsatlar va loglar
Domen API tokeni sizning barcha domenlaringiz va balansingizga kirish kalitidir. Uni hech qachon kod ichiga yozmang va Git omboriga joylamang: tokenni muhit o'zgaruvchisida yoki maxfiy ma'lumotlar omborida saqlang. Agar registrator IP manzil bo'yicha cheklov imkonini bersa, API'ga faqat serveringiz manzilidan kirishga ruxsat bering. Tokenga faqat kerakli huquqlarni bering: masalan, DNS yozuvlarini yangilaydigan skriptga domen transfer qilish yoki kontaktlarni o'zgartirish huquqi kerak emas.
Har bir API chaqiruvini, ayniqsa pul bilan bog'liq amallarni, vaqt, so'rov parametrlari va javob bilan birga log'ga yozing, lekin tokenning o'zini log'ga tushirmang. Shuningdek, registrator API'sining so'rovlar chegarasiga (rate limit) rioya qiling: juda tez-tez so'rov yuborsangiz, vaqtincha bloklanishingiz mumkin.
Avtomatlashtirishni bosqichma-bosqich joriy etish
Barcha jarayonni birdaniga avtomatlashtirishga shoshilmang. Avval faqat o'qish amallarini, masalan, bandlikni tekshirish va tugash sanalarini olishni ulang. Keyin DNS yozuvlarini yangilashni, eng oxirida esa pul yechiladigan ro'yxatdan o'tkazish va uzaytirishni qo'shing. Agar registrator test muhiti (sandbox) taklif qilsa, har bir yangi funksiyani avval o'sha yerda sinab ko'ring.
sayt.uz mijozlari domen, DNS va avto-uzaytirish sozlamalarini kabinetdan boshqaradi, API orqali integratsiya imkoniyatlari haqida esa texnik yordam orqali so'rash mumkin. Qaysi provayder bilan ishlamang, avtomatik tizim yonida qo'lda boshqarish imkoniyatini saqlab qoling: API vaqtincha ishlamay qolganda ham muhim domenni uzaytirish yoki DNS yozuvini tuzatish imkoni bo'lishi kerak.