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

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

  •  
  •   hoythan · 2017-05-18 10:44:34 +08:00 · 2816 次点击
    这是一个创建于 2745 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    这是我的接口使用步骤

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

    12 条回复    2017-05-20 19:04:21 +08:00
    freeminder
        1
    freeminder  
       2017-05-18 10:50:06 +08:00   ❤️ 1
    设计问题,接收 POST,返回 Json 应该是 A 层。具体做逻辑的,也就是你所谓会被别人调用的,处于另外 B 层。就不会有你这个问题了。简单来说就是 Controller 负责接收参数,调用 Logic 层,返回 Json。Logic 层互相可调用。
    vzyw
        2
    vzyw  
       2017-05-18 10:50:19 +08:00 via iPhone   ❤️ 1
    构造函数不适合输出东西吧
    lurrpis
        3
    lurrpis  
       2017-05-18 10:53:22 +08:00   ❤️ 1
    逻辑和控制放在一起,当然没办法解耦
    otakustay
        4
    otakustay  
       2017-05-18 10:54:27 +08:00   ❤️ 1
    所以你为什么要用一个构造函数完成所有的功能,既然你只要一个函数,为啥要 class
    freeminder
        5
    freeminder  
       2017-05-18 10:55:43 +08:00   ❤️ 1
    反正看起来就是想贼简单的写一个 web 服务,然而最终你会发现少很多东西。然后撸着撸着就重发明了一个框架,还贼丑。
    hoythan
        6
    hoythan  
    OP
       2017-05-18 11:05:35 +08:00
    所以各位的建议是分开还是怎么改造?
    Moker
        7
    Moker  
       2017-05-18 11:07:25 +08:00   ❤️ 1
    __construct 不要返回任何数据 你可以新增一个方法 去返回 比如 response 或者 responseError
    __construct 放在父类里面 可以统一用做校验或者鉴权 这种情况 如果有需要统一调用 就做成父类吧
    hoythan
        8
    hoythan  
    OP
       2017-05-18 11:09:14 +08:00
    @Moker 但是这接口有些玩意是异步的,考虑过做一个方法但是可能会有问题.
    Moker
        9
    Moker  
       2017-05-18 11:43:23 +08:00   ❤️ 1
    @hoythan 异步的话 你抽出一层来做监听器 在控制器里面只负责触发或者把任务加入到队列 然后再用其他的方式去消费这些任务
    jsjscool
        10
    jsjscool  
       2017-05-18 11:45:25 +08:00   ❤️ 1
    MVC 框架设计很重要的一条就是避免 C 与 C 之间的调用。Model 你不用,Component 你不用,一定要用 C 写完全部……
    dangyuluo
        11
    dangyuluo  
       2017-05-18 11:53:55 +08:00   ❤️ 1
    避免一个 controller 调用另一个 controller,如果一定有代码重复的话,把重复的代码抽象出来,或者成为 model,或者成为一个 private function,仅供内部访问。
    如果是 Codeigniter 的话,还可以生成一个 helper 或者第三方 library
    visonme
        12
    visonme  
       2017-05-20 19:04:21 +08:00
    你不应该尝试在__construct 中去返回任何结果。
    对于 API 请求处理,第一层(应用层 /controller )处理应该只是起协调作用,具体的处理和返回应该放到业务逻辑层或者独立的服务层中去处理。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5242 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 08:50 · PVG 16:50 · LAX 00:50 · JFK 03:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.