add http method override section

Gerasimos (Makis) Maropoulos 2019-11-22 14:59:41 +02:00
parent 739a61e8bd
commit 35dd6212f7
No known key found for this signature in database
GPG Key ID: 5DBE766BD26A54E7
3 changed files with 62 additions and 0 deletions

60
HTTP-method-override.md Normal file

@ -0,0 +1,60 @@
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 [Method Override](https://github.com/kataras/iris/tree/master/middleware/methodoverride) wrapper lets you use HTTP verbs such as PUT or DELETE in places where the client doesn't support it.
### Server
```go
package main
import (
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/middleware/methodoverride"
)
func main() {
app := iris.New()
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"),
)
// Register it with `WrapRouter`.
app.WrapRouter(mo)
app.Post("/path", func(ctx iris.Context) {
ctx.WriteString("post response")
})
app.Delete("/path", func(ctx iris.Context) {
ctx.WriteString("delete response")
})
// [...app.Run]
}
```
### Client
```js
fetch("/path", {
method: 'POST',
headers: {
"X-HTTP-Method": "DELETE"
},
})
.then((resp)=>{
// response body will be "delete response".
})).catch((err)=> { console.error(err) })
```

@ -21,6 +21,7 @@ This wiki is the main source of documentation for **developers** working with (o
* [[Wrap the Router|Routing-wrap-the-router]] * [[Wrap the Router|Routing-wrap-the-router]]
* [[Override Context|Routing-override-context]] * [[Override Context|Routing-override-context]]
* [[Context Methods|Routing-context-methods]] * [[Context Methods|Routing-context-methods]]
* [[HTTP Method Override]]
* [[API Versioning]] * [[API Versioning]]
* [[Content Negotiation]] * [[Content Negotiation]]
* [[Response Recorder]] * [[Response Recorder]]

@ -16,6 +16,7 @@
* [[Wrap the Router|Routing-wrap-the-router]] * [[Wrap the Router|Routing-wrap-the-router]]
* [[Override Context|Routing-override-context]] * [[Override Context|Routing-override-context]]
* [[Context Methods|Routing-context-methods]] * [[Context Methods|Routing-context-methods]]
* [[HTTP Method Override]]
* [[API Versioning]] * [[API Versioning]]
* [[Content Negotiation]] * [[Content Negotiation]]
* [[Response Recorder]] * [[Response Recorder]]