我们都知道如果在前端直接提交表单的话,数据包是以 FormData 类型提交到服务端的,在服务端(例如 PHP )则直接 $_POST['xxx'] 可以获取到。
但如果在前端使用 AJAX 提交,例如 AngularJS 的 $
http.post(),则是用 Payload 格式发送的,在服务端用 $_POST['xxx'] 是拿不到数据的,需要读取 php://input 才可以拿到数据包。
那么问题来了,如果开发一个 API ,不限于只给 HTML 前端调用,可能还会有 iOS 等各种客户端,甚至是直接 curl 命令,那么服务端(不限于 PHP )应该读哪个数据呢?是直接拿 post 还是拿 input 后自己处理呢?
我知道 AngularJS 可以把数据转成 FormData 后再提交,但如果面向各种前端、客户端,后端应该使用哪种更规范一些?
想听听大家实际开发的经验
pangliang
2016 年 4 月 15 日
不管你最开始什么格式, 你最后处理器肯定是用 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']
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://study.congcong.us/t/271269
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.