api客户端(API 平台)

4747 382 2022-11-20


本文目录一览:

利用百度API制作新闻客户端

图方法,找到一个画面后,按下“Ctrl+Shift+E”,会出现一个通过电子邮件发送截图的界面,如下图所示,双击附件里那个图片,另存到硬盘上即可。这个图片就是当前的截图。

Google Earth的十个常用技巧应用

2004年10月27日Google宣布收购了美国的一家卫星图像公司Keyhole公司,并于2005年6月推出了Google Earth系列软件。用户们可以通过下载一个Google Earth客户端软件,就可以免费浏览全球各地的高清晰度卫星图片。

Google卫星地图的横空出世,催生了不少包括我在内的“地图玩家”,这些卫星地图发烧友们乐此不疲地收集和张贴那些有趣的地标以及自己的新发现,他们使得这个非常酷的软件迅速普及到了大众,使得普通人也可以体会到使用Google Earth浏览自己家房顶的快感。下面,我就介绍一下我自己在使用Google Earth这个软件的过程中,总结的一些常用的技巧和应用。

1、根据经纬度定位地标的方法

在Search面板的Fly To输入框中,输入一个经纬度,按回车,就可以直接“飞”到那个位置。其间采用的那种动画效果,让我们产生一种遨游地球的奇妙感觉。

2、如何在软件中截图

这里介绍一个简单的截图方法,找到一个画面后,按下“Ctrl+Shift+E”,会出现一个通过电子邮件发送截图的界面,如下图所示,双击附件里那个图片,另存到硬盘上即可。这个图片就是当前的截图。

3、如何导出地标文件

在需要引出的地标文件夹上,用鼠标右键点一下,在菜单中选择“Save As”然后输入引出文件名就行了,目前可以导出KMZ和KML两种地标文件格式。

4、KML和KMZ地标文件有什么不同

Google Earth有两种类型的地标文件,一种是KML文件,一种是KMZ文件。

KML是原先的Keyhole客户端进行读写的文件格式,是一种XML描述语言,并且是文本格式,这种格式的文件对于Google Earth程序设计来说有极大的好处,程序员可以通过简单的几行代码读取出地标文件的内部信息,并且还可以通过程序自动生成KML文件,因此,使用KML格式的地标文件非常利于Google Earth应用程序的开发。

KMZ是Google Earth默认的输出文件格式,是一个经过ZIP格式压缩过的KML文件,当我们从网站上下载KMZ文件的时候,Windows会把KMZ文件认成ZIP文件,所以另存的时候文件后缀会被改成.ZIP,因此需要手动将文件后缀改成.KMZ。

KMZ文件用ZIP工具软件打开,然后解压缩即可得到原始KML文件。当然,KMZ文件也有自己的好处,就是KMZ文件的自身可以包含图片,这样就可以不依赖引用网络上的图片。

一般情况下,双击KMZ/KML文件即可从Google Earth中打开地标文件,但是需要注意的是,KMZ/KML地标文件名不能包含中文字符,文件存放的路径也不能有中文字符,否则将无法在Google Earth中打开。

5、如何快速得到一个地标的KML格式

快速得到地标的KML文件内容的方法是,在Google Earth中右键点击一个地标,然后点右键,点Copy,然后打开记事本按Ctrl-V即可将该地标的KML内容粘贴到其中。

6、如何测量地图上两点的距离

点击菜单“Tools”-“Ruler”,弹出如下对话框。

此时,点击地球上任意两点,均可计算出两点间的距离(默认单位为英里,其它还有千米、米、厘米、英尺、码等),选择Path还可以测量曲线和折线的距离。

7、如何制作自己的地标

看多了别人制作的地标,自己是不是也觉得手痒呢?你有没有想过把自己的住宅、工作单位、自己发现的“有趣的地方”,也做成地标呢?

制作一个地标其实非常简单,看到一个好玩的地方,在Google Earth菜单中点“dd”,再选择“Placemark”,即可出现下图的界面。

