YoyoGo微服务框架入门系列-基本概念
前言
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(unc(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 组成。

YoyoGo微服务框架入门系列-基本概念的更多相关文章
- YoyoGo微服务框架入门系列-快速编写WEB API
前言 YoyoGo是一个使用Golang编写的一个简单.轻量.快速.基于依赖注入的微服务框架,目前依然在研发阶段,欢迎Star以及一起参与到框架的研发 GitHub地址:https://github. ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局部模块升级。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET Core(C#)项目集成:应用中心。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:4、默认安全认证与自定义安全认证。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
随机推荐
- C1. Pokémon Army (easy version) 解析(DP)
Codeforce 1420 C1. Pokémon Army (easy version) 解析(DP) 今天我們來看看CF1420C1 題目連結 題目 對於一個數列\(a\),選若干個數字,求al ...
- B. Nauuo and Circle 解析(思維、DP)
Codeforce 1172 B. Nauuo and Circle 解析(思維.DP) 今天我們來看看CF1172B 題目連結 題目 略,請直接看原題 前言 第一個該觀察的事情一直想不到,看了解答也 ...
- D. Bash and a Tough Math Puzzle 解析(線段樹、數論)
Codeforce 914 D. Bash and a Tough Math Puzzle 解析(線段樹.數論) 今天我們來看看CF914D 題目連結 題目 給你一個長度為\(n\)的數列\(a\), ...
- C语言之 判断语句基础与if语句反汇编
0x01.判断语句介绍以及用法 判断语句有哪些? 1.If 用法1: if (条件) { //代码块 } 当条件成立,也就是为True时,执行{}中的代码 用法2: if(条件) { //代码块 } ...
- 走在深夜的小码农 Fifth Day
Css3 Fifth Day writer:late at night codepeasant 学习大纲: 一.css三大特性 1.层叠性 相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠) ...
- SpringBoot原理发现(一)
说明: 本系列基于SpringBoot 2.2.9.RELEASE 版本,对SpringBoot的原理进行分析,一共分为四节: SpringBoot原理发现(一):创建Hello World,对pom ...
- Java 中的 反射机制
概念明确 什么是类的对象? 类的对象就是:基于某个类 new 出来的对象,也称为实例对象.这个很容易理解,就不过多阐述了. 什么是类对象? 类对象就是:类加载的产物,封装了一个类的所有信息(类名.父类 ...
- malloc,calloc,realloc三者的区别
malloc,calloc,realloc三者都可以运用与动态分配数组. malloc:用malloc必须要自己初始化,可以用memset(arr,0,cnt*sizeof(int)) calloc: ...
- 17 c10k问题
所谓c10k问题,指的是服务器同时支持成千上万个客户端的问题,也就是concurrent 10 000 connection(这也是c10k这个名字的由来). 推荐: https://my.oschi ...
- notepad++覆盖了eclipse的快捷键
好长时间发现eclipse快捷键alt+/无法使用,今天决定解决一下 1.Windows Hotkey Explorer 用此工具找到是notepad++占用了快捷键 2.C:\Program Fil ...