Docs / SDK / Go / DNS

Go — módulo DNS

Paquete github.com/webability/webability-go/dns. Envuelve la API de DNS (/v1/dns/*): zonas y registros.

Importar y crear el objeto

import (
    "github.com/webability/webability-go/wa"
    "github.com/webability/webability-go/dns"
)

api := wa.New("tu-client-id", "tu-token-secreto")
d := dns.New(api)

ListZones()

GET /v1/dns/zone — lista las zonas (dominios) del cliente.

zones, err := d.ListZones()
if err != nil {
    log.Fatal(err)
}
for _, z := range zones.Zones {
    fmt.Println(z.Key, z.Name, z.PrimaryNS)
}
fmt.Println("total:", zones.Count)

Devuelve *dns.ListZonesResult{Status, Zones []dns.Zone, Count int}.

GetZone(keyOrDomain string)

GET /v1/dns/zone/{key|domain} — detalle de una zona y sus registros. Acepta la clave numérica o el nombre de dominio.

zone, err := d.GetZone("midominio.com") // o d.GetZone("42")
if err != nil {
    log.Fatal(err)
}
fmt.Println(zone.Zone.Name, zone.Zone.Status)
for _, r := range zone.Records {
    fmt.Println(r.Name, r.RRTypeName, r.Data)
}
fmt.Println("nameservers:", zone.NS)

Devuelve *dns.GetZoneResult{Status, Zone dns.Zone, Records []dns.Record, NS []string}.

AddZone(name string)

POST /v1/dns/zone — crea una nueva zona (dominio). Los NS de la cuenta se agregan automáticamente.

added, err := d.AddZone("midominio.com")
if err != nil {
    log.Fatal(err)
}
fmt.Println("zona creada:", added.Key, added.Name)

Devuelve *dns.AddZoneResult{Status, Key int, Name string}.

AddRecord(zoneKey int, rec dns.RecordInput)

POST /v1/dns/zone/{key}/record — agrega un registro a una zona.

rec, err := d.AddRecord(added.Key, dns.RecordInput{
    Name:   "@",
    RRType: "A",
    TTL:    1800,
    Data:   "203.0.113.10",
})
if err != nil {
    log.Fatal(err)
}
fmt.Println("registro creado:", rec.Key, "en zona", rec.Zone)

RecordInput también acepta Priority, Weight, Port y Tag (para MX, SRV, CAA, etc.).

UpdateRecord(recordKey int, fields dns.RecordUpdate)

PUT /v1/dns/record/{key} — modifica un registro existente. RecordUpdate usa punteros: solo los campos no nulos se envían y se actualizan.

newTTL := 3600
newData := "203.0.113.20"
err := d.UpdateRecord(rec.Key, dns.RecordUpdate{
    TTL:  &newTTL,
    Data: &newData,
})
if err != nil {
    log.Fatal(err)
}

DeleteRecord(recordKey int)

DELETE /v1/dns/record/{key} — elimina un registro.

if err := d.DeleteRecord(rec.Key); err != nil {
    log.Fatal(err)
}

DeleteZone(zoneKey int)

DELETE /v1/dns/zone/{key} — elimina una zona y todos sus registros.

if err := d.DeleteZone(added.Key); err != nil {
    log.Fatal(err)
}

Referencia completa de la API HTTP (headers, códigos de error, formato de respuesta): /documentacion/dns.