Files
kubesphere/pkg/apiserver/runtime/runtime.go
2025-04-30 15:53:51 +08:00

57 lines
1.4 KiB
Go

/*
* Copyright 2024 the KubeSphere Authors.
* Please refer to the LICENSE file in the root directory of the project.
* https://github.com/kubesphere/kubesphere/blob/master/LICENSE
*/
package runtime
import (
"strings"
"github.com/emicklei/go-restful/v3"
"k8s.io/apimachinery/pkg/runtime/schema"
)
const (
ApiRootPath = "/kapis"
)
// Container holds all webservice of apiserver
var Container = restful.NewContainer()
type ContainerBuilder []func(c *restful.Container) error
const MimeMergePatchJson = "application/merge-patch+json"
const MimeJsonPatchJson = "application/json-patch+json"
const MimeMultipartFormData = "multipart/form-data"
func init() {
restful.RegisterEntityAccessor(MimeMergePatchJson, restful.NewEntityAccessorJSON(restful.MIME_JSON))
restful.RegisterEntityAccessor(MimeJsonPatchJson, restful.NewEntityAccessorJSON(restful.MIME_JSON))
}
func NewWebService(gv schema.GroupVersion) *restful.WebService {
webservice := restful.WebService{}
// the GroupVersion might be empty, we need to remove the final /
webservice.Path(strings.TrimRight(ApiRootPath+"/"+gv.String(), "/")).
Produces(restful.MIME_JSON)
return &webservice
}
func (cb *ContainerBuilder) AddToContainer(c *restful.Container) error {
for _, f := range *cb {
if err := f(c); err != nil {
return err
}
}
return nil
}
func (cb *ContainerBuilder) Register(funcs ...func(*restful.Container) error) {
for _, f := range funcs {
*cb = append(*cb, f)
}
}