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

2017-05-18 10:44:34 +08:00
 hoythan

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

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

这是我的接口使用步骤

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

2718 次点击
所在节点    PHP
12 条回复
freeminder
2017-05-18 10:50:06 +08:00
设计问题,接收 POST,返回 Json 应该是 A 层。具体做逻辑的,也就是你所谓会被别人调用的,处于另外 B 层。就不会有你这个问题了。简单来说就是 Controller 负责接收参数,调用 Logic 层,返回 Json。Logic 层互相可调用。
vzyw
2017-05-18 10:50:19 +08:00
构造函数不适合输出东西吧
lurrpis
2017-05-18 10:53:22 +08:00
逻辑和控制放在一起,当然没办法解耦
otakustay
2017-05-18 10:54:27 +08:00
所以你为什么要用一个构造函数完成所有的功能,既然你只要一个函数,为啥要 class
freeminder
2017-05-18 10:55:43 +08:00
反正看起来就是想贼简单的写一个 web 服务,然而最终你会发现少很多东西。然后撸着撸着就重发明了一个框架,还贼丑。
hoythan
2017-05-18 11:05:35 +08:00
所以各位的建议是分开还是怎么改造?
Moker
2017-05-18 11:07:25 +08:00
__construct 不要返回任何数据 你可以新增一个方法 去返回 比如 response 或者 responseError
__construct 放在父类里面 可以统一用做校验或者鉴权 这种情况 如果有需要统一调用 就做成父类吧
hoythan
2017-05-18 11:09:14 +08:00
@Moker 但是这接口有些玩意是异步的,考虑过做一个方法但是可能会有问题.
Moker
2017-05-18 11:43:23 +08:00
@hoythan 异步的话 你抽出一层来做监听器 在控制器里面只负责触发或者把任务加入到队列 然后再用其他的方式去消费这些任务
jsjscool
2017-05-18 11:45:25 +08:00
MVC 框架设计很重要的一条就是避免 C 与 C 之间的调用。Model 你不用,Component 你不用,一定要用 C 写完全部……
dangyuluo
2017-05-18 11:53:55 +08:00
避免一个 controller 调用另一个 controller,如果一定有代码重复的话,把重复的代码抽象出来,或者成为 model,或者成为一个 private function,仅供内部访问。
如果是 Codeigniter 的话,还可以生成一个 helper 或者第三方 library
visonme
2017-05-20 19:04:21 +08:00
你不应该尝试在__construct 中去返回任何结果。
对于 API 请求处理,第一层(应用层 /controller )处理应该只是起协调作用,具体的处理和返回应该放到业务逻辑层或者独立的服务层中去处理。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/362154

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX