Бир нечта домен билан ишлаганда ҳамма нарсани бошқарув панелида қўлда қилиш қулай: домен қидирилади, сотиб олинади, ном серверлари ёзилади, DNS ёзувлари қўшилади. Лекин мижозлар сони юздан ошганда ёки хизматингиз ҳар бир янги мижоз учун автоматик равишда домен ёки субдомен яратиши керак бўлганда, қўлда ишлаш секин ва хатога мойил бўлиб қолади. Шу ерда домен API ёрдамга келади: дастур регистратор ёки DNS сервер билан тўғридан-тўғри мулоқот қилади ва инсон аралашувисиз бир хил амалларни бажаради.
API орқали қайси амаллар бажарилади
Домен API одатда бошқарув панелида қўлда бажариладиган амалларнинг дастурий кўринишидир. Энг кўп ишлатиладиган амаллар қуйидагилар:
- домен бандлигини текшириш ва нархини олиш;
- янги доменни рўйхатдан ўтказиш ва узайтириш;
- ном серверларини ўзгартириш ва контакт маълумотларини янгилаш;
- трансфер кодини олиш ва трансфер ҳолатини кузатиш;
- DNS ёзувларини қўшиш, ўзгартириш ва ўчириш.
Регистраторлар бу имкониятларни икки хил йўл билан тақдим этади. Биринчиси EPP протоколи: у реестр ва аккредитацияланган регистраторлар ўртасида ишлайди, XML асосида қурилган ва махсус уланиш, сертификат ҳамда шартнома талаб қилади. Иккинчиси регистраторнинг ўз REST ёки JSON API'си: у реселлер ва дастурчилар учун мўлжалланган, оддий HTTPS сўровлари билан ишлайди ва кириш токен ёрдамида тасдиқланади. Кичик ва ўрта бизнес учун деярли ҳар доим иккинчи йўл тўғри танлов ҳисобланади.
Бандликни текшириш ва рўйхатдан ўтказиш
Ҳар қандай автоматик буюртма жараёни бандликни текширишдан бошланади. Қуйидаги мисолда шартли api.misol.uz манзили ишлатилган, чунки ҳар бир регистраторнинг API манзили ва сўров формати ўзига хос бўлади ва параметрлар унинг ҳужжатларидан олинади:
# 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"]}'
Бандликни мустақил текшириш учун RDAP'дан ҳам фойдаланиш мумкин. Халқаро доменлар учун RDAP сервери домен топилмаса одатда 404 қайтаради, лекин бу домен албатта бўш дегани эмас: заҳираланган ёки ўчириш навбатидаги номлар ҳам бўлиши мумкин. Шунинг учун RDAP натижасини фақат қўшимча текширув сифатида ишлатинг, якуний қарор эса регистратор API'сининг жавобига асослансин:
# 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
Бу ерда муҳим бир қоида бор: мижоздан пул олишдан олдин домен ҳақиқатан бўш эканини текширинг ва рўйхатдан ўтиш муваффақиятли якунланганини тасдиқлаб олинг. Рўйхатдан ўтиш кўпинча асинхрон жараён: API сўровни қабул қилгани дарҳол домен сизники бўлди дегани эмас. Ҳолат "кутилмоқда" бўлса, уни маълум вақт оралиғида қайта сўранг ёки регистратор таклиф қилса, webhook орқали хабар олинг. Агар рўйхатдан ўтиш рад этилса, тизимингиз мижозга пулни автоматик қайтариши ёки уни администраторга кўрсатиши керак.
Такрорий сўровлар ва хатоларга чидамлилик
Тармоқ узилиши ҳар қандай интеграцияда учрайди. Агар дастур рўйхатдан ўтиш сўровини юбориб, жавобни кутаётганда уланиш узилса, у сўровни қайта юборади ва домен икки марта тўланиши мумкин. Бунинг олдини олиш учун кўпчилик API'лар идемпотентлик калитини қўллаб-қувватлайди: бир хил калит билан келган иккинчи сўров янги амал бажармайди, балки биринчи натижани қайтаради. Қуйидаги Python мисолида шу ёндашув ва қайта уринишлар орасидаги кутиш вақтининг ошиб бориши кўрсатилган:
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")
Эътибор беринг, қайта уриниш фақат сервер хатоларида (5xx) амалга оширилади. Нотўғри параметр ёки етарли баланс йўқлиги каби хатоларда қайта уринишдан фойда йўқ, уларни дарҳол логга ёзиб, одамга кўрсатиш керак. Idempotency-Key сарлавҳасини регистраторингиз қўллаб-қувватлашини ҳужжатлардан текширинг, акс ҳолда шунга ўхшаш ҳимояни ўз базангизда буюртма ҳолати орқали қуришингиз керак бўлади.
DNS ёзувларини автоматлаштириш
DNS автоматлаштиришга эҳтиёж кўпинча домен рўйхатдан ўтказишдан ҳам кўпроқ бўлади. Масалан, Тошкентдаги ўқув маркази учун платформа ҳар бир филиалга chilonzor.misol.uz каби субдомен яратади дейлик. Субдомен учун янги домен сотиб олиш шарт эмас, фақат DNS зонага ёзув қўшиш кифоя. Агар DNS регистратор ёки хостинг провайдерида турса, буни уларнинг API'си орқали, агар ўз BIND серверингиз бўлса, TSIG калити билан ҳимояланган динамик янгилаш орқали қилиш мумкин:
# 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
Динамик янгилаш ишлаши учун зона созламасида шу калитга янгилаш рухсати берилган бўлиши керак, масалан, BIND'да update-policy ёки allow-update директиваси орқали. Калитга фақат керакли зона ёки ҳатто фақат маълум номлар учун рухсат беринг.
Хавфсизлик: токенлар, рухсатлар ва логлар
Домен API токени сизнинг барча доменларингиз ва балансингизга кириш калитидир. Уни ҳеч қачон код ичига ёзманг ва Git омборига жойламанг: токенни муҳит ўзгарувчисида ёки махфий маълумотлар омборида сақланг. Агар регистратор IP манзил бўйича чеклов имконини берса, API'га фақат серверингиз манзилидан киришга рухсат беринг. Токенга фақат керакли ҳуқуқларни беринг: масалан, DNS ёзувларини янгилайдиган скриптга домен трансфер қилиш ёки контактларни ўзгартириш ҳуқуқи керак эмас.
Ҳар бир API чақирувини, айниқса пул билан боғлиқ амалларни, вақт, сўров параметрлари ва жавоб билан бирга логга ёзинг, лекин токеннинг ўзини логга туширманг. Шунингдек, регистратор API'сининг сўровлар чегарасига (rate limit) риоя қилинг: жуда тез-тез сўров юборсангиз, вақтинча блокланишингиз мумкин.
Автоматлаштиришни босқичма-босқич жорий этиш
Барча жараённи бирданига автоматлаштиришга шошилманг. Аввал фақат ўқиш амалларини, масалан, бандликни текшириш ва тугаш саналарини олишни уланг. Кейин DNS ёзувларини янгилашни, энг охирида эса пул ечиладиган рўйхатдан ўтказиш ва узайтиришни қўшинг. Агар регистратор тест муҳити (sandbox) таклиф қилса, ҳар бир янги функцияни аввал ўша ерда синаб кўринг.
sayt.uz мижозлари домен, DNS ва авто-узайтириш созламаларини кабинетдан бошқаради, API орқали интеграция имкониятлари ҳақида эса техник ёрдам орқали сўраш мумкин. Қайси провайдер билан ишламанг, автоматик тизим ёнида қўлда бошқариш имкониятини сақлаб қолинг: API вақтинча ишламай қолганда ҳам муҳим доменни узайтириш ёки DNS ёзувини тузатиш имкони бўлиши керак.