什么是API,说人话!-程序员宅基地

技术标签: +译文  应用服务器  API  概念  软件开发  

在我学习软件开发之前,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形式的响应

{
  "login": "petrgazarov",
  "id": 5581195,
  "avatar_url": "https://avatars.githubusercontent.com/u/5581195?v=3",
  "gravatar_id": "",
  "url": "https://api.github.com/users/petrgazarov",
  "html_url": "https://github.com/petrgazarov",
  "followers_url": "https://api.github.com/users/petrgazarov/followers",
  "following_url": "https://api.github.com/users/petrgazarov/following{/other_user}",
  "gists_url": "https://api.github.com/users/petrgazarov/gists{/gist_id}",
  "starred_url": "https://api.github.com/users/petrgazarov/starred{/owner}{/repo}",
  "subscriptions_url": "https://api.github.com/users/petrgazarov/subscriptions",
  "organizations_url": "https://api.github.com/users/petrgazarov/orgs",
  "repos_url": "https://api.github.com/users/petrgazarov/repos",
  "events_url": "https://api.github.com/users/petrgazarov/events{/privacy}",
  "received_events_url": "https://api.github.com/users/petrgazarov/received_events",
  "type": "User",
  "site_admin": false,
  "name": "Petr Gazarov",
  "company": "PolicyGenius",
  "blog": "http://petrgazarov.com/",
  "location": "NYC",
  "email": "[email protected]",
  "hireable": null,
  "bio": null,
  "public_repos": 23,
  "public_gists": 0,
  "followers": 7,
  "following": 14,
  "created_at": "2013-10-01T00:33:23Z",
  "updated_at": "2016-08-02T05:44:01Z"
}
一个JSON的响应就像它已经是可以让你直接使用的代码了,很容易在这段文本里添加额外的数据,然后你就可以对这段数据做任何你想要做的事了


A就是application

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


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

 1 :一个具有不同功能的软件
 2:整个服务器,整个app,或者是app的一小部分

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


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


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


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


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


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


 


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Hellotanbin/article/details/52210057

智能推荐

shell高级技巧-用脚本完成which命令的基本功能_shell which 2-程序员宅基地

文章浏览阅读1.2k次。我们经常会在脚本中调用其他的应用程序,为了保证脚本具有更好的健壮性,以及错误提示的准确性,我们可能需要在执行前验证该命令是否存在,或者说是否可以被执行。这首先要确认该命令是否位于PATH变量包含的目录中,再有就是该文件是否为可执行文件。 [root@xieqichao ~]# cat > test14.sh #!/bin/sh #1. 该函数用于判断参数1..._shell which 2

上滑ScrollView,实现控件顶部悬浮_scroll-view 元素顶部浮动-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏5次。上滑ScrollView,实现控件顶部悬浮。_scroll-view 元素顶部浮动

1+XWeb前端开发中级证书---第8套模拟题之理论题_下列说法不正确的是? list()函数可以写在等号左侧 each()函数可以返回数组里面的-程序员宅基地

文章浏览阅读1k次。1在bootstrap4中,.img-fluid类可以让图片支持响应式布局,它的实现原理是()A、设置了max-width:100%和height:auto2在Bootstrap4中,( )类可以删除列表项目上默认的list-style以及左外边距C、list-unstyled3在JQuery中,使用()方法不可以实现ajax的访问D、$.loadScript();4PHP语言中,需要修改每个元素的值,如何遍历$myarray数组最合适?<?php$myarray = a_下列说法不正确的是? list()函数可以写在等号左侧 each()函数可以返回数组里面的

Idea使用git引入分布式项目实战开发_idea导入分布式项目-程序员宅基地

文章浏览阅读342次。① 选中file -> new -> project from version control -> git②在url:中填上你需要pull的项目的链接 Directory:中可选择项目的工作空间(本地)_idea导入分布式项目

vs2008 MFC程序 读取显示图像、更改背景图像_vs2008 模拟显示画面-程序员宅基地

