资讯专栏INFORMATION COLUMN

HTTP API 设计入坑指南(一)

jay_tian / 2590人阅读

一、请求方式 1. 请求方式有get/post/put/delete/options 2. get和post的区别:

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

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

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

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

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

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的方式

在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任何情况下都不改出现单引号,必须是双引号

一切皆字符串

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

记得关注我呦

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30746.html

相关文章

  • HTTP API 设计入坑指南(二)

    摘要:而只需要服务端生成,客户端保存,每次请求在头部中使用携带,服务端认证解析就可。如果缓存不清理,验证码就会一直有效,不安全。 一、授权 参考文献:https://blog.risingstack.com/... 1. Basic authentication (最简单,适用于没有第三方的请求接口中) 客户端发送authorization,内容为 Basic Base64编码(usern...

    JayChen 评论0 收藏0
  • HTTP API 设计入坑指南(二)

    摘要:而只需要服务端生成,客户端保存,每次请求在头部中使用携带,服务端认证解析就可。如果缓存不清理,验证码就会一直有效,不安全。 一、授权 参考文献:https://blog.risingstack.com/... 1. Basic authentication (最简单,适用于没有第三方的请求接口中) 客户端发送authorization,内容为 Basic Base64编码(usern...

    pingan8787 评论0 收藏0
  • Java入坑指南

    摘要:入坑指南是滴,下面是一个最低的入坑还应该有种设计模式应该掌握的。堆栈以帧为单位保存线程的状态,对堆栈的操作为压栈和出栈执行字节码以后,将会产生程序计数器和栈,程序计数器存放将要执行下一条指令的偏移量。 Java入坑指南是滴,下面是一个最低的入坑 还应该有23种设计模式应该掌握的。╮(╯▽╰)╭注意,第一个j是大写。 Java的特点跨平台,风格接近C++最重要的api文档 https:/...

    Rindia 评论0 收藏0
  • Browserify简易入坑指南

    摘要:简要说明长处在于使用模块规范,而不是使用的模块规范,以及使用的模块规范。简单使用关于命令行工具使用,请参照官方文档。相同模块重复依赖模块重复依赖很容易理解,模块实现时可能分割为多个子文件实现,每个子文件内部可能会引用同一个模块,如。 简介 browerify: http://browserify.org/index.html browserify可以看做浏览器端的又一个模块...

    vpants 评论0 收藏0
  • FIBOS入坑指南——本地开发环境搭建

    摘要:如果出错,需要查看一下本地节点是否正在运行,在浏览器输入后记完至此,本地的开发环境基本搭建完成,如果你想试试在本地环境编写部署调用智能合约,可以参考官方开发文档,当然,后续有时间,我也会把在智能合约开发过程中踩到的坑写写。 FIBOS是什么? FIBOS 是一个结合 FIBJS 以及 EOS 的 JavaScript 的运行平台,它使得 EOS 提供可编程性,并允许使用 JavaSc...

    goji 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<