其中地标的经纬度会自动填写,我们只需要填写Name(地标名称)和Description(地标说明注释说明)即可,这里可以填写中文,不过如果你想要在Google Earth官方社区上发布的话,建议还是使用英文。

信息填写完成后点OK即可生成一个地标,如果想修改一个地标,在地标上点右键-Properties,即可修改地标的说明以及位置。

地标说明是支持HTML语法的,因此我们可以应用HTML来插入图片、修改字体等,建立一个好看的地标说明。

8、如何共享发布自己的地标

Google Earth社区可以让任何人在Google Earth上分享自己的地标,我们分享自己的地标也很简单,不过需要一定的英文基础。

首先登录Google Earth社区网站 ,点“New user”建立一个论坛社区用户,然后在自己的地标上点右键,再点Share/Post,如下图,即可进入Google Earth社区的地标发布页面。这里需要注意的是,Google Earth对中文支持一点也不好,如果地标的介绍和名称使用中文字符的话,在Google Earth将显示为乱码,因此请务必使用英文字符来标明地标的名称和介绍。

地标发布后一般不会立刻显示在Google Earth的图层中,通常需要几个月的时间,你标注的地标才会出现在Google Earth的图层之中。

9、图层的应用

Google Earth在卫星地图的基础上,提供了很多数据图层,图层打开会在相应的位置呈现各种数据。具体操作是,在Google Earth左侧,找到一个叫图层(Layers)的设置,点中不同的图层,可以在Google Earth显示更多的信息,这里介绍主要的几个:

Google Earth Community图层:显示在Google Earth社区上,网友自己标记的地标。我们上面提到的分享地标就是用的这个图层。

Borders图层:显示国家、省等之间的边界信息。

National Geographic Maga图层:有大量国家地理杂志在非洲的航拍高清晰地图地标。

Transportation图层:可以显示世界各地的机场,火车站信息。

DG Coverage图层:显示不同年份卫星地图的数据,不同的年份,将显示不同的颜色,这让我们可以知道一个地方的卫星地图到底是什么时候拍摄的。

10、卫星地图的应用

Google Earth的确很酷,但是Google Earth并不只是用来玩的,我们可以在上面开发出自己的应用,将自己网站的实用功能和Google提供的卫星地图整合起来。

要想使用Google的卫星地图资源,必需面对如何调用的问题,这涉及到很复杂的程序编写。好在Google体会到了程序员的辛苦,很早就自己推出Google Maps API,全世界对Google卫星地图有兴趣的程序员都能够通过简单的API调用来开发自己的Google地图服务。

要进行Google Maps API的开发,需要先去 申请一个所谓的API Key,有了这个Key,才能使用Google Maps服务。当然,如果大网站调用Google Maps API的数据非常大的时候,需要事先联系Google的相关人员。

API的英文帮助参见这个地址: 。掌握最基本的API之后,我们就可以使用编程的方法来实现各式各样的基于Google Maps的令人目眩的服务啦。

编程时候要调用地标资源,一般都是使用KML的文件格式,KMZ的格式无法直接编程使用,需要使用UNZIP之类的接口先将文件解压缩得到KML文件,然后再调用解开的KML文件。

好了,以上就是我介绍的Google Earth的常用技巧,做为一个狂热的Google Earth的爱好者,我先前曾写了大量的关于Google Earth和Google Maps的文章,并且专门建立了一个独立的Google Earth资源收集网站,而实际过程中,我发现好的资源需要大家共同的努力才能分享,所以,如果大家英文还不错的话,就建议多登录一下Google Earth官方的论坛社区,多发布一些优秀的地标资源,让Google Earth上显示出更多中国地区的地标。


度十大游戏API


