From 35dd6212f700590b90d78f905906da762f521fd8 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Fri, 22 Nov 2019 14:59:41 +0200 Subject: [PATCH] add http method override section --- HTTP-method-override.md | 60 +++++++++++++++++++++++++++++++++++++++++ Home.md | 1 + _Sidebar.md | 1 + 3 files changed, 62 insertions(+) create mode 100644 HTTP-method-override.md diff --git a/HTTP-method-override.md b/HTTP-method-override.md new file mode 100644 index 0000000..ebdf8e0 --- /dev/null +++ b/HTTP-method-override.md @@ -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) }) +``` \ No newline at end of file diff --git a/Home.md b/Home.md index 543af80..7223508 100644 --- a/Home.md +++ b/Home.md @@ -21,6 +21,7 @@ This wiki is the main source of documentation for **developers** working with (o * [[Wrap the Router|Routing-wrap-the-router]] * [[Override Context|Routing-override-context]] * [[Context Methods|Routing-context-methods]] +* [[HTTP Method Override]] * [[API Versioning]] * [[Content Negotiation]] * [[Response Recorder]] diff --git a/_Sidebar.md b/_Sidebar.md index 46a160f..2b47942 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -16,6 +16,7 @@ * [[Wrap the Router|Routing-wrap-the-router]] * [[Override Context|Routing-override-context]] * [[Context Methods|Routing-context-methods]] +* [[HTTP Method Override]] * [[API Versioning]] * [[Content Negotiation]] * [[Response Recorder]]