Go toolkit for the GitHub API.
This project is no longer maintained. If you are looking for a stable, well-maintained client for the GitHub API v3, please consider google/go-github. If you're interested in using the GraphQL API v4, the recommended library is shurcooL/githubv4.
go-octokit
is designed to be a hypermedia API client that wraps the GitHub API.
HAL is a simple format that gives a consistent and easy way to hyperlink between resources in web API. Being a client for HAL means it can navigate around the resources by following hyperlinks. go-octokit
is a hypermedia client for the GitHub API that it can traverse links by following the GitHub API conventions. Under the hood, it uses go-sawyer
, the Go version of the Ruby Sawyer.
Resources in go-octokit
contain not only data but hyperlinks:
package main import "github.com/octokit/go-octokit/octokit" func main() { client := octokit.NewClient(nil) url, err := octokit.UserURL.Expand(octokit.M{"user": "jingweno"}) if err != nil { // Handle error } user, result := client.Users(url).One() if result.HasError() { // Handle error } fmt.Println(user.ReposURL) // https://api.github.com/users/jingweno/repos }
Many hypermedia links have variable placeholders. go-octokit
supports URI Templates for parameterized URI expansion:
package main import "github.com/octokit/go-octokit/octokit" func main() { url, _ := octokit.UserURL.Expand(octokit.M{"user": "jingweno"}) fmt.Println(url) // https://api.github.com/users/jingweno }
If you want to use go-octokit
as a pure hypermedia API client, you can start at the API root and follow hypermedia links which drive the application state transitions:
package main import "github.com/octokit/go-octokit/octokit" func main() { rootURL, _ := client.RootURL.Expand(nil) root, _ := client.Root(rootURL).One() userURL, _ := root.UserURL.Expand(octokit.M{"users": "jingweno"}) user, _ := client.Users(userURL).One() }
package main import "github.com/octokit/go-octokit/octokit" func main() { url, err := octokit.UserURL.Expand(nil) if err != nil { // Handle error } users, result := client.Users(url).All() if result.HasError() { // Handle error } // Do something with users // Next page nextPageURL, _ := result.NextPage.Expand(nil) users, result := client.Users(nextPageURL).All() if result.HasError() { // Handle error } // Do something with users }
Client-side caching is the #1 thing to do to make a hypermedia client more performant. We plan to support this in the near future.
More examples are available.
See Releases.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
go-octokit is released under the MIT license. See LICENSE.