当前位置: 首页 > 后端技术 > PHP

HTTPAPI设计指南(一)

时间:2023-03-29 23:16:22 PHP

一、请求方式1、请求方式包括get/post/put/delete/options2、get和post的区别:get一般用于获取数据,post一般用于提交数据get参数有长度限制,受url长度限制(HTTP协议不限制url长度,受服务器和浏览器配置参数限制),post是无限的。get是幂等的,post不是幂等的(幂等:多次请求,结果相同)header中有一个参数content-length,它记录了传输body的长度。服务器根据这个值判断文件大小。如果实际大小ajax受制于相同的-originpolicy(协议、端口、域名都一样),不允许跨域请求,但是脚本的src属性可以访问跨域的JS脚本,jsonp让它不返回json数据,而是返回"调用函数的js代码代码》实现跨域eg:在www.ren.com中test.getData({"name":"小小聪"})在js中。getData是www.ren.com中的一个函数jsonp不支持post请求,因为script不支持postJQuery提供了一种方便的方式使用jsonp写在ren.php$data=array('name'=>'小小聪');$callback=$_GET['callback'];echo$callback."(".json_encode($data).")";return;2.CROS跨域支持get、post等所有类型的请求,JSONP主要是老式浏览器支持,现代浏览器大多已经支持Access-Control-Allow-Origin,CORSCROS主要通过Header:restricteddomain来支持names(不建议设置为*,防止XSS攻击)Access-Control-Expose-Headers:允许访问的服务器白名单4.响应的JSON数据类型与不同语言的数据类型解析规则不一致,导致无法在不同语言之间解析某些数据类型eg:有些语言没有null类型,GO和Lua用nil表示有些语言没有0的boolean值1.概念数组类型具有不同的大小和不同的最大值。PHP注意:数组转换为json对象为{"key":"value"},如果数组为空[],转json时为[]。对于API,字段类型要固定。数组和对象之间的转换是某些语言无法处理的。当对象为空,使用newstdClass()替换为空对象,不是空数组[]Python注意:在打包json时,会在转unicode字符后的字符串前加一个u前缀,注意单引号不会生成json时任何情况下都变了,必须是双引号一切都是字符串授权,安全部分在下一篇,记得关注我