GoDaddy DNS API - Создание модуля с многочисленными командами

РЕДАКТИРОВАТЬ: я ищу помощь по API GoDaddy и как сформировать запрос, чтобы я мог удалить запись. Я могу заменить записи и добавить новые записи и, конечно, читать записи. Мне не нужна помощь по сборке модуля. Просто возникла проблема с поиском части REST API для удаления на GoDaddy с помощью API.

Я нашел это: Ошибка 422 при использовании Powershell для обновления записей DNS на API GoDaddy

Это дало мне хорошее начало. У меня есть ряд функций, которые я уже написал для создания или изменения различных типов записей. Я многому научился по пути. То, что я до сих пор не могу понять, это как использовать API для удаления существующей записи, которая больше не нужна.

Я обнаружил, что если бы у меня была существующая запись с тем же именем и типом, и я попытался создать новую, она заменила бы то, что было там, новым значением. Если это просто запись A и это ваше желание, это здорово. Но если это запись MX или NS, это, вероятно, не желаемый результат. Я работаю над вспомогательными функциями, чтобы убедиться, что я не удаляю существующие записи перед публикацией в мой модуль.

Я относительно новичок в чтении документации по API и работе с REST API, поэтому, возможно, я просто упускаю что-то простое, но если бы кто-нибудь мог дать мне несколько советов о том, как настроить мой вызов, чтобы я мог очистить записи, которые больше не нужны.

У меня также есть некоторые проблемы с форматированием записи SRV, чтобы она не вылетала при звонке. Я не уверен, где моя проблема, и я не вижу ничего в документации разрешенных / ожидаемых значений для протокола, службы и т. Д.

Вот выдержка из моего кода, куда я звоню:

try{
    $ret = Invoke-WebRequest https://api.godaddy.com/v1/domains/domain/records/$type/$alias -method put -headers $headers -Body $json -ContentType "application/json"
    if ($ret.StatusCode -eq 200) { Write-Verbose -Message "Success!" }
    else { Write-Warning -Message "ERROR" }
} catch {
    $result = $_.Exception.Response.GetResponseStream()
    $reader = New-Object System.IO.StreamReader($result)
    $reader.BaseStream.Position = 0
    $reader.DiscardBufferedData()
    $responseBody = $reader.ReadToEnd();
    $responseBody = $responseBody | ConvertFrom-Json | Format-Custom | Out-String
    Write-Warning -Message "ERROR: $responseBody"
}

Вы узнаете этот блок кода, поскольку он в значительной степени взят из вышеупомянутого поста. Я передаю $type в качестве допустимого типа записи (A, CNAME и т. Д.). $alias - это имя существующей записи. $headers - это правильно отформатированный заголовок с правильной парой ключ / секрет (я могу получить и поставить другие записи). Я попытался полностью опустить тело, чтобы удалить значение, и это не удается. Я попытался сделать тело с пустым набором JSON ([], [{}]), а также передать данные и значения TTL без значения в JSON. Я не могу получить успешный запрос на работу. Я тестирую со следующим:

Invoke-WebRequest "https://api.godaddy.com/v1/domains/mydomain/records/A/test2" -method put -headers $header -ContentType "application/json" -Body '[{}]'

Любое руководство или указатели на документацию, которую я не нашел, будет принята с благодарностью.

1 ответ

У меня была такая же проблема, речь идет о кодировке JSON. Я покажу вам пример PHP, который вы можете адаптировать к чему угодно. Формат, который предоставляет GoDaddy, выглядит следующим образом:

[{"":"","":"","":"",.....}]

Я не знаю, откуда берется [], но я их удаляю, анализ json с обычными функциями PHP:

$json = str_replace("]","",$json);

//print_r($json);

$json = json_decode($json,true);

Теперь вы получите полезный объект для работы.

Когда отправляете данные в GoDaddy, делайте то же самое (я использую curl)

$data = '[{"type":"'.$type.'","name":"'.$name.'","data":"'.$data.'","ttl":'.$ttl.'}]';

Полный пример, который я создаю для обновления динамического IP-адреса моего домашнего сервера:) Проверьте функции Update() и get ()

https://github.com/yo3hcv/Dynamic-DNS-hosting-home-or-mobile-with-GoDaddy/blob/master/pip.php

Это может быть полезно для других, так как я столкнулся с такой же неясностью при удалении записи DNS из домена Godaddy с помощью их API.

Godaddy не поддерживает удаление отдельной записи.

От их поддержки на вопрос, можно ли было удалить запись:

Уважаемый господин / госпожа,

Этот вызов API в настоящее время не существует, и в нашем журнале есть что-то, что нужно создать, но нет ETA для его создания. Current вы можете использовать конечную точку Put для типа записи, чтобы заменить все, кроме той, которую вы не хотите сохранять, или вы можете зайти в наш пользовательский интерфейс, чтобы удалить ее таким образом.

Смотрите их API-документацию, чтобы узнать, что доступно (на эту дату июль 2020 г.).

Однако вы можете заменить все существующие записи новым набором. Итак, предположим, у вас есть три записи A с поддоменами SD1, SD2 и SD3, и вы хотите удалить SD2. Вы можете отправить команду обновления, используя:

curl -X PUT "https://api.godaddy.com/v1/domains/<yourdomain>/records/A" -H "accept: application/json" -H "Content-Type: application/json" -H "Authorization: <yourAPIKEY>" -d "[ { \"data\": \"<IP for SD1>\", \"name\": \"SD1\", \"ttl\": 3600 }, { \"data\": \"<IP for SD3>\", \"name\": \"SD3\", \"ttl\": 3600 }]"

В результате появятся две записи A: одна для SD1 и одна для SD3. Пока у вас остался хотя бы один тип записи (это также работает для MX, MS, TXT), вы сможете удалить другие.

Если вы хотите удалить последнее, к сожалению, вам придется вернуться в графический интерфейс Godaddy.

Другие вопросы по тегам