作为一名又拍云的技术支持工程师,小拍每天都会接收到很多客户的提问。这其中,有很多客户会问:“小拍,请问云存储上传除了使用控制台的文件管理和 FTP 工具之外,有没有其他的途径进行上传呢?”

“有哒,您可以调用 API 接口来进行上传哦。”

“请问,什么是 API 接口呢?我要怎么调用呢?”

别着急,这就为您介绍 API 接口。

什么是 API 接口

首先,我们先来看一看 API 接口的定义:

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

从定义中,我们先划下重点:函数、 提供应用程序与开发人员、无需访问源码、例程 。其中,例程是某个系统对外提供的功能接口或服务的集合。

看完这个定义是不是感觉自己看了个寂寞,这解释跟不解释没有差别啊?好啦,不要担心,小拍来给大家直接了当的说一说。

API 其实可以理解为是接收要求的信差,通过 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 上传接口呀。

白话科普,10s 了解 API相关推荐

  1. 【白话科普】10s 从零看懂 H5

    最近大家有没有发现,很多微信公众号的动态内容变多了?我们常常可以看到,公众号内容中有很多动态图片甚至动画,还可以通过手指滑动切换页面,或者有一些小的点击互动. 这种看起来有点高级的小作品,其实是都是& ...

  2. 阿里云大佬叮嘱我务必要科普这个 Elasticsearch API

    上截图是阿里云魏子珺大佬(阿里巴巴集团技术专家)周一叮嘱我的. 魏子珺大佬的早期分享参考: 2021 年 Elasticsearch 生态和技术峰会干货总结 1.啥 API 这么重要,阿里大佬要亲自叮 ...

  3. 电容和频率的关系_为什么会有直流电和交流电?频率为什么是50hz?白话科普专业知识...

    交流电和直流电的区别 交流电即交变电流,大小和方向都随时间做周期性变化的电流. 直流电则相反.电网公司一般使用交流电方式送电,但有高压直流电用于远距离大功率输电.海底电缆输电.非同步的交流系统之间的联 ...

  4. 【白话科普】上网时遇到的 404 是什么意思?

    随着网络时代的发展与进步,我们的学习工作和生活早已离不开互联网,智能家居.网上购物.日常出行都需要互联网的支持.互联网切切实实地给生活带来了诸多便利. 那大家有没有碰到过这么一个情况呢?当我们在使用手 ...

  5. 【白话科普】网站图片不显示,背后的原因你都清楚吗

    浏览网页的时候,什么才是最重要的?是充满信息的文字么?没想到吧,是我图片哒!在这个快节奏的时代里,图片才是碎片化时间中最容易传递信息的存在.因此在网页中,图片是不可或缺的存在.然而经常有朋友反应,打开 ...

  6. 【白话科普】聊聊 DNS 的那些小知识

    你是否在上网时,遇到过这样的情况:QQ 能正常发送消息,但是网页却打不开,查看网络连接又正常显示.面对这种情况很多小伙伴都感到有些无措.那究竟要怎么处理,这究竟是怎么回事呢? 上网查询得知,一般情况下 ...

  7. 白话科普系列——网站靠什么提升加载速度?

    随着生活节奏的不断加快,时间变得极其宝贵,等待页面加载的时间也随之缩短.这样一来如何留住客户变成了一项重要的考验.而减少页面加载等待时间,加快加载速度,就成了提高用户参与度S,提升业务可靠性的有效策略 ...

  8. 白话科普系列——最好用的浏览器 Chrome,你用了么?

    市面上的浏览器多种多样,而浏览器的王者--IE 浏览器,它在 2002 年市场份额高达 95.4%.直到后续 Firefox,Safari,Chrome 相继问世才动摇了 IE 浏览器的地位,其中 C ...

  9. 白话科普系列——双十一,竟然是一场有“预谋”的DDoS攻击?

    随著互联网与信息技术的发展,所有人都在享受互联网带来的舒适和便利.如今,无论是个人社交行为,还是商业活动都早已离不开互联网. 但是,网络空间在创造机遇的同时,也带来了威胁.随着企业价值.知名度的提高. ...

最新文章

  1. 科学院和工程院公布188名新院士!外籍占比26%,中科院北大清华38人,阿里王坚当选...
  2. 使用同一个目的port的p2p协议传输的tcp流特征相似度计算
  3. 前端入门11-JavaScript语法之数组
  4. JavaScript之引用类型介绍
  5. 构建Spring Boot RESTful服务+ Spring Boot执行器
  6. 【渝粤题库】国家开放大学2021春2238个案工作题目
  7. (4)散列函数设计:除留余数法
  8. 蓝桥杯 ALGO-2算法训练 最大最小公倍数(贪心算法)
  9. 实战 | F1060防火墙透明模式典型组网配置案例(trunk)
  10. 块级元素行内元素内联元素
  11. 使用 jdbc 从数据库中查询数据
  12. 图纸管理软件_企业图纸文档的安全管理与使用,是否遇到这些图纸管理问题?...
  13. html动态图片置于底层,求设置图片为“浮于文字下方,居中,置于底层的代码。...
  14. matlab:夫琅禾费衍射简单仿真
  15. hp-unix 自带磁带机备份数据
  16. 图片像素转换工具(pixelmash 2020) v2020.1.0
  17. Typecho情侣博客Brave主题源码
  18. 使用System.setOut()
  19. 提示:“网络连接”文件夹不能检索在您机器上的网络适配器.请确认“网络连接”服务起用并运行....
  20. 从你的全世界路过---陌陌X-SIGN还原

热门文章

  1. 希沃展台如何使用_【海安幼教微家园】玩转希沃白板 点亮精彩课堂 —长江路幼儿园开展希沃一体机操作技能培训...
  2. 多重循环控制之打印金字塔
  3. linux对2k屏幕,(转)Linux中的screen命令使用
  4. 从数据类型 nvarchar 转换为 numeric 时出错_Python数据分析类库系列Numpy之ndarray的数据类型...
  5. 第三章 安装apache
  6. PHP实习之路—NO.2(看IPB博文的源码,理清别人开发的思路)
  7. SVN在另类环境中实现自动提交的方法
  8. 网联能否一统天下,取决于三个问题
  9. c++将引用作为函数的参数---6
  10. Object与RTTI