应用开发者利用内容,先抓眼球,引导下载,然后坐收新用户,通过社交应用分享传根据ESA(Entertainment Software Association)最近一项报告,美国有超过1亿5千万视频 游戏 玩家,其中大约42%的人每周在视频 游戏 上花费3小时以上。根据PwC的预测:到,全球视频游戏收入将接近931.8亿美元,而全球社交/休闲游戏市场则接近225.2亿美元。如此惊人的数据摆在眼前,难怪游戏成为了ProgrammableWeb上最热门API搜索项。最近传出了很多游戏API的趣闻。9月,DMCA侵权通知(DMCA notice)发出,包括Bukkit,CraftBukkit,Spigot和Cauldron在内的一众Minecraft游戏社区项目被关闭。DMCA侵权通知事件后不久,Minecraft的开发公司Mojang就被微软公司以25亿美元的价格收购。上个月343 Industries对外宣布,他们计划专为Halo 5推出一个公共数据(public stats)API:Guardians视频游戏最近为Xbox One推出了公共数据API。今年年初,ArenaNet为Guild Wars 2 API发布了一个额外的OAuth 2.0支持,2个月后又代之以API key system。此文推荐的Top 10精品游戏API涵盖各种丰富内容,基于热度(Popularity)、潜力(Potential)、文档(Documentation)、便捷(Ease of Use)、功能(Functionality)进行对比,包括(但不仅限于)检索视频游戏数据,游戏货币化,视频游戏串流和录像,视频游戏评论和模型等等。

1. EVE Online

科幻网游巨作EVE Online(星战前夜)是最风靡的大型多人在线角色扮演游戏(MMORPG),曾获奖无数,位列时代PC游戏排行榜前100第36位。Eve Online还永久入驻了纽约现代艺术博物馆(MoMA)的应用设计(Applied Design)区,访客可在4K超高清视频前欣赏Eve Online中宏伟的宇宙景观。

EVE Online CREST和XML APIs可用于对游戏中的角色、行业、市场、太阳系、联盟和公司等数据进行编程。EVE Online开发者网站的资源页面上能找到Eve Online API, API文档,客户端库和论坛等内容。EVE Online CREST RESTful API的API文档为简单好上手的Wiki格式;Eve Online XML API的API文档已迁移至第三方开发者文档网站。

2. Riot Games

Riot Games(拳头游戏公司)开发了炙手可热的多人联机在线竞技游戏(MOBA)“英雄联盟(LOL)”。根据该公司官网数据:每天在线人数约为2700万,每月在线人数约为6700万。今年7月份,由于版本更新后游戏内存在严重缺陷,Riot Games关闭了“英雄联盟”排位赛,但游戏仍旧热度不减, 位列时代PC游戏排行榜前100第35位。

Riot Games API用于对“英雄联盟”中最近的游戏、玩家排名、符文、熟练度级别等信息进行编程。Riot Games的开发者网站设计精美,API状态页面、开发者论坛和API互动文档等内容有序呈现。

3. Battle.net

在线视频游戏网站Battle.net主要推广Blizzard Entertainment公司开发的游戏:从动作角色扮演游戏(ARPG)“暗黑破坏神(Diablo)III”,到大型多人在线角色扮演游戏(MMORPG)“魔兽世界(WoW)”;从军事科幻即时战略游戏“星际争霸(StarCraft)II”,到在线战略纸牌游戏“炉石传说(Hearthstone)”。“暗黑破坏神III”,“星际争霸II”,“魔兽世界”分别位列时代PC游戏排行榜前100第79、29、31位。

最近经Blizzard Entertainment重新设计之后,开发者网站呈现开发者论坛、OAuth、游戏社区API指南和API互动文档(I/O Docs)有机组合的新面貌。如今Battle.net API又多了暗黑破坏神III、魔兽世界、星际争霸II、Community API以及游戏数据 API。而最近该公司又在Battle.net论坛上宣布“炉石传说:魔兽英雄传(Hearthstone: Heroes of Warcraft)API即将上线。

4. Facebook Game Services

当下Facebook游戏已破2000大关,其中不乏大热门,例如“Candy Crush Saga(糖果粉碎传奇)”、“Clash of Clans(部落战争)”,“Farm Heroes Saga(农场英雄传奇)”,“Pet Rescue Saga(宠物大营救)”和“Words With Friends”。

Facebook用户主要在智能手机和平板电脑上玩游戏,还有一些选择了台式电脑。年初,Facebook开始推出一些台式电脑视频应用广告来增加游戏安装量。

Facebook Games Developer Center为游戏开发者提供包括(但不仅限于)Achievements API、Scores API、应用通知、请求、游戏中心、Facebook Unity SDK等服务。在这里可以找到游戏概览。API迁移(migration)指南、教程、清单、游戏货币化等有用信息。

5. Google Play Games Services

3月上线的Google Play集音乐、电子书、游戏、电影、期刊及其他Android应用于一身。今年3月,Google又宣布为Android游戏开发者新添游戏分析、AdMob原生广告、AdMob应用内付费广告及针对Android TV(安卓TV)的Nearby Connections第二屏API。

Google Developers:Games(谷歌开发者游戏网站)上很多API、SDK及包括(但不仅限于)game publishing API,Unity插件、Play Games Services(成就、排行榜、玩家级别等)和Google AdMob的各类服务唾手可得。Google Play Games Services网站内容虽多,但条理清晰,多而不杂。

6. Guild Wars 2

Guild Wars 2(激战2)是风靡当下的一款大型多人在线角色扮演游戏(MMORPG),故事以虚幻的泰瑞亚大陆为背景,上演着波澜壮阔的英雄史诗。上个月ArenaNet推出了首次对Guild War2的扩展版本——Guild Wars 2:Heart of Thorns(激战2:疯王)。

Guild War2的新建账户超700万,游戏时间超14亿小时,玩家互送礼物超223,484,104份,大大鼓励ArenaNet扩展了Guild War 2。Guild War 2位列时代PC游戏排行榜前100第47位。

Guild War 2 API用于对游戏道具、地图、交易站、World vs. World游戏模式及成就等游戏数据进行编程。Guild Wars 2的API文档是简单好上手的Wiki格式,使用广泛。Guild Wars 2 API论坛也很活跃,可以找到API更新和API相关问题,还能与其他开发者讨论错误和漏洞,参与API CDI线程等。

7. Steam

风靡当下的视频游戏和娱乐平台Steam有超过6,000款游戏供玩家选择,其游戏社区坐拥超过1亿用户。GameStop称Steam从去年起就“蒸蒸日上”了,游戏数量从的3,700上升到8月的6,000。今年早些时候Valve公司宣布:内容创作者可通过Steam Workshop出售针对现有游戏的mods

Steam网页API可以检索应用新闻,搜索游戏全球数据、玩家评论、玩家成就、最近玩过的游戏等数据。Steam网页API文档为1页,以Wiki模式呈现,还有很多现成的客户端库。API可以用JSON、XML、CSV和VDF(Valve Data Format)格式返回数据。

8. TwitchTV

炙手可热的实时流媒体视频平台和游戏社区Twitch当下的月均独立访客超过1亿,直播用户超过170万。虽然该平台主攻游戏,但最近Twitch Interactive公司又宣布推出Twitch Creative社区,为艺术家、工匠、开发者等创意人士提供交流空间。Twitch还跟Battle.net、Google Play Games等流行视频游戏平台进行合作,支持用Twitch账户登录进行游戏串流录像、在线直播游戏等

TwitchTV API可实现Twitch Connect、视频、串流、搜索及其他内容与第三方应用的整合。GitHub上有完整的API文档,另外Twitch网页上还有开发者论坛。

9. Giant Bomb

Giant Bomb网站不仅提供视频游戏信息,还有新闻(news)、评论(reviews)、百科(wiki)、视频(videos)、播客(podcasts)、论坛(forums)等板块。3月,Giant Bomb被CBS Interactive收购,该公司旗下还有与Giant Bomb相似的网站GameSpot。

Giant Bomb API可对Giant Bomb网页上的游戏标题、评分、视频、公司、主题、风格等内容进行编程。API文档为1页,以Wiki格式呈现;API开发者论坛上还有API快速入门指南,API改进日志等丰富信息可供参考。

10. SpongeAPI

