写点什么
学习 MySQL 开源 云计算 行业资讯 算法 Python 人工智能 区块链 Linux 前端 个人成长 面试 架构师 编程 企业动态 新基建 敏捷 安全 读书笔记 高效工作 团队管理 创业 活动专区 生涯规划 知识管理 运维 产品经理 查看更多

WEB-API 的设计与开发

用户头像
墨凡
关注
发布于: 2021 年 04 月 17 日
WEB-API的设计与开发

Web-API 简介:

  • 通过 HTTP 协议进行网络调用的 API

  • Web 系统,通过 URI 完成信息交互

  • 开放 API:使自己公司的服务、数据公布与互联网 Amazon:公开 API 使其他网站可以销售其商品 Twitter:早在 2006 年就开始公开 API

场景:

  • 已发布的 web 在线服务的数据、功能通过 API 公开(需考虑:风险、所得)

  • 将附加在其他网页的小组件公开

  • 构建现代 WEB 应用

  • 开发智能手机应用

  • 开发手机社交游戏

  • 公司内部的多个系统集成

问题:

  • 无所适从

  • 凭经验、模仿

  • 缺乏章法

  • 认识比较偏感性,口口相传

  • 很多人只认为返回 JSON 数据的 URI 才是 API,实际上 Web 系统中的 URI 都是 API

让 API 优雅的理由:

  • 易于使用

  • 便于更改

  • 健壮性好

  • 不怕公之于众

  • 怎样美化:设计遵守已有规范,遵守事实标准, REST风格

设计规范:

请求 URI 设计的基本思路:

  • 容易记忆的 URI,包含功能一目了然

  • 短小便于输入

  • 易读易懂

  • 没有大小写混用

  • 修改方便

  • 不会暴露服务架构

  • 规则统一

按照 HTTP 协议的请求方法类型规范使用:

  • GET:获取资源

  • POST:新增资源

  • PUT:更新已有资源

  • DELETE:删除资源

  • PATCH:更新部分资源

  • HEAD:获取资源的元信息

我所见的 HTTP-API 中,大部分都只有 POST、GET 请求。

资源访问性 URI 设计注意:

  • 使用名词的复数形式

  • 注意所用单词(search 场所/find 东西)

  • 不使用需要编码的字符及空格

  • 使用连字符分割单词

  • API 的各种样例参考: https://www.programmableweb.com/

国际大厂的设计案例:

分页的几种方式:

  • 使用相对位置 offset:(当数据量比较大时,效率会降低)

  • 使用绝对位置 max_id

  • hasNext

响应数据的格式:

  • JSON

  • XML

  • PHPserialize

对于多格式支持,可使用查询参数指定,使用扩展名方式指定,使用在请求头部指定媒体类型,比如 Content-Type:application/json

目前 JSON 这种数据格式已经占据了大部分 API 的数据格式。

最大程度的使用 HTTP 协议:

  • 了解基准协议,私有协议,避免引入私有协议

  • 正确使用状态码:尽可能使用 HTTP 协议规范的状态码,不用私有定制状态码。

  • 缓存 Expires:RFC 7234 Cache-Control 

  • 媒体类型

  • 同源策略与跨域问题(jsonP,CORS)

维护与更改:

  • 通过版本信息来管理 API(指定版本参数、URI 嵌入版本)

  • 尽可能向下兼容

  • 区分移动端与 web 的差异

  • 变更信息公布

  • 停服规范

API 常见安全问题:

数据的非法获取:

  • HTTPS 加密:HTTPS 加密不能完全保证安全。

  • 中间人攻击:证书获取服务伪造,证书需要设置合理的有效期。

  • 公共 WIFI

  • 客户端的安全系数:客户端如果本身存在安全问题,那通讯与服务端做的再好也白搭。

浏览器访问的 API 所存在的问题:

  • XSS:跨站点脚本攻击

  • XSRF:跨站点请求伪造

  • JSON 劫持

  • 参数篡改:通过参数猜测,进行越权访问

  • 多次请求:通过多次调用达到同一功能的多次执行,比如转账,发放优惠券。

  • 拒绝服务攻击(DoS):使用一些手段将流量带宽打满,使正确的访问无法进入。


本文整理于读书笔记:《 web-api设计与开发》一书:

这本书通过列举大量一线互联网公司的开放 API 实例,讲解了 API 设计的方方面面,对于笔者本人来说,虽然很多内容平常开发有涉及,还是有所受用,提升了对 API 重要性的认识,以及设计时的一些策略。


再者就是,书中强调开发这需要注重使用现有权威组织既定的规范、协议,而非自己自定义规范协议,让开发的 API 更利于理解,使用更方便。


有哪些让你想吐槽的糟糕的 API 设计,在评论区写下你的感受和建议!

HTTP 软件设计 web tech
用户头像

墨凡

关注

文字,是一种表达方式 2017.12.22 加入

90后程序员,对技术有追求,对人生有态度

评论

发布
暂无评论
WEB-API的设计与开发

民权资讯网书字起名字男孩用父母的名字给小孩起名上海seo推广优化公司姓隋的男孩起名无限打工乌鲁木齐周易预测网站建设公司顺德农业合作社起名宝宝起名男孩王设计创意网站公司姓沙起名金福南杀人事件始末下载周易免费八字命理电子签名认证黑帽seo技巧有周公解梦大全查询梦见打人代做英文seo优化建设网站最好的公司余姚建设公司网站园林绿化起名永城科技馆开放时间傅程鹏最新电影美人鱼作文100字天津高端网站建设公司网站设计深圳公司4月17日八字算命周易孩子取名大全如何网站优化排名渭南网站制作周易10卦少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

民权资讯网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化