PHP 如何将接口做的更强大? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hoythan
V2EX    PHP

PHP 如何将接口做的更强大?

  •  
  •   hoythan 2017 年 5 月 18 日 3175 次点击
    这是一个创建于 3160 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我做了一个 PHP 的 API 接口,用户通过 domain.com/api?method=sign.auth2 提交 POST 请求

    我在相关的 class 中的 __construct 中接收这些 POST 请求并处理然后直接在屏幕中返回 Json 内容

    这是我的接口使用步骤

    后来我发现这些 CLASS 有时候是需要被其他的 class 调用的,我没法在 __construt 中 return 什么内容回去. 不知道有什么两全其美的办法?

    12 条回复    2017-05-20 19:04:21 +08:00
    freeminder
        1
    freeminder  
       2017 年 5 月 18 日   1
    设计问题,接收 POST,返回 Json 应该是 A 层。具体做逻辑的,也就是你所谓会被别人调用的,处于另外 B 层。就不会有你这个问题了。简单来说就是 Controller 负责接收参数,调用 Logic 层,返回 Json。Logic 层互相可调用。
    vzyw
        2
    vzyw  
       2017 年 5 月 18 日 via iPhone   1
    构造函数不适合输出东西吧
    lurrpis
        3
    lurrpis  
       2017 年 5 月 18 日   1
    逻辑和控制放在一起,当然没办法解耦
    otakustay
        4
    otakustay  
       2017 年 5 月 18 日   1
    所以你为什么要用一个构造函数完成所有的功能,既然你只要一个函数,为啥要 class
    freeminder
        5
    freeminder  
       2017 年 5 月 18 日   1
    反正看起来就是想贼简单的写一个 web 服务,然而最终你会发现少很多东西。然后撸着撸着就重发明了一个框架,还贼丑。
    hoythan
        6
    hoythan  
    OP
       2017 年 5 月 18 日
    所以各位的建议是分开还是怎么改造?
    Moker
        7
    Moker  
       2017 年 5 月 18 日   1
    __construct 不要返回任何数据 你可以新增一个方法 去返回 比如 response 或者 responseError
    __construct 放在父类里面 可以统一用做校验或者鉴权 这种情况 如果有需要统一调用 就做成父类吧
    hoythan
        8
    hoythan  
    OP
       2017 年 5 月 18 日
    @Moker 但是这接口有些玩意是异步的,考虑过做一个方法但是可能会有问题.
    Moker
        9
    Moker  
       2017 年 5 月 18 日   1
    @hoythan 异步的话 你抽出一层来做监听器 在控制器里面只负责触发或者把任务加入到队列 然后再用其他的方式去消费这些任务
    jsjscool
        10
    jsjscool  
       2017 年 5 月 18 日   1
    MVC 框架设计很重要的一条就是避免 C 与 C 之间的调用。Model 你不用,Component 你不用,一定要用 C 写完全部……
    dangyuluo
        11
    dangyuluo  
       2017 年 5 月 18 日   1
    避免一个 controller 调用另一个 controller,如果一定有代码重复的话,把重复的代码抽象出来,或者成为 model,或者成为一个 private function,仅供内部访问。
    如果是 Codeigniter 的话,还可以生成一个 helper 或者第三方 library
    visonme
        12
    visonme  
       2017 年 5 月 20 日
    你不应该尝试在__construct 中去返回任何结果。
    对于 API 请求处理,第一层(应用层 /controller )处理应该只是起协调作用,具体的处理和返回应该放到业务逻辑层或者独立的服务层中去处理。
    关于     帮助文档     自助推广系统     博客   &bsp; API     FAQ     Solana     2768 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 12:18 PVG 20:18 LAX 04:18 JFK 07:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86