Sponge是Minecraft服务端支持的全新modding API,既可以充当服务器,也可以用来作客户端API,修改Minecraft游戏,服务器拥有者也可以使用。Sponge这一项目是在9月份DMCA侵权通知引发CraftBukkit关闭不久后建立起来的。CraftBukkit作为Minecraft官方服务器的有益补充,用Bukkit API来建立插件,为Minecraft服务器增添新功能。

Sponge API更新很勤快,稳定的版本预计会在年末上线,但不少开发者已经开始使用和测试了,火热程度可见一斑。Sponge Web网页和GitHub上都能找到简单好上手的完整API文档。开发者还可以在官方网站上的论坛中了解更多关于Sponge项目开发和Sponge API的信息。

怎么用PHP开发API供其他客户端调用?

一、接口的分类:

1、URL类型的接口

URL

路由带参数式的接口!这个很好做!只要有过Web开发经验的人都能完成!这种接口数据不够隐蔽性,可以直接在浏览其中看到,如支付宝的交易请求URL。需

要加一个MD5签名,和服务器端的再次向支付宝服务器发送验证!虽然soap方式传递的数据隐蔽性很好!但为了数据安全,难免也需要进行数据签名。

2、SOAP类型的接口

无关编程语言、无关平台、扩展性很好,要实现一个SOAP 型的接口,有两种方式:一种有WSDL文件方式、一中无WSDL文件方式!

于热爱研究型的人来说,使用第一种方式可以让你清楚的了解PHP是怎么创建了一个Web

Service!但第一种对于新手来说,创建一个XML格式的WSDL文件,是比较难的,这你的先了解熟悉什么是XML!学会XML语法!但对于一个急于

解决问题的人来说!没有这么多的时间去熟悉!所以这是件烦恼的事!

二、PHP环境设置

先配置下PHP的soap环境支持:

找到php.ini文件

;extension=php_soap.dll

删除掉";" ,重启apache服务器

为了便于测试,需要关于wsdl缓存

方式1:

配置文件:php.ini  选项 soap.wsdl_cache_enabled 设置为0

方式2:

代码头添加:ini_set('soap.wsdl_cache_enabled', "0"); //关闭wsdl缓存

三、有WSDL文件方式创建

这里先介绍标准的webservice。 那么如何创建wsdl呢?对于PHP来说这确实是件很不容易的事情,有人说用zend

studio创建很方便,这是一种方法。但对于那些不喜欢用zend studio的人来说,会觉得创建一个web service还要安装zend

studio,太强人所难了。

在这里介绍一个简单的方法,到网上下载SoapDiscovery.class.php类,里面有个公用方法:getWSDL,这个方法末尾是用的  return,那么,你修改一下这个方法:

//return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '/definitions');

//生成wsdl文件,将上面的return注释

$fso = fopen($this-class_name . ".wsdl" , "w");

fwrite($fso,

sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL,

$serviceWSDL,     $messageWSDL, '/definitions'));

现在生成wsdl的类有了,SoapDiscovery.class.php(源码在最末尾)。

再准备一个提供服务的Service.php类文件或者函数就可以创建wsdl了!

API网关从入门到放弃

假设你正在开发一个电商网站,那么这里会涉及到很多后端的微服务,比如会员、商品、推荐服务等等。

那么这里就会遇到一个问题,APP/Browser怎么去访问这些后端的服务? 如果业务比较简单的话,可以给每个业务都分配一个独立的域名(),但这种方式会有几个问题:

更好的方式是采用API网关,实现一个API网关接管所有的入口流量,类似Nginx的作用,将所有用户的请求转发给后端的服务器,但网关做的不仅仅只是简单的转发,也会针对流量做一些扩展,比如鉴权、限流、权限、熔断、协议转换、错误码统一、缓存、日志、监控、告警等,这样将通用的逻辑抽出来,由网关统一去做,业务方也能够更专注于业务逻辑,提升迭代的效率。

通过引入API网关,客户端只需要与API网关交互,而不用与各个业务方的接口分别通讯,但多引入一个组件就多引入了一个潜在的故障点,因此要实现一个高性能、稳定的网关,也会涉及到很多点。

API 注册

业务方如何接入网关?一般来说有几种方式。

