php http api,HTTP API 设计入坑指南(一)

一、请求方式

1. 请求方式有get/post/put/delete/options

2. get和post的区别:

get通常用作获取数据,post通常用作提交数据

get参数有长度限制,受限于URL长度(http协议对url长度不限制,而是服务器和浏览器的配置参数限制),post无限制

get幂等,post不幂等(幂等:多次请求,结果一样)

header里有个参数content-length,记录传输body长度,服务器根据此值判断文件大小,如果实际大小

二、响应状态码

2**:以2开头都表示成功

200 OK 成功

201 Created 新建/修改数据成功

202 Accepted 请求已进入后台排队,(异步任务)但任务并不代表已经执行成功

204 No content 删除成功

206 Partial content 断点续传,eg:迅雷100M文件下载,网速10M/s,分段下载1-10,11-20…,已下到15节点,突遇断电,下次下载从11开始

3**:重定向问题

4**:客户端

400 Invalid request 请求错误

401 Unauthorized 没有权限

403 Forbidden 禁止

404 Not found 不存在

405 Method not allowed 不支持请求方法

422 Unprocesable entity 验证错误

5**:服务器

500 Internal server error 服务器错误

三、跨域

1. JSONP 跨域读取数据

参考文献:

ajax受同源策略(协议、端口、域名都相同)影响,不允许跨域请求,但script的src属性可以访问跨域的JS脚本,jsonp使其不返回json数据,而返回“调用某函数的js代码”,从而实现跨域。

eg: 在www.ren.com中

在test.js中 getData({"name”:”小小聪”}) 。 getData是www.ren.com中的一个函数

jsonp不支持post请求,因为script不支持post

JQuery提供方便使用jsonp的方式

$(document).ready(function(){

$.ajax({

type : "get",

async: false,

url : "http://www.cong.com/ren.php",

dataType: "jsonp",

jsonp:"callback", //请求php的参数名

jsonpCallback: "getData",//要执行的回调函数

success : function(data) {

alert("name:" + data.name);

}

});

});

在ren.php中写

$data = array('name' => '小小聪');

$callback = $_GET['callback'];

echo $callback."(".json_encode($data).")";

return;

2. CROS 跨域 支持get,post等所有类型的请求

JSONP主要被老的浏览器支持,而绝大多数现代浏览器都已经支持了CORS

CROS主要通过Header支持的

Access-Control-Allow-Origin:限制域名(不建议设为*,防止XSS攻击)

Access-Control-Expose-Headers :允许访问的服务器白名单

四、响应之JSON数据类型

不同语言数据类型解析规则不一致,导致不同语言之间部分数据类型无法解析

eg:

部分语言没有null类型,GO、Lua使用nil表示

部分语言布尔值没有0,1概念

数组类型大小不一致、类型最大值不一样

PHP注意:

数组转json对象为{“key”:“value”},如果数组为空[],转json则为[]。

对于API,字段类型应当是固定的,数组和对象的转换,某些语言无法处理,object为空时,使用 new stdClass() 空对象代替,而非空数组[ ]

Python注意:

打包json时,对unicode字符转换后会在字符串前添加 u 前缀

注意生成json任何情况下都不改出现单引号,必须是双引号

bVbake0?w=1060&h=680

bVbake6?w=1058&h=480

一切皆字符串

授权、安全部分在下篇文章

记得关注我呦

bVbmOLi?w=258&h=258

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值