做为一名又拍云的技术支持工程师,小拍天天都会接收到不少客户的提问。这其中,有不少客户会问:“小拍,请问云存储上传除了使用控制台的文件管理和 FTP 工具以外,有没有其余的途径进行上传呢?”javascript
“有哒,您能够调用 API 接口来进行上传哦。”html
“请问,什么是 API 接口呢?我要怎么调用呢?”java
别着急,这就为您介绍 API 接口。ios
首先,咱们先来看一看 API 接口的定义:ajax
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工做机制的细节。编程
从定义中,咱们先划下重点:函数、 提供应用程序与开发人员、无需访问源码、例程 。其中,例程是某个系统对外提供的功能接口或服务的集合。axios
看完这个定义是否是感受本身看了个寂寞,这解释跟不解释没有差异啊?好啦,不要担忧,小拍来给你们直接了当的说一说。api
API 其实能够理解为是接收要求的信差,经过 API 接口,咱们告诉系统(例程)想要作什么,系统再把处理结果响应回来。跨域
若是用一个现实生活中的场景来举例说明,那么餐厅的服务员其实就是一个典型的 API 。想象一下你正坐在餐桌前,面前桌子上有一张点菜用的菜单,点好菜后,交由厨房进行处理。但如今少了一个关键的连接点,如何把咱们的单子送到厨房,再把食物送到个人桌上呢?浏览器
这就是服务员(API)登场的时候了。服务员就是这个信差,他会传递你的要求或者餐点,把这些信息告诉厨房(系统),厨房就会知道怎么作,而后把餐品经过服务员端(响应)给你。
如今咱们把这个原理应用到真正的 API 例子上来。
快递单号查询,这你们应该很熟悉吧。朋友经过顺丰寄了一箱零食给你,并告知你了快递单号,你就能够在顺丰的官网上,输入快递单号进行查询。顺丰的系统接收到查询,就会在系统中查找对应快递的信息,响应给你。
可是,不少时候咱们并非直接经过快递公司的网站去查询快递信息的。比方说经过淘宝买的衣服,卖家经过顺丰发货,但咱们能够在淘宝上查询到顺丰快递的信息。那么淘宝是怎么获取到存放在顺丰服务器上的快递数据呢?
没错,这里就是使用了 API 。淘宝能够经过顺丰提供的 API 接口,来获取存放在顺丰服务器上的快递信息,最后显示在咱们面前。
如今再看上边的定义,是否是感受好理解一些了呢?API 接口就是预先定义好的函数逻辑,提供给其余系统请求,而后返回结果的一个东西。
在知道了 API 接口的做用后,使用 API 接口的缘由也就一目了然了。举个例子:你打算开发一个打车软件,须要在页面上展示地图,那你会怎么作呢?
若是说本身来开发地图,开发时间就会大大延长,成本也会增长许多。这个时候,其实能够在高德开放平台或者百度地图的开放平台,找到地图 API,购买他们的服务,部署调用相关的 API ,这样就能够快速在咱们软件中上线地图功能了。
因此,对于软件提供商来讲,开放 API 并让别的应用程序来调用,造成生态,软件才能发挥最大的价值,才能更有生命力,同时别人也看不见代码,不会伤害商业机密。
对于应用开发者来讲,有了开放的 API ,就能够直接调用多家公司作好的功能来作本身的应用,不须要全部的事情都本身操刀,节省精力。
如今市面上开放的 API 接口,通常都是经过 HTTP 请求调用的。例如,一些第三方提供的查询天气的功能,咱们就能够根据第三方提供的 API 地址以及相关的说明文档,携带上请求参数,在浏览器中直接访问使用。
接下来,小拍以又拍云存储上传 API 为例,经过 curl 工具来完成一个向云存储上传文件的操做。接下来会涉及到一些命令行工具以及代码的操做,若是你对 curl 这个工具不太熟悉的话,也能够参考小拍以前的文章《双剑合璧-掌握 curl 和 Dig 走天涯》哦。
每一个 API 接口根据做用不一样,须要传递的参数也是不尽相同的。所以,咱们在使用一个 API 接口以前,最好先看一下官方文档的 API 说明。
经过文档介绍,咱们能够看到若是须要请求云存储的上传接口,咱们须要使用 PUT 的方式,向 http://v0.api.upyun.com 发起请求。其中存储服务名和文件的保存路径定义在请求地址中。而且须要携带 Authorization 鉴权请求头,来确保 API 的调用是合法的。
Authorization 的生成,小拍使用最简单的基本认证来进行演示。
根据鉴权文档介绍,curl 支持直接传入操做员名和密码来生成鉴权请求头。
了解 API 接口调用的规则以后,咱们就能够开始准备数据,来向云存储空间上传文件啦。
例如,小拍的桌面上有一张图片,小拍想把图片上传到本身云存储空间下的 images 目录下,保存名为 lufei.jpg。
小拍的云存储空间名为 fileupload-upyun,操做员名为 hello,对应的密码为 dF4XhRbnpsvonU1dgdetURncHSwa2Z37,这样,咱们就有调用上传 API 的必要参数了。
接下来,咱们就按照要求,组装 curl 的请求命令。
curl -X PUT \ http://v0.api.upyun.com/fileupload-upyun/api/lufei.jpg \ -u hello:dF4XhRbnpsvonU1dgdetURncHSwa2Z37 \ -T C:\Users\hilih\Desktop\test.jpg
参数说明:
-X 能够指定 curl 发起请求的方法
-u 对传入的数据进行 HTTP 基本认证,也就是用户和密码组和的base64编码
-T 可使 curl 读取指定路径下的文件
这样呢,咱们就成功的调用了云存储的上传 API 接口,经过接口上传了一张本地的图片到存储空间中。
不过,使用 curl 发起 HTTP 请求,看上去总有一些麻烦,命令行也太反人类了吧,有没有更加友好的界面呢?当时啦,使用 curl 只是其中一种的上传方法,咱们还能够经过其它方式,来向云存储 API 发起 HTTP 请求。
例如二狗子的网站分享图片,二狗子就对上传的 API 作了处理,用网页的形式对他的用户提供了一个上传的 API 接口。小拍也联系了二狗子,请他提供了一个简单的测试用例。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>云存储上传</title> <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.20.0/axios.min.js"></script> </head> <body> 上传服务空间:<input id='bucketname'> 操做员帐号:<input id='username'> 操做员密码:<input id='password'> 存储路径:<input id='path'> 文件选择:<input id='fileupload' type='file' name='file' /><br><br> <button>上传</button> <script type="text/javascript"> window.onload = function() { document.querySelector('button').onclick = ufload; } function ufload() { var bucket = document.querySelector('#bucketname').value; var username = document.querySelector('#username').value; var password = document.querySelector('#password').value; var path = document.querySelector('#path').value; var input = document.querySelector('#fileupload'); var file = input.files[0]; axios.defaults.baseURL = 'http://v0.api.upyun.com'; axios.put('/' + bucket + path, file, { auth: { username: username, password: password } }).then(function(response) { console.log(response.data); console.log(response.headers); console.log(response.status); if (response.status == 200) { alert('上传成功'); } }) } </script> </body> </html>
也欢迎你使用熟悉的编程语言,来尝试调用 API 上传接口呀。