协议转换

内部的API可能是由很多种不同的协议实现的,比如HTTP、Dubbo、GRPC等,但对于用户来说其中很多都不是很友好,或者根本没法对外暴露,比如Dubbo服务,因此需要在网关层做一次协议转换,将用户的HTTP协议请求,在网关层转换成底层对应的协议,比如HTTP - Dubbo, 但这里需要注意很多问题,比如参数类型,如果类型搞错了,导致转换出问题,而日志又不够详细的话,问题会很难定位。

服务发现

网关作为流量的入口,负责请求的转发,但首先需要知道转发给谁,如何寻址,这里有几种方式:

服务调用

网关由于对接很多种不同的协议,因此可能需要实现很多种调用方式,比如HTTP、Dubbo等,基于性能原因,最好都采用异步的方式,而Http、Dubbo都是支持异步的,比如apache就提供了基于NIO实现的异步HTTP客户端。

因为网关会涉及到很多异步调用,比如拦截器、HTTP客户端、dubbo、redis等,因此需要考虑下异步调用的方式,如果基于回调或者future的话,代码嵌套会很深,可读性很差,可以参考zuul和spring cloud gateway的方案,基于响应式进行改造。

优雅下线

性能

网关作为所有流量的入口,性能是重中之重,早期大部分网关都是基于同步阻塞模型构建的,比如Zuul 1.x。但这种同步的模型我们都知道,每个请求/连接都会占用一个线程,而线程在JVM中是一个很重的资源,比如Tomcat默认就是200个线程,如果网关隔离没有做好的话,当发生网络延迟、FullGC、第三方服务慢等情况造成上游服务延迟时,线程池很容易会被打满,造成新的请求被拒绝,但这个时候其实线程都阻塞在IO上,系统的资源被没有得到充分的利用。另外一点,容易受网络、磁盘IO等延迟影响。需要谨慎设置超时时间,如果设置不当,且服务隔离做的不是很完善的话,网关很容易被一个慢接口拖垮。

而异步化的方式则完全不同,通常情况下一个CPU核启动一个线程即可处理所有的请求、响应。一个请求的生命周期不再固定于一个线程,而是会分成不同的阶段交由不同的线程池处理,系统的资源能够得到更充分的利用。而且因为线程不再被某一个连接独占,一个连接所占用的系统资源也会低得多,只是一个文件描述符加上几个监听器等,而在阻塞模型中,每条连接都会独占一个线程,而线程是一个非常重的资源。对于上游服务的延迟情况,也能够得到很大的缓解,因为在阻塞模型中,慢请求会独占一个线程资源,而异步化之后,因为单条连接所占用的资源变的非常低,系统可以同时处理大量的请求。

如果是JVM平台,Zuul 2、Spring Cloud gateway等都是不错的异步网关选型,另外也可以基于Netty、Spring Boot2.x的webflux、vert.x或者servlet3.1的异步支持进行自研。

缓存

对于一些幂等的get请求,可以在网关层面根据业务方指定的缓存头做一层缓存,存储到Redis等二级缓存中,这样一些重复的请求,可以在网关层直接处理,而不用打到业务线,降低业务方的压力,另外如果业务方节点挂掉,网关也能够返回自身的缓存。

限流

限流对于每个业务组件来说,可以说都是一个必须的组件,如果限流做不好的话,当请求量突增时,很容易导致业务方的服务挂掉,比如双11、双12等大促时,接口的请求量是平时的数倍,如果没有评估好容量,又没有做限流的话,很容易服务整个不可用,因此需要根据业务方接口的处理能力,做好限流策略,相信大家都见过淘宝、百度抢红包时的降级页面。

因此一定要在接入层做好限流策略,对于非核心接口可以直接将降级掉,保障核心服务的可用性,对于核心接口,需要根据压测时得到的接口容量,制定对应的限流策略。限流又分为几种:

稳定性

稳定性是网关非常重要的一环,监控、告警需要做的很完善才可以,比如接口调用量、响应时间、异常、错误码、成功率等相关的监控告警,还有线程池相关的一些,比如活跃线程数、队列积压等,还有些系统层面的,比如CPU、内存、FullGC这些基本的。

