API de pesquisa de DNS: consulte registros A, MX e TXT em REST
Procure registros DNS programaticamente com três endpoints REST. Consulte tipos de registro únicos, agrupe vários tipos e verifique a propagação no Google, Cloudflare e Quad9.
Seu script de monitoramento precisa verificar os registros MX após uma migração de DNS. Você poderia instalar
dig, analise sua saída multilinha com regex e lide com uma dúzia de casos extremos
onde o formato varia entre os tipos de registro. Ou você pode enviar uma solicitação HTTP e obter
JSON estruturado de volta.
A API botoi DNS oferece três pontos de extremidade: pesquisa de tipo único, pesquisa em lote para vários tipos de registro de uma só vez e um verificador de propagação que consulta Google, Cloudflare e Quad9 em paralelo. Todos os três retornam JSON consistente que você pode alimentar em qualquer script ou aplicativo sem analisar a ginástica.
Procure um único tipo de registro
O /v1/dns/lookup endpoint usa um domínio e um tipo de registro opcional. Se
você omite o tipo, o padrão é registros A. Aqui está uma pesquisa MX para stripe.com:
curl -X POST https://api.botoi.com/v1/dns/lookup \\
-H "Content-Type: application/json" \\
-d '{"domain": "stripe.com", "type": "MX"}'
Resposta:
{
"success": true,
"data": {
"domain": "stripe.com",
"type": "MX",
"records": [
{ "type": "MX", "value": "aspmx.l.google.com", "priority": 1, "ttl": 3600 },
{ "type": "MX", "value": "alt1.aspmx.l.google.com", "priority": 5, "ttl": 3600 },
{ "type": "MX", "value": "alt2.aspmx.l.google.com", "priority": 5, "ttl": 3600 },
{ "type": "MX", "value": "alt3.aspmx.l.google.com", "priority": 10, "ttl": 3600 },
{ "type": "MX", "value": "alt4.aspmx.l.google.com", "priority": 10, "ttl": 3600 }
],
"query_time_ms": 14
}
}
Cada registro MX retorna com um priority campo e um ttl em
segundos. Não há necessidade de dividir strings ou adivinhar qual número é a prioridade; a API faz
isso para você.
Registros TXT para SPF e verificação
Os registros TXT contêm políticas SPF, tokens de propriedade de domínio e seletores DKIM. Pergunte-lhes o da mesma forma:
curl -X POST https://api.botoi.com/v1/dns/lookup \\
-H "Content-Type: application/json" \\
-d '{"domain": "github.com", "type": "TXT"}'
Resposta:
{
"success": true,
"data": {
"domain": "github.com",
"type": "TXT",
"records": [
{ "type": "TXT", "value": "v=spf1 ip4:192.30.252.0/22 include:_netblocks.google.com ~all", "ttl": 3600 },
{ "type": "TXT", "value": "MS=ms58704441", "ttl": 3600 },
{ "type": "TXT", "value": "docusign=087098e3-3d46-47b7-9b4e-8a23028154cd", "ttl": 3600 }
],
"query_time_ms": 11
}
}
A API oferece suporte a oito tipos de registro: A, AAAA, MX, TXT, CNAME, NS, SOA e PTR. Cada
type retorna o mesmo formato estruturado com type, value, e
ttl campos.
Consulte vários tipos de registros de uma só vez
Quatro chamadas HTTP separadas para obter registros A, MX, TXT e NS são um desperdício. O
/v1/dns/batch endpoint executa todas as pesquisas em paralelo e retorna o
resultados agrupados por tipo.
curl -X POST https://api.botoi.com/v1/dns/batch \\
-H "Content-Type: application/json" \\
-d '{"domain": "github.com", "types": ["A", "MX", "TXT", "NS"]}'
Resposta:
{
"success": true,
"data": {
"domain": "github.com",
"results": {
"A": [
{ "type": "A", "value": "140.82.121.3", "ttl": 60 }
],
"MX": [
{ "type": "MX", "value": "aspmx.l.google.com", "priority": 1, "ttl": 3600 },
{ "type": "MX", "value": "alt1.aspmx.l.google.com", "priority": 5, "ttl": 3600 },
{ "type": "MX", "value": "alt2.aspmx.l.google.com", "priority": 5, "ttl": 3600 }
],
"TXT": [
{ "type": "TXT", "value": "v=spf1 ip4:192.30.252.0/22 include:_netblocks.google.com ~all", "ttl": 3600 },
{ "type": "TXT", "value": "MS=ms58704441", "ttl": 3600 }
],
"NS": [
{ "type": "NS", "value": "dns1.p08.nsone.net", "ttl": 900 },
{ "type": "NS", "value": "dns2.p08.nsone.net", "ttl": 900 },
{ "type": "NS", "value": "dns3.p08.nsone.net", "ttl": 900 },
{ "type": "NS", "value": "dns4.p08.nsone.net", "ttl": 900 }
]
}
}
}
Uma solicitação, uma resposta, todos os quatro tipos de registro. Se você omitir o types
array, o ponto final é padronizado como A, AAAA, MX, TXT e NS. Isto é útil para construir
painéis de visão geral do domínio ou execução de auditorias DNS abrangentes.
Verifique a propagação do DNS entre resolvedores
Você atualizou seu registro A há 20 minutos. Seu resolvedor local mostra o novo IP, mas
clientes em outras regiões ainda acessam o servidor antigo. O /v1/dns/propagation
endpoint consulta três principais resolvedores públicos e informa se eles concordam.
curl -X POST https://api.botoi.com/v1/dns/propagation \\
-H "Content-Type: application/json" \\
-d '{"domain": "stripe.com", "type": "A"}'
Resposta:
{
"success": true,
"data": {
"domain": "stripe.com",
"type": "A",
"resolvers": {
"google": {
"records": ["185.166.143.28", "185.166.143.29"],
"response_time_ms": 18
},
"cloudflare": {
"records": ["185.166.143.28", "185.166.143.29"],
"response_time_ms": 9
},
"quad9": {
"records": ["185.166.143.28", "185.166.143.29"],
"response_time_ms": 22
}
},
"consistent": true
}
}
O consistent campo é true quando todos os três resolvedores retornam o
mesmo conjunto classificado de registros. Quando é false, o resolvers objeto
mostra exatamente qual resolvedor ainda está servindo dados obsoletos e quanto tempo levou cada consulta.
Exemplo prático: verifique os registros MX antes de aceitar inscrições
Um caso de uso comum: alguém entra user@typo-domain.cm em seu formulário de inscrição.
A validação de sintaxe é aprovada porque o formato está correto, mas o domínio não possui servidores de email.
Você descobrirá isso três dias depois, quando o e-mail de boas-vindas for devolvido.
Este exemplo do Node.js verifica os registros MX no momento da inscrição e rejeita endereços de e-mail apontando para domínios sem infraestrutura de correio:
import express from "express";
const app = express();
app.use(express.json());
async function lookupMx(domain) {
const res = await fetch("https://api.botoi.com/v1/dns/lookup", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Api-Key": process.env.BOTOI_API_KEY,
},
body: JSON.stringify({ domain, type: "MX" }),
});
return res.json();
}
app.post("/signup", async (req, res) => {
const { email } = req.body;
const domain = email.split("@")[1];
// Check if the domain has MX records before accepting the signup
const { data } = await lookupMx(domain);
if (!data.records || data.records.length === 0) {
return res.status(422).json({
error: \`The domain \\\${domain} has no mail servers. Check the email address and try again.\`,
});
}
// MX records exist; proceed with signup
await createUser({ email });
res.status(201).json({ created: true });
});
app.listen(3000);
A verificação adiciona 10 a 30 ms à solicitação de inscrição. Esse é um preço pequeno para evitar danos à reputação do remetente. Você também pode armazenar em cache os resultados MX por domínio por 30 minutos para evitar pesquisas repetidas para o mesmo domínio.
Monitore a propagação do DNS após uma migração
Depois de alterar os registros DNS, você deseja saber o momento em que todos os principais resolvedores atendem ao novo valores. Este script pesquisa o endpoint de propagação a cada 30 segundos e registra o estado de cada resolvedor:
async function checkPropagation(domain, type) {
const res = await fetch("https://api.botoi.com/v1/dns/propagation", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Api-Key": process.env.BOTOI_API_KEY,
},
body: JSON.stringify({ domain, type }),
});
return res.json();
}
// After updating DNS records, poll until all resolvers agree
async function waitForPropagation(domain, type, intervalMs = 30000) {
let attempts = 0;
while (attempts < 60) {
const { data } = await checkPropagation(domain, type);
console.log(
\`Attempt \\\${attempts + 1}: consistent=\\\${data.consistent}\`
);
for (const [name, info] of Object.entries(data.resolvers)) {
console.log(\` \\\${name}: \\\${JSON.stringify(info.records)}\`);
}
if (data.consistent) {
console.log("Propagation complete.");
return data;
}
attempts++;
await new Promise((r) => setTimeout(r, intervalMs));
}
throw new Error("Propagation did not complete within 30 minutes.");
}
// Usage
waitForPropagation("yourdomain.com", "A");
Execute isso como um trabalho em segundo plano depois de fazer alterações no DNS. Ele registra os registros de cada resolvedor em todas as tentativas e sai quando todos os três concordam. O intervalo de 30 segundos mantém você abaixo do limite de taxa do nível gratuito (5 solicitações por minuto).
Pontos-chave
-
/v1/dns/lookupretorna JSON estruturado para qualquer um dos oito suportados tipos de registro. Os registros MX incluem prioridade; Os registros SOA incluem serial, atualização, nova tentativa, expirar e campos mínimos. -
/v1/dns/batchconsulta vários tipos de registro em paralelo com uma solicitação. O padrão é A, AAAA, MX, TXT e NS se você não especificar. -
/v1/dns/propagationverifica Google, Cloudflare e Quad9 e retorna um booleanoconsistentbandeira. Use-o para verificar se as alterações de DNS se tornaram globais. -
Todos os três endpoints funcionam anonimamente a 5 req/min. Passe um
X-Api-Keycabeçalho para limites mais altos. - A API é executada na rede de ponta da Cloudflare. As consultas são resolvidas por meio de DNS sobre HTTPS, para que você obtenha a mesma confiabilidade que consultar diretamente no Cloudflare ou no DNS do Google, empacotado em um formato JSON amigável ao desenvolvedor.
FAQ
- Como procuro registros DNS programaticamente?
- Envie uma solicitação POST para https://api.botoi.com/v1/dns/lookup com um corpo JSON contendo o domínio e o tipo de registro. A API retorna JSON estruturado com todos os registros, TTLs e tempo de consulta correspondentes. Não é necessária instalação dig ou análise de saída.
- Quais tipos de registro DNS a API suporta?
- A API oferece suporte a oito tipos de registro: A, AAAA, MX, TXT, CNAME, NS, SOA e PTR. Se você omitir o parâmetro type, o padrão será registros A.
- Como posso verificar se as alterações de DNS foram propagadas?
- Use o terminal /v1/dns/propagation. Ele consulta Google DNS, Cloudflare DNS e Quad9 em paralelo e retorna um booleano "consistente" indicando se todos os três resolvedores retornam os mesmos registros. Se consistente for falso, a propagação ainda está em andamento.
- Posso consultar vários tipos de registros DNS em uma única solicitação?
- Sim. O endpoint /v1/dns/batch aceita uma matriz de tipos (por exemplo, ["A", "MX", "TXT"]) e consulta todos eles em paralelo. A resposta agrupa registros por tipo. Se você omitir o parâmetro types, o padrão será A, AAAA, MX, TXT e NS.
- A API de pesquisa de DNS é gratuita?
- O acesso anônimo está disponível a 5 solicitações por minuto e 100 solicitações por dia com limitação de taxa baseada em IP. Nenhuma chave de API ou conta é necessária. Para maior rendimento, os planos pagos começam em US$ 9/mês com uma única chave de API cobrindo todos os mais de 150 endpoints.
Comece a construir com botoi
150+ endpoints de API para consultas, processamento de texto, geração de imagens e utilitários para desenvolvedores. Plano gratuito, sem cartão de crédito.