Skip to content

deiu/linkheader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

linkheader

Golang tool to parse and set Link headers

Build Status Coverage Status GoReport GoDoc

Install

go get -u github.com/deiu/linkparser

Usage

Getting values from a Link header

The ParseHeader() function returns a map where link values are keyed based on rel values.

// the header value usually comes from an http.Request object, using
// req.Header.Get("Link")
header := `<http://example.org>; rel="foo" title="hi", <http://test.com>; rel="bar"`

links = ParseHeader(header)

println(links["foo"]["href"]) // -> http://example.org
println(links["foo"]["title"]) // -> hi
println(links["bar"]["href"]) // -> http://test.com

Setting values to a Link header

Golang's normal behavior when setting Link headers is a bit weird. For instance, doing something like request.Header.Add("Link", headerValue) several times with different values seems to append those values to the Link header slice. However, when reading back from that header with request.Header.Get("Link"), it only returns the first element of the slice. This behavior forced me to write my own function AddLink() to set multiple values to a Link header.

// the header value usually comes from an http.Request object, using
// req.Header.Get("Link")
oldHeader := req.Header.Get("Link")
println(oldHeader) // -> ""

// we need to build our list of parameters as per https://tools.ietf.org/html/rfc2068#section-19.6.2.4
params := map[string]string{"rel": "foo", "title": "bar"}
newHeader := AddLink(oldHeader, "http://example.org", params)
req.Header.Set("Link", newHeader)

oldHeader = req.Header.Get("Link")
println(oldHeader) // -> <http://example.org>; rel="foo"; title="bar"

params = map[string]string{"rel": "baz"}
newHeader = AddLink(oldHeader, "http://test.com", params)
req.Header.Set("Link", newHeader)

println(req.Header.Get("Link"))
// -> <http://example.org>; rel="foo"; title="bar", <http://test.com>; rel="baz"

About

Link Header parser using Golang

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages