This is an automated email from the ASF dual-hosted git repository.

spacewander pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-go-plugin-runner.git


The following commit(s) were added to refs/heads/master by this push:
     new 7b748eb  docs: add response filter for doc (#93)
7b748eb is described below

commit 7b748eb9e5f485400dd077a529ee28bb9c5866de
Author: soulbird <[email protected]>
AuthorDate: Wed Jun 22 17:51:36 2022 +0800

    docs: add response filter for doc (#93)
---
 docs/assets/images/runner-overview.png | Bin 524459 -> 229694 bytes
 docs/en/latest/getting-started.md      |  44 ++++++++++++++++++++++++++++++---
 2 files changed, 40 insertions(+), 4 deletions(-)

diff --git a/docs/assets/images/runner-overview.png 
b/docs/assets/images/runner-overview.png
index 3f6f391..11981a0 100644
Binary files a/docs/assets/images/runner-overview.png and 
b/docs/assets/images/runner-overview.png differ
diff --git a/docs/en/latest/getting-started.md 
b/docs/en/latest/getting-started.md
index e06fc5a..7bf8c7e 100644
--- a/docs/en/latest/getting-started.md
+++ b/docs/en/latest/getting-started.md
@@ -132,8 +132,43 @@ We can see that the RequestFilter takes the value of the 
body set in the configu
 (respond directly in the plugin), it will response directly in the APISIX 
without touching the upstream. We can also set response headers in the plugin 
and touch the upstream
 at the same time by set RespHeader in `pkgHTTP.Request`.
 
-For the `pkgHTTP.Request`, you can refer to the API documentation provided by 
the Go Runner SDK:
-https://pkg.go.dev/github.com/apache/apisix-go-plugin-runner
+`ResponseFilter` supports rewriting the response during the response phase, we 
can see an example of its use in the ResponseRewrite plugin:
+
+```go
+type ResponseRewriteConf struct {
+    Status  int               `json:"status"`
+    Headers map[string]string `json:"headers"`
+    Body    string            `json:"body"`
+}
+
+func (p *ResponseRewrite) ResponseFilter(conf interface{}, w pkgHTTP.Response) 
{
+       cfg := conf.(ResponseRewriteConf)
+       if cfg.Status > 0 {
+               w.WriteHeader(200)
+       }
+
+       w.Header().Set("X-Resp-A6-Runner", "Go")
+       if len(cfg.Headers) > 0 {
+               for k, v := range cfg.Headers {
+                       w.Header().Set(k, v)
+               }
+       }
+
+       if len(cfg.Body) == 0 {
+               return
+       }
+       _, err := w.Write([]byte(cfg.Body))
+       if err != nil {
+               log.Errorf("failed to write: %s", err)
+       }
+}
+```
+
+We can see that `ResponseFilter` will rewrite the status, header, and response 
body of the response phase according to the configuration.
+
+In addition, we can also get the status and headers in the original response 
through `pkgHTTP.Response`.
+
+For the `pkgHTTP.Request` and `pkgHTTP.Response`, you can refer to the [API 
documentation](https://pkg.go.dev/github.com/apache/apisix-go-plugin-runner) 
provided by the Go Runner SDK.
 
 After building the application (`make build` in the example), we need to set 
some environment variables at runtime:
 
@@ -159,8 +194,9 @@ When you configure a plugin runner in APISIX, APISIX will 
treat the plugin runne
 
 If you configure the ext-plugin-* plugin for a given route, a request to hit 
that route will trigger APISIX to make an RPC call to the plugin runner via a 
unix socket. The call is broken down into two phases.
 
-- ext-plugin-pre-req: before executing most of the APISIX built-in plugins 
(Lua language plugins)
-- ext-plugin-post-req: after the execution of the APISIX built-in plugins (Lua 
language plugins)
+- ext-plugin-pre-req: executed during handling the request, before most of the 
APISIX built-in plugins (Lua language plugins)
+- ext-plugin-post-req: executed during handling the request, after most of the 
APISIX built-in plugins (Lua language plugins)
+- ext-plugin-post-resp: executed during handling the response, after most of 
the APISIX built-in plugins (Lua language plugins)
 
 Configure the timing of plugin runner execution as needed.
 

Reply via email to