Usage

Directly in your code

You can enable and configure the HTTP cache directly in your golang codebase project.

  import (
	httpcache "github.com/darkweak/souin/plugins/kratos"
	kratos_http "github.com/go-kratos/kratos/v2/transport/http"
)

func main() {
	kratos_http.NewServer(
		kratos_http.Filter(
			httpcache.NewHTTPCacheFilter(httpcache.DevDefaultConfiguration),
		),
	)
}
  

You have to pass a Souin BaseConfiguration structure into the NewHTTPCache method (you can use the DefaultConfiguration variable to have a built-in production ready configuration).

Using kratos configuration

You can configure the HTTP cache behavior through your Kratos configuration file.

  # /somewhere/kratos-configuration.yaml
server: #...
data: #...
# HTTP cache part
httpcache:
  default_cache:
	ttl: 5s
	default_cache_control: public
  log_level: debug
  

After that you have to edit your server instanciation to use the HTTP cache configuration parser

  import (
	httpcache "github.com/darkweak/souin/plugins/kratos"
	kratos_http "github.com/go-kratos/kratos/v2/transport/http"
)

func main() {
  c := config.New(
		config.WithSource(file.NewSource("examples/configuration.yml")),
		config.WithDecoder(func(kv *config.KeyValue, v map[string]interface{}) error {
			return yaml.Unmarshal(kv.Value, v)
		}),
	)
	if err := c.Load(); err != nil {
		panic(err)
	}

	server := kratos_http.NewServer(
		kratos_http.Filter(
			httpcache.NewHTTPCacheFilter(httpcache.ParseConfiguration(c)),
		),
	)
  // ...
}
  

With that your application will be able to cache the responses if possible and returns at least the Cache-Status HTTP header with the different directives mentionned in the RFC specification.

Look at the configuration section to discover all configurable keys here.

Other resources

You can find an example for a docker-compose stack inside the examples folder on the Github repository. Look at the BaseConfiguration structure on pkg.go.dev documentation.