V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Yiso1573
V2EX  ›  程序员

请教大家个问题,一个 post 接口如何实现处理多个业务请求?

  •  1
     
  •   Yiso1573 · 2020-11-14 17:19:30 +08:00 · 2363 次点击
    这是一个创建于 1468 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近做外部数据接入,对方文档里提供了一个 post 的服务地址,其他的业务参数都在请求体里( json 格式),然后里面有个 method 参数对应各个业务接口。

    好奇他内部是如何实现的,我猜想的是接口解析这个参数再调用内部对应的服务,如果是这样那么这样设计的优劣势是什么?

    其实主要问题是他们有部分接口是主动调用我们系统,实现方式和他们接口一毛一样,有点怕做得不规范,所以来请教下大家。java

    14 条回复    2020-11-15 01:29:40 +08:00
    boris93
        1
    boris93  
       2020-11-14 18:03:25 +08:00 via Android   ❤️ 1
    做起来不就是
    switch(method) {
    case "methodA":
    doMethodA(); break;
    case "methodB":
    doMethodB();break;
    default:
    fxxkItUp();break;
    }

    这种好像有点像过去 WebService 那种?一个 endpoint,请求里面带方法名这种操作。
    现在应该是很不推荐这种做法了吧。

    调你们接口的方式,你们说话管用那就按你们的办法来,不然就听他们的呗。什么是规范?谁说话好使谁就是规范。
    chinvo
        2
    chinvo  
       2020-11-14 18:11:21 +08:00 via iPhone
    也可能是网关处理的
    PHPer233
        3
    PHPer233  
       2020-11-14 18:23:29 +08:00 via Android
    我见过这样的代码,就像一楼回复的那样执行相应的流程。
    luob
        4
    luob  
       2020-11-14 18:30:02 +08:00   ❤️ 2
    graphql 直呼内行。

    如果你试过手撸一个 web 框架会发现,这种编程式路由简单粗暴, 不用乱翻 http 各种标准一条条往上套,不用折腾来折腾去那一串乱七八糟的 url, 实现起来比 restful 那一套简单多了。
    DarkCat123
        5
    DarkCat123  
       2020-11-14 18:30:24 +08:00
    mapping func.

    type HandleFunc func( handerRequest) ( response , err );

    act := make( map[string]HandleFunc);
    return act[ methodRequest];
    tesguest123
        6
    tesguest123  
       2020-11-14 18:39:33 +08:00 via Android
    概括下就是通过 type 参数判断,if else if. else''
    zliea
        7
    zliea  
       2020-11-14 19:15:44 +08:00
    封装一个接口一个统一的入口方法,一个注解(功能号)。每个功能的 Service 实现这个接口,同时在 Service 上带上注解。
    在程序初始化时把这些 service 放到 Map<功能号, service>,然后入口处解析到功能号然后调用入口方法。
    PS. 我会把功能号放到 url 里。
    dustinth
        8
    dustinth  
       2020-11-14 19:29:55 +08:00
    本质上和实现上没有区别, 只是 API 的表现方式不一样: 是把路由规则放到 http 规范层面还是放到业务层面. 做的好的, 切换两种方式可能就是一两行代码的事情.
    mazyi
        9
    mazyi  
       2020-11-14 22:03:36 +08:00 via iPhone
    restful 的目的是规范,随便换一个人马上可以撸一套新的,这个嘛就是相反
    VANHOR
        10
    VANHOR  
       2020-11-14 22:20:18 +08:00
    饿了么的接口就是这样的。
    hdfg159
        11
    hdfg159  
       2020-11-14 22:22:50 +08:00 via Android
    就 if else,这思想就是消息分发器的思想,平时用地址区分那是 web 框架做好了
    PopRain
        12
    PopRain  
       2020-11-15 00:13:28 +08:00 via Android
    有点像强类型和弱类型的调用,我还是喜欢有明确的方法(强类型)
    namelosw
        13
    namelosw  
       2020-11-15 00:20:30 +08:00
    你要拿 REST 当规范的话, 这个不算 REST. REST 里面 POST 是用来创建资源的. 如果想 REST, 就要设计更多资源, 而不是更多的 verb 或者 method, 区别和这个挺大的.

    本质上这个 diapatch 的方式是模拟 RPC, 方法+参数其实就是模拟一个远程的函数. 不过我觉得到没有太大问题, 就是团队达成一致就行. 还有就是不同情况返回值的类型要处理好就行.
    Elissa
        14
    Elissa  
       2020-11-15 01:29:40 +08:00
    艹,这说的不就是我吗,野路子后端,php 写个 gateway.php ,接收 type 和 action,再用 switch 去分不同的业务接口
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   987 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:16 · PVG 05:16 · LAX 13:16 · JFK 16:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.