go框架设计4 | 青训营笔记

38 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的的第14天

HTTP框架实现

介绍

HTTP:超文本传输协议

协议中的内容

1.请求行/状态行:包括方法名、URL、协议版本、状态码、状态码描述

常见方法名:GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH

状态码:

1XX:信息类

2xx:成功

3xx:重定向

4xx:客户端错误

5xx:服务端错误

2.请求头/响应头

3.请求体/响应体

请求流程

业务层

服务治理层

中间件层

路由层

协议编(解)码层

传输层

不足与展望

HTTP1:队头阻塞,传输效率低,明文传输不安全

HTTP2:多路复用,头部压缩,二进制协议

QUIC:基于UDP实现,解决队头阻塞,加密减少握手次数,支持快速启动

分层设计

1.介绍

1.专注性

2.扩展性

3.复用性

好处:高内聚、低耦合、易复用、高扩展性

2.应用层设计

提供合理的API

可理解性:如ctx.Body(), ctx.GetBody(),不要用ctx.BodyA()

简单性:如ctx.Request.Header.Peek(key)/ctx.GetHeader(key)

性质:冗余性、兼容性、可测性、可见性

3.中间件设计

中间件需求:

1.配合Handler实现一个完整的请求处理生命周期

2.拥有预处理逻辑与后处理逻辑

3.可以注册多中间件

4.对上层模块用户逻辑模块易用

洋葱模型:

适用场景:日志记录,性能统计,安全控制,事务处理,异常处理

4.路由设计

框架路由实际上就是为URL匹配对应的处理函数(Handlers)

静态路由:/a/b/c./a/b/d

参数路由:/a/:id/c (/a/b/c,/a/d/c)、/*all

路由修复: la/b <-> /a/b/

冲突路由以及优先级: /a/b、/:id/c

匹配HTTP方法

多处理函数:方便添加中间件

5.如何设计

1.明确需求:考虑清楚要解决什么问题、有哪些需求

2.业界调研:业界都有哪些解决方案可供参考

3.方案权衡:思考不同方案的取舍

4.方案评审:相关同学对不同方案做评审

5.确定开发:确定最合适的方案进行开发