Kitchen is a framework that's designed in Champion Tech to build expendable, consistent and debuggable modular monolith service.
The main philosophy of Kitchen is to call methods indirectly. Since the methods are indirectly called, we can easily monitor, trace and even forward the request foreign node when necessary.
(External calling not yet implemented)
- Tracing / logging / metrics
- Swagger support
- Standardised error handling
- Concurrency management
- Pipeline for state management
- Asynchronous process
There are few components in the framework that are used to build the API.
type UserApi struct { // Menu
kitchen.MenuBase[*UserApi, *SimpleDependency] // Dependency of Menu
User struct { // SubMenu / Set
kitchen.SetBase[*SimpleDependency] // Dependency of SubMenu
Get kitchen.Dish[*SimpleDependency, *model.GetUserRequest, *model.GetUserResponse] // Placeholder (Dish)
}
}
recipe.UserAPI.User.Get.SetCooker(userService.GetUser) // Handler (Cooker)
Menu
is a collection of SubMenu
and Dish
.
Dependency
is the struct that inject the dependencies to the Cooker
.
SubMenu
is a collection of Dish
.
Dish
is a placeholder for the actual handler.
Cooker
is the actual handler.