前言
Github開源:github.com/yoyofx/yoyogo 還請多多Star
之前簡單介紹了YoyoGo微服務框架的基本內容,接下來了解下框架中的基本概念。
從一個簡單Web服務Demo出發
package main
import ...
func main() {
YoyoGo.CreateDefaultBuilder(func(router Router.IRouterBuilder) {
router.GET("/info",func (ctx *Context.HttpContext) { // 支持Group方式
ctx.JSON(200, Context.M{"info": "ok"})
})
}).Build().Run() //默認端口號 :8080
}
框架基本概念
1.HostBuilder
HostBuilder本身是一個抽象概念(類),可以衍生出多種HostBuilder。
比如:Web Host Builder , RPC Host Builder , General Host Builder等等。
上面的代碼用CreateDefaultBuilder函數,創建的就是一個默認的WebHostBuilder,既然是WebHostBuilder那默認最重要的函數,那當然是用於Http路由的聲明路由函數。HostBuilder本身包含了很多定義程序生命周期的函數:
- UseConfiguration : 用於定義配置文件
- Configure : 用於定義ApplicationBuilder,它是管理程序如何構建的一組方法
- ConfigureServices : 用於定義IOC容器
- OnApplicationLifeEvent : 用於定義程序生命周期的事件通知
- Build : 用於生成最終可運行的Host對象
2.ApplicationBuilder
如果說程序是由Host對象裝載的話,Host的構造就是由ApplicationBuilder完成的。Host本身就是由ApplicationBuilder與Server共同構成的。這兩個對象一一對應,ApplicationBuilder用於構造,Server用於承載具體的應用協議。比如WebHost就是由WebApplicationBuilder構造並提供了ServeHTTP函數,由HttpServer來承載,共同完成的。
3.RouterBuilder
RouterBuilder是由WebApplicationBuilder衍生出來的路由定義對象,用於聲明GET,POST,PUT,DELETE等類型的請求處理程序。也就是說沒有創建WebHostBuilder就沒有WebApplicationBuilder也就沒有RouterBuilder;框架本身就是支持多種Server協議的。
路由函數定義:
func(router *Router.RouterGroup) { }
上面demo中就通過它完成了一個GET請求,並返回JSON: {"info":"ok"}.
RouterBuilder本身還支持Group的方式,將一組API進行統一的URL定義:
router.Group("/v1/api", func(router *Router.RouterGroup) {
router.GET("/info", GetInfo)
router.GET("/hello", GetHello)
})
通過以上代碼將生成 /v1/api/info 和 /v1/api/hello 兩個GET請求路由地址。
4.Host
創建HostBuilder后,通過Build函數得到了最終可運行的Host對象(**Build().Run() **)。 創建Host對象的同時,其實也完成了Server對象的創建,Host與Server一一對應的。Host表示了一個可運行的宿主,它負責管理整個程序的生命周期;而Server則是更為具體的服務類型,比如Http,xxRPC。Server更多是一種通訊協議上的表達。
5.定制WebHostBuilder
在上面的demo中,我們定義了一個默認的WebHostBuilder,但是它所支持的內容較少只提供了最基本的Host定義,那如何定制一個WebHostBuilder呢,如下例子:
func CreateCustomBuilder() *Abstractions.HostBuilder {
return YoyoGo.NewWebHostBuilder().
Configure(func(app *YoyoGo.WebApplicationBuilder) {
app.UseEndpoints(func(router Router.IRouterBuilder) {
router.GET("/info",func (ctx *Context.HttpContext) {
ctx.JSON(200, Context.M{"info": "ok"})
})
})
}
通過定制,我們可以使用完整的HostBuilder構建函數來構建應用程序。然后通過如下例子將它運行起來:
package main
import ...
func main() {
CreateCustomBuilder().Build().Run() //默認端口 :8080
}
總結
至此我們介紹了YoyoGo微服務框架的基本概念: 一個Web服務是由 WebHostBuilder -> WebApplicationBuilder -> HttpServer -> WebHost 組成。