Registration Data Access Protocol (RDAP) – це протокол доступу до реєстраційних даних із реєстра доменних імен. Він є наступником протоколу WHOIS. На відміну від WHOIS, RDAP надає дані в машиночитному форматі JavaScript Object Notation (JSON). RDAP базується на веб-службах RESTful API, що використовують протокол HTTPs.
Призначений для отримання інформації про об’єкти, зареєстровані в Реєстрі доменних імен:
Запити щодо доменів .UA та інших об’єктів, що обслуговується Реєстром,
мають бути надіслані на сервер
https://rdap.hostmaster.ua
наступним чином:
Клієнти можуть звертатися до сервера за протоколом HTTPs з використанням GET та HEAD методів, сервер на них формує відповіді. Запити з використанням інших методів не обробляються.
Допустиме значення заголовку Accept у HTTP-запиті:
Accept: application/rdap+json
Якщо сервер має інформацію за отриманим запитом, він повертає код відповіді 200 OK та об’єкт відповіді JSON (RFC9083).
Якщо сервер не має інформації, що відповідає на запит, він повертає код відповіді 404 Not found.
Якщо на сервері немає інформації, яка є відповіддю на запит, але відомо, де інформація може бути знайдена, сервер повертає відповідь перенаправлення (3xx) із заголовком Location, що містить URL-адресу HTTP(S), що вказує на інший сервер, який може мати запитувану інформацію.
Якщо у запиті до сервера є додаткові параметри, вони ігноруються сервером.
Кодування запитів та відповідей сервера – UTF-8
Залежно від результату обробки запиту сервер поверне код відповіді:
200 OK
– об’єкт знайдено, інформація передана в тілі відповіді302 Found
– сервер направив запит до іншого авторитетного сервера RDAP404 Not Found
– об’єкт не зареєстрований в реєстрі400 Bad Request
– некоректний запит – сервер не прийняв його405 Method Not Allowed
– сервер приймає лише запити GET та HEAD429 Too Many Requests
– перевищено ліміт запитів до сервера403 Forbidden
– клієнт заблокований через зловживання501 Not Implemented
– домен не обслуговується Реєстром і
не має інформації про службу RDAP, яка є авторитетною.500 Internal Server Error
– помилка сервераЗапит:
https://rdap.hostmaster.ua/domain/<domain>
"rdapConformance": | ["rdap_level_0"], | |
"objectClassName": | "domain", | тип об’єкта – domain |
"handle": | "example.ua", | ідентифікатор об’єкта – доменне ім'я |
"ldhName": | "example.ua", | доменне ім'я |
"unicodeName": | "" | доменне ім'я в UNICODE (якщо доменне ім'я в punycode) |
"nameservers": | […] | масив DNS-серверів |
"entities": | […] | масив даних щодо реєстратора та контактів домену |
"status": | […] | масив статусів домену |
"secureDNS": | […] | інформація щодо DNSSEC |
"events": | […] | масив подій (дати створення, закінчення реєстрації, останньої зміни) |
"links": | […] | посилання на об’єкт |
"remarks": | […] | примітки (номер ліцензії для доменів .UA тощо) |
"port43": | "whois.ua" | whois сервер |
Запит:
https://rdap.hostmaster.ua/nameserver/<hostname>
Запит:
https://rdap.hostmaster.ua/entity/<registrar>
Запит:
https://rdap.hostmaster.ua/entity/<contact-id>
Варіанти "roles": ["registrant", "administrative", "technical"].
В окремому запиті entity element "roles" не використовується, тільки в інформації по домену.
Загальні елементи, які можуть бути присутніми на всіх відповідях сервера:
"rdapConformance":["rdap_level_0"]
"links":[
{"rel":"self",
"value":"https://rdap.hostmaster.ua/domain/example.ua",
"type":"application/rdap+json",
"href":"https://rdap.hostmaster.ua/domain/example.ua"
}]
"notices":[
{"title":"Terms of Use",
"description":["See https://www.hostmaster.ua/rdap"]
}]
Інформація про те, що деякі дані в контактах приховано:
"remarks":[
{"title":"Data Policy",
"description":["Some of the data in this object has been removed."]
}]
Номер ТМ в доменах другого рівня .UA
"remarks":[
{"description":["license: 9999999"]}
]
Інформація про те, що домен є публічним
"remarks":[
{"description":["dom-public: YES"]}
]
Кожна подія містить поля:
Значення поля eventAction для об’єктів domain:
Значення поля eventAction для об’єктів nameserver та entity:
Для об’єктів entity-реєстратори блок events не використовується. Якщо ініціатор події Реєстр, то поле eventActor не зазначається.
Приклад:
"events":[
{"eventAction":"registration",
"eventDate":"2010-09-01T08:01:01+03:00",
"eventActor":"ua.xxxxxx"},
{"eventAction":"last changed",
"eventDate":"2023-11-02T21:15:29+02:00",
"eventActor":"ua.xxxxxx"},
{"eventAction":"expiration",
"eventDate":"2024-09-01T08:01:01+03:00"}
]
RFC8056 “Extensible Provisioning Protocol (EPP) and Registration Data Access Protocol (RDAP) Status Mapping” описує перетворення статусів EPP в RDAP.
Статуси, що використовуються в EPP перетворюються наступним чином: (зазначено типи об’єктів, щодо яких може бути застосований статус. При цьому об’єкт “entity” призначений для контактів доменного імені та контакту реєстратора):
EPP | RDAP | об’єкти |
---|---|---|
autoRenewGracePeriod | "auto renew period" | (domain) |
clientDeleteProhibited | "client delete prohibited" | (domain, entity, nameserver) |
clientHold | "client hold" | (domain) |
clientRenewProhibited | "client renew prohibited" | (domain) |
clientTransferProhibited | "client transfer prohibited" | (domain) |
clientUpdateProhibited | "client update prohibited | (domain, entity, nameserver) |
inactive | "inactive" | (domain) |
linked | "associated" | (entity, nameserver) |
ok | "active" | (domain, entity, nameserver) |
pendingCreate | "pending create" | (domain) |
pendingDelete | "pending delete" | (domain) |
pendingTransfer | "pending transfer" | (domain) |
pendingUpdate | "pending update" | (domain) |
redemptionPeriod | "redemption period" | (domain) |
serverDeleteProhibited | "server delete prohibited" | (domain, entity, nameserver) |
serverRenewProhibited | "server renew prohibited" | (domain) |
serverTransferProhibited | "server transfer prohibited" | (domain) |
serverUpdateProhibited | "server update prohibited" | (domain, entity, nameserver) |
serverHold | "server hold" | (domain) |
Окрім статусів EPP, для об’єктів “entity” – контакти доменів може застосовуватися статус “private”, якщо контакт містить інформацію, закриту реєстратором
Приклад:"status":["active","associated","private"]
Опис елемента "vcardArray" об’єкту entity для реєстраторів
Масив "vcardArray" містить елемент "vcard" - дані про реєстратора, представлені у форматі jCard (RFC7095): назва підприємства реєстратора, адреса для скарг, номер телефона, e-mail, url сайту
Приклад:
"vcardArray": [
"vcard",[
[ "version", {}, "text", "4.0" ],
["fn",{},"text","Orgname"],
["adr",{
"type":"work",
"label":"02000, Ukraine, Kyiv, Tarasa Shevchenka Ln, 1, 2"},
"text",["","","","Kyiv","","","UA"]],
["tel",{"type":["voice"]},"uri","tel:+3804455555555"],
["email",{},"text","[email protected]"],
["url",{"type":"home"},"uri","https://example.ua/"]
]]
Опис елемента "vcardArray" об’єкту entity для контактів доменів
Масив "vcardArray" містить елемент "vcard" - дані про контакт, представлені у форматі jCard (RFC7095): ім'я та/або назва організації, адреса, номер телефона, e-mail
Приклад:
"vcardArray": [
"vcard",[
[ "version", {}, "text", "4.0" ],
["fn",{},"text","Orgname"],
["fn",{"altid":"1"},"text","Name"],
["fn",{"altid":"2"},"text","Ім'я"],
["org",{"altid":"1"},
"text",
"OrgName"],
["org",{"altid":"2"},
"text",
"Назва організації"],
["adr",{"altid":"1"},
"text",
["","building","the street","KYIV","","02000","Ukraine"]],
["adr",{"altid":"2"},
"text",
["","будинок","вулиця","КИЇВ","","02000","Ukraine"]],
["tel",{"type": ["voice"]},"text","+380.445555555"],
["email",{},"text","[email protected]"]
]]
Деякі або всі дані контакта домену можуть бути закрити для перегляду реєстратором. В такому разі об'єкт доповнюється статусом "private" та елементом remarks:
"remarks":[{
"title":"Data Policy",
"description":["Some of the data in this object has been removed."]
}]
Якщо в текстових полях блоку vcard зустрічаються перераховані нижче спецсимволи, вони екрануються символом «\» (U+005E) згідно з RFC6868:
"secureDNS" - елемент об'єкта domain, що включає опис
DS-записів домену (RFC4034). Блок завжди присутній в об'єкті, незалежно,
чи є в реєстрі DS-записи для домену. Якщо DS-записів немає, то
виводиться лише "delegationSigned":"false"
.
Масив складається з елементів: