博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP API 设计入坑指南(一)
阅读量:7038 次
发布时间:2019-06-28

本文共 1659 字,大约阅读时间需要 5 分钟。

一、请求方式

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

clipboard.png

clipboard.png

一切皆字符串

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

记得关注我呦

图片描述

你可能感兴趣的文章
伯克利AI实验室出品:用GAN实现字体风格迁移
查看>>
Vue-cli 使用json server在本地模拟请求数据
查看>>
ISP劫持http请求
查看>>
Android多媒体之认识声音、录音与播放(PCM)
查看>>
TypeScript设计模式之单例、建造者、原型
查看>>
分布式配置
查看>>
python进阶之魔法函数
查看>>
vue移动端路由切换完整实例
查看>>
重拾数据结构之排序
查看>>
Rxjava2操作符(二)
查看>>
ConstraintLayout你可能要了解的一些内容
查看>>
我的Java设计模式-单例模式
查看>>
[译] 轻松管理 Swift 项目中的不同环境
查看>>
Mysql常用命令
查看>>
混合开发之-vue和JsBridge跳转返回
查看>>
react使用总结
查看>>
用户画像之用户性别识别
查看>>
Vue3 Proxy DEMO
查看>>
重磅 |“吴恩达deeplearningai”官方微信公众号已经上线!
查看>>
云数据库 Redis 版功能特性
查看>>