网关是所有服务的入口,对于网关的稳定性的要求相对于其他服务会更高,最好能够一直稳定的运行,尽量少重启,但当新增功能、或者加日志排查问题时,不可避免的需要重新发布,因此可以参考zuul的方式,将所有的核心功能都基于不同的拦截器实现,拦截器的代码采用Groovy编写,存储到数据库中,支持动态加载、编译、运行,这样在出了问题的时候能够第一时间定位并解决,并且如果网关需要开发新功能,只需要增加新的拦截器,并动态添加到网关即可,不需要重新发布。

熔断降级

熔断机制也是非常重要的一项。若某一个服务挂掉、接口响应严重超时等发生,则可能整个网关都被一个接口拖垮,因此需要增加熔断降级,当发生特定异常的时候,对接口降级由网关直接返回,可以基于Hystrix或者Resilience4j实现。

日志

由于所有的请求都是由网关处理的,因此日志也需要相对比较完善,比如接口的耗时、请求方式、请求IP、请求参数、响应参数(注意脱敏)等,另外由于可能涉及到很多微服务,因此需要提供一个统一的traceId方便关联所有的日志,可以将这个traceId置于响应头中,方便排查问题。

隔离

比如线程池、http连接池、redis等应用层面的隔离,另外也可以根据业务场景,将核心业务部署带单独的网关集群,与其他非核心业务隔离开。

网关管控平台

这块也是非常重要的一环,需要考虑好整个流程的用户体验,比如接入到网关的这个流程,能不能尽量简化、智能,比如如果是dubbo接口,我们可以通过到git仓库中获取源码、解析对应的类、方法,从而实现自动填充,尽量帮用户减少操作;另外接口一般是从测试-预发-线上,如果每次都要填写一遍表单会非常麻烦,我们能不能自动把这个事情做掉,另外如果网关部署到了多个可用区、甚至不同的国家,那这个时候,我们还需要接口数据同步功能,不然用户需要到每个后台都操作一遍,非常麻烦。

这块个人的建议是直接参考阿里云、aws等提供的网关服务即可,功能非常全面。

其他

其他还有些需要考虑到的点,比如接口mock,文档生成、sdk代码生成、错误码统一、服务治理相关的等,这里就不累述了。

目前的网关还是中心化的架构,所有的请求都需要走一次网关,因此当大促或者流量突增时,网关可能会成为性能的瓶颈,而且当网关接入的大量接口的时候,做好流量评估也不是一项容易的工作,每次大促前都需要跟业务方一起针对接口做压测,评估出大致的容量,并对网关进行扩容,而且网关是所有流量的入口,所有的请求都是由网关处理,要想准确的评估出容量很复杂。可以参考目前比较流行的ServiceMesh,采用去中心化的方案,将网关的逻辑下沉到sidecar中,

sidecar和应用部署到同一个节点,并接管应用流入、流出的流量,这样大促时,只需要对相关的业务压测,并针对性扩容即可,另外升级也会更平滑,中心化的网关,即使灰度发布,但是理论上所有业务方的流量都会流入到新版本的网关,如果出了问题,会影响到所有的业务,但这种去中心化的方式,可以先针对非核心业务升级,观察一段时间没问题后,再全量推上线。另外ServiceMesh的方案,对于多语言支持也更友好。

怎么保护API接口只给特定的客户端使用?

如果API是服务器端,客户端是要通过远程来访问API接口的,可以通过设置API认证(token)来控制,只允许携带了服务端发布的认证码的用户访问API,目前很多网站平台的开放平台都是用的这类机制。具体的可以参考oauth2.0。

如果是类似SDK的开发包中的API要限定只给特定的客户端使用,可以在API的调用流程的适当位置(一般是刚初始化完成)要求必须先进行认证,只有通过认证的客户端才能调用API。



版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java构造器(构造方法)与方法区别说明
下一篇:java long转String +Codeforces110A案例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~