API是什么东西?
金蝶云社区-zym
zym
7人赞赏了该文章 542次浏览 未经作者许可,禁止转载编辑于2018年06月13日 10:27:49

在我学习软件开发之前,API 听起来就像一种啤酒


不过今天我经常使用这个名词以至于我最近在酒吧的时候都想点一杯 API了


酒保的反映是抛出了个404:找不到该资源


我碰到很多人,无论是在技术行业工作的还是其他,他们对API这个相当常见的名词的含义的理解有点模糊和偏差


严格的来说, API 代表:应用程序编程接口,在某些或其他方面,很多大型公司会建立自己的API提供给用户或者内部使用


不过怎么用通俗的语言向你解释什么是API呢,在开发和业务中他是不是更多的含义呢,让我们后退一步看看网络是如何工作的。


www和远程服务器

当我想到网络的时候,我脑海中想象了一张巨大的连接服务网络


每一张页面都储存在远程服务器中,而一个远程服务器并不是那么的神秘,他就是一部分用来优化请求过程的远程计算机



为了能让事情更透明,你可以在你一台可以服务整个网站到网络上的手提电脑上启动一个服务器(事实上,一个本地服务器就是在发布到公众上之前工程师需要开发网站:注:其实这句话我不是很理解,翻译得乱七八糟,原文是:a local server is what engineers use to develop websites before releasing them to the public)



当你键入www.facebook.com进入你的浏览器并回车的时候,一个请求就去到了faceboook的远程服务器。一旦你的浏览器接收到了响应,它就解析代码并展示页面。



浏览器,也就是我们说的客户端 ,也可以不太严谨的说facebook的服务器就是个API ,这意味这每次你在网络上浏览网页的时候,你就和一些远程服务器的API发生了交互。



一个API并不是等同于一整个远程服务器,他是服务器用来接受请求和发送响应的一部分



API就是一种为你客户提供服务的方法

你可能听说过公司将API包做成一个产品,例如,”地下气象站“出售的就是它自己的气象数据API的 入口



实例场景: 你的个人小型商业网站有一个给客户注册的预约表格,你想要给你的客户提供自动创建一个谷歌日历时间的能力。



API 使用:这概念就是让你的网站服务器带着请求去创建一个具体的事件,你的服务器之后会接收到谷歌的响应,处理它,然后将有关信息发送回给你的浏览器,例如发送一个认证信息给你的用户



另外,你的浏览器会通过你的服务器经常直接发送API 请求到谷歌服务器



谷歌日历的API 和其他的远程服务器的API 究竟有什么不同



专业的说,不同之处在于他们的请求和响应的形式是不一样的



当你提交整个页面的时候,你的浏览器期待的是一种HTML格式的响应,这个响应里包含了一些描述性的代码,当谷歌日历API 响应的时候会返回一些数据,大多是类似与json的格式



如果你的网站服务器发出了个API 请求,那么你的网站服务器就变成了个客户端(类似与当你使用浏览器访问网站的时候你的浏览器就成了客户端一样)



从用户的角度来说,API允许他们完成一些没有离开网站的动作



很多现代的网站都至少使用了一些第三方API



很多问题都有了第三方的解决方案了,无论是以函数库或者是服务的形式,使用第三方的解决方案现在已经逐渐变得更简单和更可靠。



这是很常见的,开发团队将他们的应用分解到多个服务器里面,服务器通过API 相互交流。为主应用服务器提供辅助功能的服务器这方面的知识可以参考微型服务器



总得来说,当一个公司向它的用户提供了API 的时候,这就意味着他们建造了一系列的专用URL通道,用来返回纯数据形式的响应,意味这响应不会包含一些用于解释的额外开销,你期望的是一种像网站一样的图表用户界面。



你的浏览器可以发送这种请求吗,当然可以,由于实际的HTTP传输都是以文本的形式进行的,你的浏览器总是能达到它能展示响应的最好状态



例如,你可以通过浏览器直接访问GitHub的API ,甚至根本不需要访问标记(=_= # 什么是访问标记.....),当你用浏览器访问一个GitHub的用户API的时候,你将获得一个JSON形式的响应


(https://api.github.com/users/petrgazarov):

[html] view plain copy

  1. {  

  2.   "login": "petrgazarov",  

  3.   "id": 5581195,  

  4.   "avatar_url": "https://avatars.githubusercontent.com/u/5581195?v=3",  

  5.   "gravatar_id": "",  

  6.   "url": "https://api.github.com/users/petrgazarov",  

  7.   "html_url": "https://github.com/petrgazarov",  

  8.   "followers_url": "https://api.github.com/users/petrgazarov/followers",  

  9.   "following_url": "https://api.github.com/users/petrgazarov/following{/other_user}",  

  10.   "gists_url": "https://api.github.com/users/petrgazarov/gists{/gist_id}",  

  11.   "starred_url": "https://api.github.com/users/petrgazarov/starred{/owner}{/repo}",  

  12.   "subscriptions_url": "https://api.github.com/users/petrgazarov/subscriptions",  

  13.   "organizations_url": "https://api.github.com/users/petrgazarov/orgs",  

  14.   "repos_url": "https://api.github.com/users/petrgazarov/repos",  

  15.   "events_url": "https://api.github.com/users/petrgazarov/events{/privacy}",  

  16.   "received_events_url": "https://api.github.com/users/petrgazarov/received_events",  

  17.   "type": "User",  

  18.   "site_admin": false,  

  19.   "name": "Petr Gazarov",  

  20.   "company": "PolicyGenius",  

  21.   "blog": "http://petrgazarov.com/",  

  22.   "location": "NYC",  

  23.   "email": "petrgazarov@gmail.com",  

  24.   "hireable": null,  

  25.   "bio": null,  

  26.   "public_repos": 23,  

  27.   "public_gists": 0,  

  28.   "followers": 7,  

  29.   "following": 14,  

  30.   "created_at": "2013-10-01T00:33:23Z",  

  31.   "updated_at": "2016-08-02T05:44:01Z"  

  32. }  

一个JSON的响应就像它已经是可以让你直接使用的代码了,很容易在这段文本里添加额外的数据,然后你就可以对这段数据做任何你想要做的事了

A就是application

作为结束,就多扔几个关于API 的事例吧



“应用”可以指很多事情,在API 里面他指代的是:

 1 :一个具有不同功能的软件

 2:整个服务器,整个app,或者是app的一小部分


基本上任何软件都可以从环境中有区别的分离开来,有可能在API 里成为A(也就是Application),也可能它本身就是某种API



假设你在你的代码里使用了第三方的函数库,一旦与你的代码结合了,一个函数路就成为了你真个APP里的一部分,成为软件中特殊的一部分,函数库很可能具有一个让你可以与你其他的代码相互沟通的API 


这有其他的一些例子,在面对对象设计中,代码是被组织进对象的,你的应用程序可能是由上百个可以相互交流的类构成的



每个类都有一个API ,一系列公共方法和用于和其他类进行交流的的属性


一个类可能有内部的私有化属性,这意味这它是对外部环境隐藏的(不是一个API )



在使用API 这个东西越来越普遍的今天,希望你看完本篇文章后会有更多的理解



赞 7