tjtjtjのメモ

自分のためのメモです

kong request-transformer

kong hub には多数のプラグインが並んでいる。

docs.konghq.com

その中の request-transformer を使ってみる

サービスとルート

service:prac1 作成。向き先は httpbin

$ curl -i -X POST \
  --url http://localhost:8001/services/ \
  --data 'name=prac1' \
  --data 'url=http://httpbin.org'

service:prac1 にroute追加

$ curl -i -X POST \
  --url http://localhost:8001/services/prac1/routes \
  --data 'name=prac1-route' \
  --data 'hosts[]=prac1.org'

プラグイン設定前

plugin:request-transformer を設定する前に確認

curl -X GET \
  --url http://localhost:8000/headers \
  --header 'Host: prac1.org' \
  --header 'x-toremove: asdfasdf'
{
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.29.0",
    "X-Forwarded-Host": "prac1.org",
    "X-Toremove": "asdfasdf"
  }
}

plugin:request-transformer を設定

plugin:request-transformer を構成。config はサンプルをちょっと修正。

$ curl -i -X POST http://localhost:8001/services/prac1/plugins \
    --data "name=request-transformer"  \
    --data "config.remove.headers=x-toremove" \
    --data "config.remove.headers=x-another-one" \
    --data "config.remove.querystring=qs-remove-name" \
    --data "config.remove.querystring=qs2-remove-name" \
    --data "config.remove.body=formparam-toremove" \
    --data "config.remove.body=formparam-another-one" \
    --data "config.rename.headers=header-old-name:header-new-name" \
    --data "config.rename.headers=another-old-name:another-new-name" \
    --data "config.rename.querystring=qs-old-name:qs-new-name" \
    --data "config.rename.querystring=qs2-old-name:qs2-new-name" \
    --data "config.rename.body=param-old:param-new" \
    --data "config.rename.body=param2-old:param2-new" \
    --data "config.add.headers=x-new-header:value" \
    --data "config.add.headers=x-another-header:something" \
    --data "config.add.querystring=new-param:some_value" \
    --data "config.add.querystring=another-param:some_value" \
    --data "config.add.body=new-form-param:some_value" \
    --data "config.add.body=another-form-param:some_value"

request-transformer を確認

plugin 設定後に確認。headers

curl -X GET \
  --url http://localhost:8000/headers \
  --header 'Host: prac1.org' \
  --header 'x-toremove: asdfasdf' \      <--- ヘッダ削除された
  --header 'header-old-name: qwerqwer'

{
  "headers": {
    "Accept": "*/*",
    "Header-New-Name": "qwerqwer",       <--- キー変更 header-old-name -> Header-New-Name
    "Host": "httpbin.org",
    "User-Agent": "curl/7.29.0",
    "X-Another-Header": "something",     <--- ヘッダ追加
    "X-Forwarded-Host": "prac1.org",
    "X-New-Header": "value"              <--- ヘッダ追加
  }
}

anythingでquerystringの変更を確認

curl -X GET \
  --url 'http://localhost:8000/anything?qs-old-name=zxcv&qs-remove-name=tyui' \
  --header 'Host: prac1.org'

{
  "args": {
    "another-param": "some_value",
    "new-param": "some_value",
    "qs-new-name": "zxcv"
  },
  "data": "",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.29.0",
    "X-Another-Header": "something",
    "X-Forwarded-Host": "prac1.org",
    "X-New-Header": "value"
  },
  "json": null,
  "method": "GET",
  "origin": "172.18.*.*, ***.***.***.***, 172.18.*.*",
  "url": "https://prac1.org/anything?new-param=some_value&another-param=some_value&qs-new-name=zxcv"
}