Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • oss/libraries/go/network/http-negotiation
1 result
Select Git revision
Show changes
Commits on Source (2)
...@@ -46,6 +46,28 @@ func handleRequest(w http.ResponseWriter, r *http.Request) { ...@@ -46,6 +46,28 @@ func handleRequest(w http.ResponseWriter, r *http.Request) {
``` ```
### Accept Content Type
With the `ContentType` function you can negotiate the content type of HTTP request.
```go
package main
import (
"net/http"
"gitlab.schukai.com/oss/libraries/go/network/http-negotiation"
)
func handleRequest(w http.ResponseWriter, r *http.Request) {
n := negotiation.New(r.Header)
if n.ContentType("application/json") != "" {
// ...
}
}
```
### Language Negotiation ### Language Negotiation
With the `Language` function you can negotiate the language of HTTP request. With the `Language` function you can negotiate the language of HTTP request.
...@@ -66,7 +88,6 @@ func handleRequest(w http.ResponseWriter, r *http.Request) { ...@@ -66,7 +88,6 @@ func handleRequest(w http.ResponseWriter, r *http.Request) {
} }
} }
``` ```
### Charset Negotiation ### Charset Negotiation
...@@ -115,6 +136,16 @@ func handleRequest(w http.ResponseWriter, r *http.Request) { ...@@ -115,6 +136,16 @@ func handleRequest(w http.ResponseWriter, r *http.Request) {
``` ```
## Changelog
### 1.1.0
* Add `ContentType` function
### 1.0.0
* Initial release
## Contributing ## Contributing
Merge requests are welcome. For major changes, please open an issue first to discuss what Merge requests are welcome. For major changes, please open an issue first to discuss what
......
...@@ -14,6 +14,11 @@ func New(header http.Header) *Negotiation { ...@@ -14,6 +14,11 @@ func New(header http.Header) *Negotiation {
return &Negotiation{header} return &Negotiation{header}
} }
func (n *Negotiation) ContentType(acceptance ...string) string {
parser := newHeaderParser(n.header, false)
return parser.selectOffer(acceptance, parser.parse(headerContentType))
}
// Type returns the most preferred content type from the HTTP Accept header. // Type returns the most preferred content type from the HTTP Accept header.
// If nothing accepted, then empty string is returned. // If nothing accepted, then empty string is returned.
func (n *Negotiation) Type(offers ...string) (bestOffer string) { func (n *Negotiation) Type(offers ...string) (bestOffer string) {
......
...@@ -5,6 +5,24 @@ import ( ...@@ -5,6 +5,24 @@ import (
"testing" "testing"
) )
func TestContentType(t *testing.T) {
req, err := http.NewRequest("GET", "/", nil)
if err != nil {
t.Fatal(err)
}
req.Header.Set("Content-Type", "application/json")
n := New(req.Header)
if n.ContentType("application/json") != "application/json" {
t.Errorf("handler returned wrong status code: got %v want %v",
n.Type("application/json"), "application/json")
}
}
func TestNegotiationLanguage(t *testing.T) { func TestNegotiationLanguage(t *testing.T) {
req, err := http.NewRequest("GET", "/", nil) req, err := http.NewRequest("GET", "/", nil)
......
...@@ -5,4 +5,5 @@ const ( ...@@ -5,4 +5,5 @@ const (
headerAcceptLanguage = "Accept-Language" headerAcceptLanguage = "Accept-Language"
headerAcceptEncoding = "Accept-Encoding" headerAcceptEncoding = "Accept-Encoding"
headerAcceptCharset = "Accept-Charset" headerAcceptCharset = "Accept-Charset"
headerContentType = "Content-Type"
) )
{"version":"1.0.3"} {"version":"1.1.0"}