gogreen/README.md

139 lines
3.5 KiB
Markdown
Raw Normal View History

2015-01-25 17:58:22 +00:00
[![Build Status](https://travis-ci.org/digitalocean/godo.svg)](https://travis-ci.org/digitalocean/godo)
2015-01-23 14:59:17 +00:00
# Godo
2014-09-03 14:03:30 +00:00
Godo is a Go client library for accessing the DigitalOcean V2 API.
You can view the client API docs here: [http://godoc.org/github.com/digitalocean/godo](http://godoc.org/github.com/digitalocean/godo)
2015-09-18 13:10:59 +00:00
You can view DigitalOcean API docs here: [https://developers.digitalocean.com/documentation/v2/](https://developers.digitalocean.com/documentation/v2/)
2014-09-03 14:03:30 +00:00
## Usage
```go
import "github.com/digitalocean/godo"
2014-09-03 14:03:30 +00:00
```
Create a new DigitalOcean client, then use the exposed services to
access different parts of the DigitalOcean API.
### Authentication
Currently, Personal Access Token (PAT) is the only method of
authenticating with the API. You can manage your tokens
2015-09-18 13:10:59 +00:00
at the DigitalOcean Control Panel [Applications Page](https://cloud.digitalocean.com/settings/applications).
2014-09-03 14:03:30 +00:00
You can then use your token to create a new client:
2014-09-03 14:03:30 +00:00
```go
2015-05-19 03:45:02 +00:00
import "golang.org/x/oauth2"
2014-09-03 14:03:30 +00:00
pat := "mytoken"
2015-05-19 03:45:02 +00:00
type TokenSource struct {
AccessToken string
2014-09-03 14:03:30 +00:00
}
2015-05-19 03:45:02 +00:00
func (t *TokenSource) Token() (*oauth2.Token, error) {
token := &oauth2.Token{
AccessToken: t.AccessToken,
}
return token, nil
}
tokenSource := &TokenSource{
AccessToken: pat,
}
oauthClient := oauth2.NewClient(context.Background(), tokenSource)
2015-05-19 03:45:02 +00:00
client := godo.NewClient(oauthClient)
2014-09-03 14:03:30 +00:00
```
## Examples
To create a new Droplet:
```go
dropletName := "super-cool-droplet"
createRequest := &godo.DropletCreateRequest{
Name: dropletName,
Region: "nyc3",
Size: "512mb",
Image: godo.DropletCreateImage{
Slug: "ubuntu-14-04-x64",
},
2014-09-03 14:03:30 +00:00
}
ctx := context.TODO()
newDroplet, _, err := client.Droplets.Create(ctx, createRequest)
2014-09-03 14:03:30 +00:00
if err != nil {
fmt.Printf("Something bad happened: %s\n\n", err)
return err
}
```
### Pagination
If a list of items is paginated by the API, you must request pages individually. For example, to fetch all Droplets:
```go
func DropletList(ctx context.Context, client *godo.Client) ([]godo.Droplet, error) {
// create a list to hold our droplets
list := []godo.Droplet{}
// create options. initially, these will be blank
opt := &godo.ListOptions{}
for {
droplets, resp, err := client.Droplets.List(ctx, opt)
if err != nil {
2015-02-20 23:54:13 +00:00
return nil, err
}
2015-02-20 23:54:13 +00:00
// append the current page's droplets to our list
for _, d := range droplets {
list = append(list, d)
}
2015-02-20 23:54:13 +00:00
// if we are at the last page, break out the for loop
if resp.Links == nil || resp.Links.IsLastPage() {
break
}
2015-02-20 23:54:13 +00:00
page, err := resp.Links.CurrentPage()
if err != nil {
return nil, err
}
2015-02-20 23:54:13 +00:00
// set the page we want for the next request
opt.Page = page + 1
}
2015-02-20 23:54:13 +00:00
return list, nil
2014-09-03 14:03:30 +00:00
}
```
## Versioning
Each version of the client is tagged and the version is updated accordingly.
Since Go does not have a built-in versioning, a package management tool is
recommended - a good one that works with git tags is
[gopkg.in](http://labix.org/gopkg.in).
To see the list of past versions, run `git tag`.
## Documentation
For a comprehensive list of examples, check out the [API documentation](https://developers.digitalocean.com/documentation/v2/).
For details on all the functionality in this library, see the [GoDoc](http://godoc.org/github.com/digitalocean/godo) documentation.
## Contributing
We love pull requests! Please see the [contribution guidelines](CONTRIBUTING.md).