文章浏览阅读2.7k次。一、创建MFC首先创建一个MFC对话框应用程序(Dialog-based Application)如下:在VS2005和2008里,我们可以用一个 Solution 来组合几个 Project (每个 Project 基本上只包含一个 Program),当我们要构建一个多Program的应用时(例如一个客户_vs2008 模拟显示画面

wireshark 抓包 出现 SSL Continuation Data-程序员宅基地

文章浏览阅读7k次。问题描述使用 wireshark 抓包时,出现:协议为 SSLInfo 为 Continuation Data但是 ……却无法展开分析:原因分析ssl continuation data? - Wireshark Q&A当内容无法被完全理解时,该 Frame 会被标记为 Continuation Data,当TLS记录被拆分到多个TCP段时,会发生这种情况:捕获从现有SSL/TLS连接的中间开始,而不是捕获记录的开头交换记录开始和结束的 无序数据包(Bug 9461)T_continuation data

随便推点

RT-Thread Studio与CubeMX联合编程(超级详细)_rtthread studio cubemx-程序员宅基地

文章浏览阅读1.8w次,点赞63次,收藏214次。RT-Thread Studio与CubeMX联合编程本文章参考以下文章:https://blog.csdn.net/qq_40824852/article/details/122596043https://zhuanlan.zhihu.com/p/395106066https://blog.csdn.net/m0_37697335/article/details/108890584一、简介经过上次对RT-Thread Studio的初步尝试,发现RT-Thread Studio中存在官方支_rtthread studio cubemx

svn服务器端怎么放置项目,怎么搭建SVN服务器端-程序员宅基地

文章浏览阅读309次。作为IT开发人员,进行团队开发会用到SVN、VSS之类的团队版本控制器来进行代码的整合和版本控制,那么如何搭建SVN服务器端呢?下面是学习啦小编给大家整理的一些有关搭建SVN服务器端的方法,希望对大家有帮助!搭建SVN服务器端的方法首先百度关键字:VisualSVN-Server,在搜索结果中找到VisualSVN-Server的官网。2进入官网,找到相关的版本进行下载。注意系统是32位还是64位..._只能用svn做服务端把项目放上去

Istio 实践手册 |服务网格框架对比-程序员宅基地

文章浏览阅读442次。点击上方“程序猿技术大咖”,关注并选择“设为星标”回复“加群”获取入群讨论资格!《Istio实践手册》,从服务网格概念出发,将逐步渗透到Istio具体细节中来,旨在帮助Istio..._istio数据面对比

什么是队列,如何在Springboot项目中使用ActiveMq队列,让你一看就懂。_springboot queue使用-程序员宅基地

文章浏览阅读676次。如何在springboot项目中集成ActiveMq队列什么是消息队列1,消息队列,一般我们会简称它为MQ,英文的意思就是Message Queue,列入RubbtyMq、ActiveMq等。2、消息队列,队列先进先出的数据结构,这里我们需要记住栈是先进后出。队列数据结构这里我简易的画了一个图,类似一根水管。ActiveMq下载安装这里我下载了liunx版本的5.x的activem..._springboot queue使用

程序员养生指北-程序员宅基地

文章浏览阅读2.3k次,点赞14次,收藏8次。吴小胖第八次推送阅读时间预计3分钟~熬夜篇互联网人熬夜是不能避免的,原因却各不相同。不加班的时候,总会对自己说,今天一定早睡,然鹅...午休篇熬夜的程序员总想依靠午休补觉,然鹅...更不幸的是,互联网人的午休权利好像受到了来自“东方”神秘力量的诅咒......_it青年养生指北

java中i++和++i_java i++-程序员宅基地

文章浏览阅读6.3k次,点赞5次,收藏2次。这几天抽着一些时间,把Java的class文件结构研究了一下,再后来就想起了这个令人厌烦的问题,想从字节码指令的角度看看,java到底是怎么处理这个的先看一段java代码package bishi;public class PlusPlusTest { public static void main(String[] args) { int i = 1; i = i++_java i++

推荐文章

热门文章

相关标签