路由和接口(路由器网络接口)
前言无论是web server框架还是rpc框架,接口作为服务的外部入口,背后可能包含复杂的后端流程,不仅限于业务逻辑处理和数据处理操作、基础能力调用等。因此,接口和“后端流程”之间必须存在映射交付关系。路由机制以下都是web框架的例子。rpc框架比web更直接,就是指定方法调用。
本质上,http api请求和rpc调用通过网络完成双方的交互。我们不局限于行业内平台和微服务的应用。事实上,我们可以概括和理解,所有的“互动”都有以下要素:
双方同意的通信规则。统一的沟通规则可以保证沟通的准确性,避免歧义;根据交互场景和限制选择合适的协议,如app中前端交互常用的http/https,物联网场景可能使用MQTT/CoAP,可以提高通信效率,降低通信成本;
通信的任务是传递信息,信息无非是数据。结构化数据和非结构化数据都有相应的表示,并辅以众多的协议,可以有效地组织起来进行传输。比如最常见的http请求get参数,json格式参数,rpc protobuf等。
数据交付到哪里?这也是接口概念的关键。在计算机网络中,可以定位网络中的主机和进程。您如何交付网络请求进行处理?那么接口就是网络请求的入口,常见框架中的路由匹配规则都差不多。
注册RoutesRouting注册实现接口和控制器的映射,然后完成后续的处理流程。同时可以注册中间件,构建请求处理的执行链接。路由注册的方式有很多种,原则上可以总结如下:
基于配置(静态)
//比如PHP框架用Arrayclass ActionControllerConfig扩展actionbase config {public static controller config = gt;array(array(' action _ id ' = gt;' action_name' // action的唯一标识,将用作路由器映射键' pattern ' = >;'/^/rest/2.0/module/operation/?Params'//框架规则不同。这个例子是正则表达式+请求参数组合匹配' path ' = >;控制器类路径'' controller _ class ' = gt;controller1.class.php'),...)}
//代码源https://github.com/go-chi/chir . route("/parent/pattern ",Func(r router){r . use(middleware 2 . setcontextuser)//设置中间件 r.mount ("/xxx1 ",new xxx1 router())r . Mount("/xxx2 ",new xxx2 router(boot))r . Mount("/xxx3 ",new xxx3 router(boot))r . Mount("/xxx4 ",NewXxx4Router(boot))
基于反射、注释、动态代理(动态)
路由规则的精确匹配
模式匹配
参数辅助匹配
维护最终路线注册的输出结果主要有以下两种形式(求知情伙伴补充~)
路由列表
路由树
公共最左边前缀匹配