Skip to content
🆕 Lets you use HTTP verbs such as PUT or DELETE in places where the client doesn't support it
Go
Branch: master
Clone or download
Latest commit 9615774 Nov 26, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.travis.yml add travis Nov 26, 2019
LICENSE
README.md
doc.go
go.mod release Nov 26, 2019
methodoverride.go
methodoverride_test.go

README.md

HTTP Method Override (Go)

build status report card godocs donate on PayPal

The use of specific custom HTTP headers such as X-HTTP methods override can be very handy while developing and promoting a REST API. When deploying REST API based web services, you may encounter access limitations on both the server and client sides.

Some Firewalls do not support PUT, DELETE or PATCH requests.

The methodoverride package is a net/http middleware. It lets you use HTTP verbs such as PUT or DELETE in places where the client doesn't support it.

Getting started

The only requirement is the Go Programming Language.

$ go get github.com/kataras/methodoverride
package main

import (
    "net/http"

    "github.com/kataras/methodoverride"
)

func main() {
    router := http.NewServeMux()

    mo := methodoverride.New( 
        // Defaults to nil. 
        // 
        methodoverride.SaveOriginalMethod("_originalMethod"), 
        // Default values. 
        // 
        // methodoverride.Methods(http.MethodPost), 
        // methodoverride.Headers("X-HTTP-Method",
        //                        "X-HTTP-Method-Override",
        //                        "X-Method-Override"), 
        // methodoverride.FormField("_method"), 
        // methodoverride.Query("_method"), 
    ) 

    router.HandleFunc("/path", func(w http.ResponseWriter, r *http.Request) {
        resp := "post response"

        if r.Method == http.MethodDelete {
            resp = "delete response"
        }

        w.Write([]byte(resp))
    })

    // Wrap your "router" with the methodoverride wrapper. 
    http.ListenAndServe(":8080", mo(router))
}

A client can request with POST, the server will respond like if it were a DELETE method.

fetch("/path", {
    method: 'POST',
    headers: {
      "X-HTTP-Method": "DELETE"
    },
  })
  .then((resp)=>{
      // response body will be "delete response". 
 })).catch((err)=> { console.error(err) })

Stargazers over time

Stargazers over time

License

methodoverride is free and open-source software licensed under the MIT License.

You can’t perform that action at this time.