前言

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本身包含了很多定义程序生命周期的函数:

  1. UseConfiguration : 用于定义配置文件
  2. Configure : 用于定义ApplicationBuilder,它是管理程序如何构建的一组方法
  3. ConfigureServices : 用于定义IOC容器
  4. OnApplicationLifeEvent : 用于定义程序生命周期的事件通知
  5. 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微服务框架入门系列-基本概念的更多相关文章

  1. YoyoGo微服务框架入门系列-快速编写WEB API

    前言 YoyoGo是一个使用Golang编写的一个简单.轻量.快速.基于依赖注入的微服务框架,目前依然在研发阶段,欢迎Star以及一起参与到框架的研发 GitHub地址:https://github. ...

  2. Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  3. Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  4. Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  5. Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局部模块升级。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  6. Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  7. Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET Core(C#)项目集成:应用中心。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  8. Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  9. Taurus.MVC 微服务框架 入门开发教程:项目集成:4、默认安全认证与自定义安全认证。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

随机推荐

  1. ORACLE 数据泵 expdp/impdp

    ORACLE 数据泵 expdp/impdp 一.概念 Oracle Database 10g 引入了最新的数据泵(Data Dump)技术,数据泵导出导入 (EXPDP 和 IMPDP)的作用: 1 ...

  2. CentOS 7 搭建 Ceph 集群(nautilus 版本)

    搭建 Ceph 分布式集群( nautilus 版本 ) 一.服务器环境说明 主机名 角色 IP地址 ceph-admin ceph-deploy 192.168.92.21 ceph-node1 m ...

  3. 面试官:看你简历说写精通ThreadLocal,这几道题你都会吗?

    问题 和Synchronized的区别 存储在jvm的哪个区域 真的只是当前线程可见吗 会导致内存泄漏么 为什么用Entry数组而不是Entry对象 你学习的开源框架哪些用到了ThreadLocal ...

  4. Serilog 源码解析——总览

    背景 大家好,考虑到在最近这些天,闲来无事,找了个类库好好研究下别人写的高质量代码,颇有收获,打算和大家分享下.考虑到最近在自学 ASP.NET Core 的相关开发,对 Serilog 这个日志记录 ...

  5. django配置跨域并开发测试接口

    1.创建一个测试项目 1.1 创建项目和APP django-admin startproject BookManage # 创建项目 python manage.py startapp books ...

  6. [Luogu P1613]跑路 (DP+倍增+最短路)

    题面 传送门:https://www.luogu.org/problemnew/show/P1613 Solution 挺有意思的一道题. 题面已经挺明显的描述出了这题的主要思想:倍增. 先这样想,我 ...

  7. 03_ubuntu samba 安装配置

    03_ubuntu samba 安装配置 安装samba sudo apt install samba 修改samba配置文件 sudo vim /etc/samba/smb.conf [share] ...

  8. 【KataDaily 191015】Sort the Gift Code

    题目: Happy Holidays fellow Code Warriors! Santa's senior gift organizer Elf developed a way to repres ...

  9. python数据分析01准备工作

    第1章 准备工作 1.1 本书的内容 本书讲的是利用Python进行数据控制.处理.整理.分析等方面的具体细节和基本要点.我的目标是介绍Python编程和用于数据处理的库和工具环境,掌握这些,可以让你 ...

  10. 经典c程序100例 1-10

    ==1--10 [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不 ...