HTTP API 设计入坑指南(一)

1、请求方式

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

2. get和post的区别:

  • get一般用做获取数据,post一般用做提交数据
  • get参数有长度限制,受限于URL长度(http协议对url长度不限制,而是服务器和浏览器的配置参数限制),post无限制
  • get幂等,post不幂等(幂等:屡次请求,结果同样)
  • header里有个参数content-length,记录传输body长度,服务器根据此值判断文件大小,若是实际大小<content-length,服务器一直等,直到超时

2、响应状态码

参考文献:http://tool.oschina.net/commo...javascript

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  服务器错误

3、跨域

1. JSONP 跨域读取数据

参考文献:<https://blog.csdn.net/u011897301/article/details/52679486>

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

eg: 在www.ren.com中php

<script type="text/javascript" src="http://www.cong.com/test.js"></script>

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

jsonp不支持post请求,由于script不支持post

JQuery提供方便使用jsonp的方式

<script type="text/javascript">
    $(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);
            }
        });
    });
</script>

在ren.php中写java

$data = array('name' => '小小聪');
$callback = $_GET['callback'];
echo $callback."(".json_encode($data).")";
return;

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

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

    Access-Control-Allow-Origin:限制域名(不建议设为*,防止XSS攻击)  
         Access-Control-Expose-Headers :容许访问的服务器白名单

4、响应之JSON数据类型

不一样语言数据类型解析规则不一致,致使不一样语言之间部分数据类型没法解析
eg:
    部分语言没有null类型,GO、Lua使用nil表示
    部分语言布尔值没有0,1概念
    数组类型大小不一致、类型最大值不同

PHP注意:
    数组转json对象为{“key”:“value”},若是数组为空[],转json则为[]。
    对于API,字段类型应当是固定的,数组和对象的转换,某些语言没法处理,object为空时,使用 new stdClass() 空对象代替,而非空数组[ ]
Python注意:
    打包json时,对unicode字符转换后会在字符串前添加 u 前缀
    注意生成json任何状况下都不改出现单引号,必须是双引号

clipboard.png

clipboard.png

一切皆字符串json

受权、安所有分在下篇文章跨域

记得关注我呦
图片描述数组

相关文章
相关标签/搜索