RESTful HTTP service engine for Go
Switch branches/tags
Nothing to show
Clone or download
Pull request Compare This branch is 31 commits ahead, 12 commits behind nathankerr:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


A RESTful HTTP client and server.


Install by running:

go get


See the examples folder for coded examples.

rest.go uses the standard http package to provide resources through specified resource routes. Add a new route and corresponding resource using the Resource method:

rest.Resource("resourcepath", resourcevariable)

The resource URI-path is then /resourcepath/.

A resource is an object that may have any of the following methods which respond to the specified HTTP requests:

GET /resource/       => Index(http.ResponseWriter)
GET /resource/id     => Find(http.ResponseWriter, id string)
POST /resource/      => Create(http.ResponseWriter, *http.Request)
PUT /resource/       => Update(http.ResponseWriter, id string, *http.Request)
PUT /resource/id     => Update(http.ResponseWriter, id string, *http.Request)
DELETE /resource/    => Delete(http.ResponseWriter, id string)
DELETE /resource/id  => Delete(http.ResponseWriter, id string)
OPTIONS /resource/   => Options(http.ResponseWriter, id string)
OPTIONS /resource/id => Options(http.ResponseWriter, id string)

If you are not so familiar with the REST architecture, check these 2 wikipedia links for an overview:

If you want to add a permission/accessibility-check to the resource, implement

HasAccess(*http.Request) (bool, os.Error)

The server will then route HTTP requests to the appropriate method call.

The snips example provides a full example of both a client and server. The weekdays example project implements a simple REST server.