A Golang Akamai API client.
Akamai {OPEN} EdgeGrid Authentication for Golang.
edgegrid
implements the Akamai {OPEN} EdgeGrid Authentication scheme for the Golang net/http
package, and also offers a convenience API for interacting with the Akamai GTM and PAPI APIs.
Assuming Golang is properly installed:
go get github.com/comcast/go-edgegrid/edgegrid
Basic usage assumes you've established up the following environment variables.
AKAMAI_EDGEGRID_HOST=
AKAMAI_EDGEGRID_CLIENT_TOKEN=
AKAMAI_EDGEGRID_ACCESS_TOKEN=
AKAMAI_EDGEGRID_CLIENT_SECRET=
To log request/response details:
AK_LOG=true
import "github.com/comcast/go-edgegrid/edgegrid"
client := edgegrid.NewGTMClient()
// get all domains
client.Domains()
// get domain
client.Domain("example.akadns.net")
// create domain
domain := &Domain{
// your data here; see resources.go
}
client.DomainCreate(domain)
// update domain
domain := &Domain{
// your data here; see gtm_resources.go
}
client.DomainUpdate(domain)
// delete domain
// NOTE: this may 403, as it appears Akamai professional services is needed to perform DELETEs
client.DomainDelete("domain")
// get datacenters info for domain
client.DataCenters("domain")
// get datacenter info by dc id
client.DataCenter("domain", "123")
// get datacenter info by dc nickname
client.DataCenterByName("domain", "some_nickname")
// create datacenter
dc := &DataCenter{
// your data here; see gtm_resources.go
}
client.DataCenterCreate("domain", dc)
// update datacenter
dc := &DataCenter{
// your data here; see gtm_resources.go
}
client.DataCenterUpdate("domain", dc)
// delete datacenter by id
client.DataCenterDelete("domain", "123")
// get property info
client.Property("domain", "property")
// create property
prop := &Property{
// your data here; see gtm_resources.go
}
client.PropertyCreate("domain", prop)
// adjust aspects of a property
prop := &Property{
// your data here; see gtm_resources.go
}
client.PropertyUpdate("domain", prop)
// delete a property
client.PropertyDelete("domain", "property")
import "github.com/comcast/go-edgegrid/edgegrid"
client := edgegrid.NewPAPIClient()
// get all PAPI groups
client.Groups()
// get all PAPI products
client.Groups("someContractId")
// get all PAPI CP codes for a contract and group
client.CpCodes("someContractId", "someGroupID")
// get a PAPI CP code
client.CpCode("someCPCodeID", "someContractId", "someGroupID")
// get all PAPI hostnames for a contract & group
client.Hostnames("someContractId", "someGroupID")
// get a PAPI hostname for a contract & group
client.Hostnames("someHostID", "someContractId", "someGroupID")
// get all PAPI properties for a contract & group
client.Properties("someContractId", "someGroupID")
// get a PAPI property for a contract & group
client.Property("somePropertyID", "someContractId", "someGroupID")
// get all PAPI property versions for a property, contract, & group
client.Versions("somePropertyID", "someContractId", "someGroupID")
// get a PAPI property version for a property, contract, & group
client.Version("somePropertyVersion", "somePropertyID", "someContractId", "someGroupID")
// get a PAPI property version XML for a property, contract, & group
client.PropertyVersionXML("somePropertyVersion", "somePropertyID", "someContractId", "someGroupID")
// get the latest PAPI property version for a property, contract, & group
client.PropertyLatestVersion("somePropertyID", "someContractId", "someGroupID")
// get the PAPI property rules for a property, contract, & group
client.PropertyRules("somePropertyID", "someContractId", "someGroupID")
// get the PAPI property activations for a property, contract, & group
client.PropertyActivations("somePropertyID", "someContractId", "someGroupID")
In addition to the edgegrid.GTMClient
and edgegrid.PAPIClient
convenience clients, edgegrid.Auth
offers a standalone implementation of the Akamai {OPEN} EdgeGrid Authentication scheme for the Golang net/http library and can be used independent of the GTM
and PAPI
convenience clients.
edgegrid.Auth
offers a utility for establishing a valid Authorization
header for use with authenticated requests to Akamai using your own HTTP client.
Example:
package main
import (
"fmt"
"io/ioutil"
"net/http"
"os"
"github.com/comcast/go-edgegrid/edgegrid"
)
func main() {
client := &http.Client{}
req, _ := http.NewRequest("GET", "<SOME_AKAMAI_URL>", nil)
accessToken := os.Getenv("AKAMAI_EDGEGRID_ACCESS_TOKEN")
clientToken := os.Getenv("AKAMAI_EDGEGRID_CLIENT_TOKEN")
clientSecret := os.Getenv("AKAMAI_EDGEGRID_CLIENT_SECRET")
params := edgegrid.NewAuthParams(req, accessToken, clientToken, clientSecret)
auth := edgegrid.Auth(params)
req.Header.Add("Authorization", auth)
resp, _ := client.Do(req)
contents, _ := ioutil.ReadAll(resp.Body)
fmt.Printf("%s\n", string(contents))
}
Tests use the built-in testing
package:
make test