<aside> 💡 Dari Tyk sendiri support tidak hanya bahasa Go untuk membuat plugin. Tetapi yang paling direkomendasikan adalah bahasa pemrograman Go. Kenapa? Karena plugin kita dapat di-load secara langsung oleh Tyk gateway yang juga dibuat dengan menggunakan bahasa pemgograman Go, alih-alih melakukan koneksi via gRPC dengan plugin.

</aside>

Membuat Plugin Go untuk Tyk

Di dalam contoh ini, akan dibuat plugin untuk menambahkan custom header di HTTP response.

1. Membuat program

Program yang akan dibuat ini akan menambahkan header dengan key custom-response-header dan value yyyyy ke HTTP Response header API yang menggunakan plugin ini. Berikut ini file main.go .

// main.go
package main

import (
	"fmt"
	"net/http"
)

func main() {
	fmt.Println("running")
}

func AddHeader(wr http.ResponseWriter, response *http.Response, request *http.Request) {
	response.Header.Add("custom-response-header", "yyyyy")
}

Berikut ini file go.mod .

// go.mod
module plugin-tyk

go 1.19

2. Build program

Pull image tyk-plugin-compiler terlebih dahulu sesuai versi Tyk API Gateway yang dipakai (dalam hal ini versi v5.2.2).

docker pull tykio/tyk-plugin-compiler:v5.2.2

compile dengan menjalankan container tyk-plugin-compiler. Di sini platform (OS dan arsitektur CPU) disamakan dengan platform di mana Tyk API gateway dipasang.

docker run --rm -v `pwd`:/plugin-source --platform=linux/amd64 tykio/tyk-plugin-compiler:v5.2.2 tyk-plugin.so

3. Tambahkan hasil build ke machine tempat gateway berada

Bisa menggunakan software seperti WinSCP atau MobaXterm.

4. Tambahkan plugin di API definition di Custom Middleware

"custom_middleware": {
      "pre": [],
      "post": [],
      "post_key_auth": [],
      "auth_check": {
        "disabled": false,
        "name": "",
        "path": "",
        "require_session": false,
        "raw_body_only": false
      },
      "response": [
        {
          "disabled": false,
          "name": "AddHeader",
          "path": "/opt/tyk-hybrid/middleware/tyk-plugin.so", // letak plugin di server
          "require_session": false,
          "raw_body_only": false
        }
      ],
      "driver": "goplugin",
      "id_extractor": {
        "disabled": false,
        "extract_from": "",
        "extract_with": "",
        "extractor_config": {}
      }
    },

<aside> 💡 walaupun nama file hasil build langkah kedua seperti ini tyk-plugin_v5.2.2_linux_amd64.so, di Tyk Gateway cukup diberi tyk-plugin.so saja tanpa perlu versi gateway (v5.22), OS (Linux) dan arsitektur CPU (amd64). Terkait mekanisme bagaimana Tyk mencari berkas plugin dapat dibaca sendiri di repository Tyk (dikarenakan Tyk API Gateway open source) di sini https://github.com/TykTechnologies/tyk/.

</aside>