任何对外提供服务的应用都绕不开api的发布,你的API可能是这个样子:
www.baidu.com/api/v1/getUsername?id=1
或者
www.baidu.com/app/index.php?r=info/user/getUsername&id=1
如果答案是YES,那么用句很潮的话,我们可以说你的API很不RESTful。
首先要说,不管你的API属于哪种风格,只要能够满足工作需要,就足够了。API格式并不存在绝对的标准,只存在不同的设计风格。
API设计包含两部分:请求和响应。
请求包含:请求URL、请求方法、请求头部信息等。
响应包含:响应体和响应头部信息。
一个请求URL的组成:
https://www.baidu.com:443/app/index.php?r=info/user/getUsername&id=1#tag
# 请求方法:GET
# 请求协议:protocal: https
# 请求端口:port: 443
# 请求域名:host: www.baidu.com
# 请求路径:pathname: /app/index.php
# 查询字符串:search: r=info/user/getUsername&id=1
# 页面书签:hash: #tag
根据URL组成部分:请求方法、请求路径和查询字符串,我们有几种常见的API风格。比如当删除id=1的作者编写的类别为2的所有文章时:
# 纯请求路径
GET www.baidu.com/articles/delete/authors/1/categories/2
# 一级使用路径,二级以后使用查询字符串
GET www.baidu.com/articles/delete/author/1?category=2
# 纯查询字符串
GET www.baidu.com/deleteArticles?author=1&category=2
# RESTful风格
DELETE www.baidu.com/articles?author=1&category=2
前面三种都是GET请求,主要的区别在于多个查询条件时怎么传递查询字符串,有的通过使用解析路径,有的通过解析传参,有的两者混用。同时在描述API功能时,可以使用article/delete,也可以使用deleteArticles。
而第四种RESTful API最大的区别在于行为动词DELETE的位置,不在url里,而在请求方法中。
REST(Representational State Transfer 表现层状态转移)是一种软件架构风格、设计风格,而不是标准。主要用于客户端和服务端的API交互,它的优势在于更简洁、清晰、可读性强。
REST的主要特点是:
无状态是最重要的特性,大部分的Client-Server,Brower-Server也都能很好的支持。第2点则是我们需要去关注的。
表现层状态转移(REST)是一个大的概念,也不好理解,我的理解就是在URL的定义上能够清楚的表示其请求含义。它的核心思路就是动词+宾语:
DELETE www.baidu.com/api/v1/articles?author=1&category=2
# 动词 DELETE,表示要进行的操作是删除,即状态转移
# 宾语 articles,表示文章这种资源URI,推荐用复数,即表现层
# 定语 author=1&category=2,表示具体是什么资源
# 版本 api/v1,这个能够帮助我们更好的进行版本的升级,同时不影响原有的请求
我们用articles来指明资源类型,用author=1&category=2来在确定具体的资源,用GET/POST/PUT/DELETE来指明要进行的增删改查操作。
这种风格相比于/api/deleteArticles,声明的方法数量只有1/4,各个接口之间的风格也更加统一,调用起来更加清晰。
同时这种方法能够保证浏览器常规能访问的到的GET请求对资源来说是安全的。比如别人给我们发送了一个链接:/deleteArticle?id=1,我们绝对不会希望随便点击一下就会跳转到浏览器访问,然后误删了这个资源。
除了请求URL有要求,在响应时也有一些要求。我们知道状态码有:
所有的状态码 共有100多种,涵盖了绝大多数常见的网络场景,而且是网络通用的定义规范和解释,因此我们应该尽可能使用精确的状态码。
当前有一些不太恰当的做法是即便请求出错,依然使用200状态码,转而将错误信息包含在响应体中,或者响应使用纯文本导致无法和正常数据一样标准化解析,如:
httpCode: 200
response: {
status: 1,
msg: '请求无权限'
}
# 或:
httpCode: 200
response: '请求无权限'
但我们其实可以用更精确的状态码403代表权限不足,所以合适的响应结果应该是:
# 异常时
httpCode: 403,
httpErrorMsg: '请求无权限'
# 正常时:
httpCode: 200,
response: {
status: 0,
msg: '',
data: []
}
RESTful是一种API设计风格,并不是一种强制规范和标准,它的特点在于请求和响应都简洁清晰,可读性强。
我们主要关注几点:
在 Native 开发中,Android 和 IOS 平台都在系统层面直接提供给了应用开发识别图像的一些能力,比如对于二维码/条形码的识别,Android 可以使用 barcode API 、 iOS 可以使用 CIQRCodeFeature API 。
Js的API设计原则总共包含了七个大块。系卤煮自己总结的一些经验和教训。本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来。很难做到详尽充实,如果有好的建议或者不对的地方,还望不吝赐教斧正。
现在越来越流行前后端分离开发,使用ajax交互。所以api接口文档就变的十分有意义了,目前市场有哪些比较优秀的接口文档管理工具呢?比如:MinDoc,eoLinker,apizza,RAML,Swagger等等
无论网站,还是App目前基本都是基于api接口模式的开发,那么api的安全就尤为重要了。目前攻击最常见的就是“短信轰炸机”,由于短信接口验证是App,网站检验用户手机号最真实的途径,使用短信验证码在提供便利的同时,也成了呗恶意攻击的对象,那么如何才能防止被恶意调用呢?
整理提供最新的各种免费JSON接口,其中有部分需要用JSONP调用。方面前端同学的学习或在网站中的使用,包括:免费的天气预报、地图、IP、手机信息查询、翻译、新闻等api接口
要弄清楚什么是RESTful API,首先要弄清楚什么是REST。REST -- REpresentational State Transfer,英语的直译就是“表现层状态转移”。如果看这个概念,估计没几个人能明白是什么意思。
Fetch API 已经作为现代浏览器中异步网络请求的标准方法,其使用 Promise 作为基本构造要素。Fetch 在主流浏览器中都有很好的支持,除了IE。
随着移动互联网的发展, 基于互联网的应用正变得越来越普及,在这个过程中,更多的平台将自身的资源开放给开发者来调用。对外提供的API 调用使得平台之间的内容关联性更强,同时这些开放的平台也为用户、开发者和中小网站带来了更大的价值。
环境centos,添加deamon.json后,dockerd命令可以启动docker,这时请求 127.0.0.1:2375 可以正常访问,使用systemctl无法启动docker的情况.无法启动docker:查看当前的docker配置
你是否正在设计第一个Web应用程序?也许你过去已经建立了一些,但是目前也正在寻找语言的变化以提高你的技能,或尝试新的东西。有了所有信息,就很难决定为下一个产品或项目选择哪种编程语言。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!