您是不是还在为调用API超过限制而苦恼? 是不是还在为网站空白获取不到数据而郁闷?
下面我们就来说说如何减少API调用次以及避免网站页面空白:
一.减少API调用
我们都知道现在的API对每天,每分种都有一定的上限.一但超过这个上限就调不出任何数据,必须等到第二天才可以,所以尽量降低API的调用次数与频率才是关键. 为了解决这个种问题可以从以下几个方面进行处理:
A. 降低程序的复杂程序,以减少对API的调用.
比如在商品上显示店铺的信用,好评率等就需要再调用户相关的API进行获取, 虽然商品信息上多了一些资讯.但是增加了API调用次数,同时也降低了网站的打开速度. 建议去掉一些意义不大的信息来降低API的调用次数
B.缓存API调用过的数据,以降低API的调用频率与次数
缓存这种词大家再熟悉不过了, 缓存的好处我就不多说了.今天就来说说如何缓存API数据以加快页面显示,减少API调用.原理就不多说了.直接修改您的代码:
1).如果您的程序是用淘宝官方的PHP DEMO 或 file_get_contents()函数来获取API数据.
将
修改成:
这样您的同一个API,同样的参数每24小时才会去访问一次API,上面的变量我做一下说明:
缓存ID: $cacheid 为每次调用API的参数所组成的MD5 由于timestamp会变化,所以timestamp不在其内
保存的目录: $dirpath 为每个MD5的第一个字母,这样最多会生成36个目录
保存的文件: $file 采用MD5直接做为缓存文件名
缓存时间: $cachetime 24小时 X 3600 秒,也就是一天的时间,如果需要更长只需要将24调的更大一些
凡是需要缓存的地方都用以上方法替换以后就可以缓存API结果了. 替换后您看看是不是页面打开更快了? API的调用次数也降下来了?
2).如果您使用了taoapi.com上面的PHP SDK
只需要在您调用API时,设置一下缓存时间就行
设置数据缓存的时间,单位:小时;0表示不缓存,不设置默认为 0
具体的调用方式可以查看: http://www.taoapi.com/index.php/index/index/action/phpSdk
C.静态化更新频率不高的页面
一些更新频率不高的页面可以采用静态化页面,这样不仅对网站,API,服务器来说都是有好处的. 具体的操作方式与缓存机制类同.这里我就不做重点了. 列一下相关的函数: ob_start() ;ob_get_contents();file_get_contents();file_put_contents();http_build_query();
原理:
根据URL检测静态面页文件是否存在
1)如果存在,并且没有过期:
终止程序运行,直接输出该页面文件
2)如果存在,但已经过期:
程序继续运行.程序结束时用HTML内容替换现有的静态页面文件
3)如果不存在:
程序继续运行.程序结束时用HTML内容建立一个新的静态页面文件
二.避免网站页面空白
API加入了缓存以后调用次数下降了,但是当网络忙或API接口繁忙时可能出现获取不到数据而出现空白页面.这时推荐大家采用一种最简单的方式: 自动重试 和采用过期缓存
1)自动重试:
当通过API第一次没有获取到数据时,再次重新获取,虽然会增加一次调用次数.但这是可接受的.因为没有什么比给用户看到空白页面更糟糕的了,这里建议最好不要超过3次. 由于自动重试需要写的代码比较多这里就不列出来了, 知道原理后可以自己写一个或者使用taoapi.com 上面的PHP SDK 支持自动重试,默认为3次
2)采用过期缓存:
如果做了缓存,在缓存更新时遇到没有获取数据(虽然这种情况非常少),就采用过期的缓存先给用户.比起空白的页面要好的多. 在下一次用户访问时再重新更新缓存. 这样只要用缓存存在,您的页面永远不会空白. 目前taoapi.com 上的PHP SDK 暂时还不支持这种机制,但会在尽期内加入,敬请关注
今天就先聊到这里,像内存缓存.数据库缓存等这些以后有机会再和大家聊聊. 如果您在过程碰到疑问 欢迎前来找到讨论, 我的旺旺: 浪子arvin QQ: 8769852,如果在API方面有其他问题推荐你先去taoapi.com测试一把,说不定问题就不是问题了, 在此感谢您有耐心听我说了这么久!
淘宝TOP API 缓存实战 解决API频率过高,页面空白,调用不到数据等情况
最新推荐文章于 2022-12-21 17:10:31 发布