小白网-奉贤部落-奉贤免费信息发布平台

查看: 17|回复: 0
打印 上一主题 下一主题

路由和接口(路由器网络接口)

[复制链接]

2万

主题

2万

帖子

7万

积分

论坛元老

Rank: 8Rank: 8

积分
78182
跳转到指定楼层
楼主
发表于 2025-7-26 12:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前言无论是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))
    基于反射、注释、动态代理(动态)
  • 再理解一下“反射”:
    Golang/Java之类的编译语言,具体的实现在编译之后就已经存在了,但是程序是怎么知道的呢?使用反射来获取特定的类型和值
  • 工作流程:
    创建新的route实例
    在编码阶段配置router的处理程序
    服务启动时初始化注册,反射得到router.type  Router。值(各种方式,但不限于此)
    梳理一下“路由器”所持有的“路由表”,路由表的本质是URL
  • 常见框架路由注册案例:spring MVC Annotation Go Web framework路由规则的精确匹配
    模式匹配
    参数辅助匹配
    维护最终路线注册的输出结果主要有以下两种形式(求知情伙伴补充~)
    路由列表
    路由树
    公共最左边前缀匹配
  • 回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|小白网-奉贤部落-奉贤免费信息发布平台  

    GMT+8, 2025-8-22 12:35 , Processed in 0.052496 second(s), 21 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表