• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Yiso1573
V2EX  ›  程序员

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

  •  1
     
  •   Yiso1573 · Nov 14, 2020 · 2916 views
    This topic created in 2092 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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

    本质上这个 diapatch 的方式是模拟 RPC, 方法+参数其实就是模拟一个远程的函数. 不过我觉得到没有太大问题, 就是团队达成一致就行. 还有就是不同情况返回值的类型要处理好就行.
    Elissa
        14
    Elissa  
       Nov 15, 2020
    艹,这说的不就是我吗,野路子后端,php 写个 gateway.php ,接收 type 和 action,再用 switch 去分不同的业务接口
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4023 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 253ms · UTC 10:11 · PVG 18:11 · LAX 03:11 · JFK 06:11
    ♥ Do have faith in what you're doing.