1
vm 2016-04-15 11:51:31 +08:00 via Android
如果你要支持表单提交,那就搞 post 和 formdata 那种。否则请求都是可以自定义的,你 post json 也都可以。
|
2
pangliang 2016-04-15 12:07:22 +08:00
统一按照 FormData 的取, Payload 的套一层转换呗
|
4
vm 2016-04-15 13:15:35 +08:00 via Android
@abelyao 嗯。我其实是觉得这些格式都是小问题,随便选一个用的比较多的应该都没问题。确实想要搞得高大上的话可以用个 rpc 框架,比如 google 的 protobuf 。
|
5
abelyao OP @vm 不不不,当然不是为了高大上,是考虑各种前端后端的兼容性问题,毕竟 API 定下来了,以后再修改也会影响已有的前端
|
6
vm 2016-04-15 13:41:37 +08:00 via Android
@abelyao 不会有啥兼容性问题啊。。前端的话,浏览器里有 xhr ,浏览器外本来就没什么限制。后端就更没问题了。用的都是 http 的标准功能啊。。。
如果你觉得以后会改 api ,可以加个 api 版本号。好多 api 都是这么做的 |
8
cxbig 2016-04-15 14:31:43 +08:00
建议统一使用 json 格式做 API
|
9
BOYPT 2016-04-15 14:33:46 +08:00
不该是根据 content-type 来判断么……
|
11
pangliang 2016-04-15 14:44:35 +08:00
不管你最开始什么格式, 你最后处理器肯定是用 map 的格式取参数: $xxx['xx'] , 所以做一个转换层, 把输入的格式 json 或者 input 的, 转成 map; 再路由处理就是了
/raw/user/login 路由器就先 $param = rawToArray(); 再 dispatch('/user/login',$param); /json/user/login 路由器就先 $param = jsonToArray(); 一样 dispatch('/user/login',$param); 处理器 UserAction.php 就是用$param['username'] |
12
learnshare 2016-04-15 14:48:03 +08:00
FormData 只在需要上传文件的时候会用,其他都是 JSON
|
13
BOYPT 2016-04-15 14:52:54 +08:00
@abelyao content-type 是 headers 里面的……根据 content-type 判断来源是什么类型,再去调用解析器。一般来说框架都会有处理好这样的逻辑,我建议不要自己重复实现。
比如 Slim3 框架里面默认的几个解释器可以处理 json/xml/formdata 格式的代码: https://github.com/slimphp/Slim/blob/3.x/Slim/Http/Request.php#L196 |
14
tidezyc 2016-04-15 14:54:40 +08:00 via iPhone
http 协议早就帮你想好了,不如你以为 content-type 是用来干嘛的
|