跳至主要内容

API与服务的差异(APIs versus Services)

最近突然对于API以及API管理相关的内容感兴趣,于是上18摸的API Management网站下载了一本《APIs For Dummies》的IBM版本做入门的学习。当看到其中的APIs versus services一节,对于API与服务差异的解释,很是清晰,也解开了自己一直以来的疑问。尤其是利用汽车来比喻API与Service的异同,真令人印象深刻。不惜做一回搬运工,把书中的内容做个归纳。

SOA的核心是服务(Service),单纯从技术的角度来看,其实API也是一种服务。但是否API就等于服务呢,这又不尽然。服务与API最大的差别,是它们设计目标的不同。API总是设计用来吸引预期的使用者,当使用者的需求发生改变API也相应改变。与此相反,对于服务的设计,全局的成本和稳定性往往更加重要。使用汽车来比喻的话,API的设计是赛车,注重于外观和使用,而服务的设计是常规的汽车,更着眼与成本和大批量的生产。
APIs and services address different concerns
APIs and services address different concerns


API的产品本质是面向特定的使用者,对于使用者来说,使用API意味着快速、方便与极短的学习曲线。至少从服务提供者的角度来看,这些设计标准是传统的服务与API的根本性差别。
  • 对服务提供者来说,重用包含于API交付的努力中;对于API的使用者,重用是关乎他们软件的交付速度,不管需要为作为软件一部分的API付出多大的代价。
  • 对于服务提供者来说,共享是关乎效率;对于API使用者,共享是是否方便(如果不方便,该API将没人使用)
  • 对于服务提供者来说,封装是更少的改变;对于API使用者,封装是更短的学习曲线(如果接口太复杂,API将没人使用)

有多少SOA项目没有因为服务提供者和服务使用者间因为服务接口由什么组成的冲突而停滞的?一方面,一个移动应用开发者希望API对于她的应用要足够简单;另一方面,后台团队希望大家使用相同的标准化的服务和数据模型。有没有一种既能满足需求,又不会产生高昂费用的强制双方接受的权宜解决方法呢?

API与服务的结合

SOA是屏蔽服务使用者与后端变化的方法。但是谁能为需求不断变化的前端多渠道应用的服务提供者提供保护呢?结合API和服务可使你沉着应对剧变的环境。服务是由服务提供商整理的应用域的基本功能,API是在这些功能(服务)以易于共享形式的重新包装,产品化。所以说API和服务是互补,而不是相互矛盾的,把API和服务结合在一起,将极大地提高企业创新的整体效益。

评论

此博客中的热门博文

解决墙国Google Home无法联网问题

趁黑五特价入手了个Google Home,经过漫长的等待昨天终于等到。回到家里兴高采烈的安装了Home应用,设置好开始开心的调戏Google,播放音乐什么的都很正常。 第二天上班回到家里,发现Hey Google后,不是提示Sorry something went wrong, try again in a few seconds."就是"There was a glitch. Try again in a few seconds.",很是恼火。没可能哥花50刀就买一个蓝牙音箱回来吧,再说了,连不上网甚至连蓝牙也打不开。 本着一贯的研究精神,开搞。据说Google Home是自带DNS,OpenWRT路由上设置了全局SS,但是Google Home还是会用tcp的模式去访问不存在的DNS Server地址8.8.4.4和8.8.8.8,于是乎加了个防火墙规则,不管你Google Home什么请求,都乖乖给我走SS通道去。 修改OpenWRT的/etc/firewall.user文件,增加以下iptables规则: iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p udp --dport 53 -j DNAT --to 192.168.1.0 iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 53 -j DNAT --to 192.168.1.0 iptables -I PREROUTING -t nat -p udp -d 8.8.4.4 --dport 53 -j REDIRECT --to-ports 1053 iptables -I PREROUTING -t nat -p udp -d 8.8.8.8 --dport 53 -j REDIRECT --to-ports 1053 嘿嘿,来一句"Hey Google. Make me relax“,满屋子都是优美的声音,听着写代码真爽:).

解决华为手机访问Google Play:从服务器检索信息时出错。[DF-DFERH-01]

虽然路由器已经设置了梯子,但是用华为手机访问Google Play时,还是提示: 从服务器检索信息时出错。[DF-DFERH-01]。 虽然在手机上把梯子设置成全局模式,连接Google Play后再断掉梯子连接可以升级应用,但实在是麻烦。 放狗搜了一把,网上包括菊厂官方谈坛所说的什么删除Google账户清数据等等方法都是瞎掰。还好自己用的是LEDE(当然OpenWRT也可以),直接把services.googleapis.cn对应的IP指向到216.58.197.195,问题解决。 sed -i '$a conf-dir=/etc/dnsmasq.d' /etc/dnsmasq.conf mkdir /etc/dnsmasq.d/ cat >>/etc/dnsmasq.d/custom.conf<<EOF address=/services.googleapis.cn/216.58.197.195 EOF

解决OpenWRT安装第三方包Incompatible with the architectures configured错误

 起因 起了把家里路由器更新到新版本OpenWRT的念头很久了,周末终于克服自己的懒病,下载了OpenWRT 19.07.4的安装包,更新Linksys WRT1900ACS路由器的系统。 修改了IP地址,把Wifi打开后,驾轻就熟地修改了相关的配置,增加了第三方源,准备开始安装你懂的SS和ChinaDNS等组件。没想到往常屡试不爽的opkg install命令返回了安装失败提示: Incompatible with the architectures configured 仔细比对了所有的配置,确认没有错误,但是安装新增的第三方包时总是报错。 解决方法 试了N多种方法,还是不行,正准备放弃装回原来ROM时,突然发现运行opkg print-architecture返回的CPU架构型号是 arch all 1 arch noarch 1 arch arm_cortex-a9_vfpv3-d16 10 比原来系统打印出来的架构型号多了一个d16,而第三方源的库里貌似没有arm_cortex-a9_vfpv3-d16这样一个型号的源,尝试修改/etc/opkg.conf文件,把原来CPU型号列表增加不带d16行。 arch all 1 arch noarch 1 arch arm_cortex-a9_vfpv3 8 arch arm_cortex-a9_vfpv3-d16 10 再运行opkg install,包装成功。