原文:THE RIOT GAMES API: GOALS AND DESIGN
作者:Leigh Estes 译者:杰微刊兼职翻译汪健
大家好,我叫Leigh Estes,又名aka RiotSchmick。我是Riot游戏公司的一名软件工程师,主要的工作是服务可用性这块。今天我想探讨下我们所拥有的其中一个产品,这个产品就是Riot游戏公共API,主要探讨此产品的诞生过程,包括为什么我们要创建它和根据目标我们是如何思考如何做的。
在发布了英雄联盟的头几年里,粉丝网站和游戏统计只能通过抓取Riot网站或模仿客户端流量访问Riot服务器进行数据获取。低效的抓取方法增加了我们服务平台的负荷,也增加了我们线上服务出问题的风险。我们必须要找到一个解决方案,公共API看起来似乎是一个正确的解决方案。
开放API的观点如何论证它的正确性和可行性?它就像开源软件一样,已经在很大程度获得了胜利。充满深思和想象力的API鼓励大家进行创新,并且还能增强第三方对此技术模块的参与度。像Facebook、推特、谷歌和Netflix公司运行的程序已经扩展了其产品的覆盖面,并且促进开发者生态系统健康发展。游戏行业对这个概念并不陌生,像暴雪、Valve和CCP已向他们的游戏和平台提供了开放API。
我们从其他公司的开放AIP的成功经验得到启发,至此我们找到了通过抓取服务器给我们玩家带来影响的解决方案。我们Riot公司在2013年年底发布了我们自己的开发者API平台。这种web类型的公共API不同于游戏插件社区使用的客户端API,这些服务端API提供大量的游戏和玩家的数据,并且往往不会直接对游戏做更变。Riot游戏API允许开发人员访问比赛的历史数据,联盟排名统计,冠军信息和装备属性,除此之外还有很多其他的数据也可以通过API获取到。利用这些数据,英雄联盟社区已经创建了很多有用的工具和网站,延伸出LoLKing.com统计网站和像replay.gg网站专门给玩家提供辅助功能的OP.GG网站。
在我们开始编写API程序时我们有几个具体的目标:
1、通过提供英雄联盟相关数据规范合法的请求接口以保护我们的线上服务。
2、引导第三方开发商开发出与我们的价值观和玩家需求一致的应用系统。
3、方便数据在Riot公司内部共享。
实现我们的目标
我们让两个小组去检查和处理这三个目标,开发者关系维护团队负责促进Riot公司与第三方开发者社区之间的关系,并且跟他们洽谈相关政策和价值观,这些工作也属于公共API部分。另外一个开发者平台团队负责建设所有供公共API使用的基础设施。这两个团队协同工作提供技术和功能需求以此来实现我们的目标。
下面介绍如何体现我们的目标:
①通过提供英雄联盟相关数据规范合法的请求接口以保护我们的线上服务。
我们需要提供具有约束性的公共终端,流量可以通过API密钥进行认证和限速,最初,我们研究借鉴现有的许多API管理平台,我们评估了apiGrove平台和Repose平台的峰值,各有利弊,但最终我们决定创建属于我们自己的公共API,而不是利用现有的解决方案。做这个决定有几个原因,其中一个原因是因为Riot公司业务遍布全球,没有一个统一的开箱即用的解决方案,它需要我们技术人员通过部署和集成才能让所有区域用户和合作伙伴都能使用。
随着业务的发展,我们更多地了解到了我们无数潜在的使用案例,我们需要高水平的灵活性和高定制,而不是被锁定在一个给定的框架中。当然,我们利用现有技术使之成为自主研发的解决方案的一部分是很有意义的。首先,我们利用开源软件,例如Zuul代理服务器和Netflix公司开发的其他项目,包括archaius、ribbon、hystrix和eureka。我们的Zuul过滤器和核心功能都使用Java和Groovy编写并运行在Jetty上。此外,我们使用Amazon的AWS云产品,这些产品可以快速方便的满足我们期望的所有技术栈,包括Redis、Mysql、Unix服务器、负载均衡器等等,以及其内置的水平伸缩能力。多年来,我们的系统的架构已经能够垂直扩展,根据需要现在每天能处理数以亿计的调用。在我的下一篇博客文章中我将深入探讨这个架构。
②引导第三方开发商开发出与我们的价值观和玩家需求一致的应用系统。
我们希望提供一个公共的开发者门户,以促进Riot公司和第三方开发者的互动,并且与第三方开发者关于Riot公司的价值观和政策保持紧密的对话沟通。我们要求社区开发人员在被授予生产认证API密钥之前要先提交他们的应用系统到开发者门户进行审核,这个措施有助于确保促进社区健康的创造和提供给玩家无病毒的体验,同时也保持了英雄联盟竞争的完整性。提交应用申请可能会非常麻烦棘手,但我们发现这个过程是有价值的,它可以让我们更好的了解开发者的需求,而与此同时共享和强化我们的价值观。一旦提交了应用,社区开发人员就可以使用开发者门户与我们的开发者关系维护团队沟通相关的应用审核状态进展如何。也有专门的论坛,它可以供社区开发人员可以互相交流,也可以和开发者关系维护团队和开发者平台团队交流。此外,针对目前所有可用的API有一个专门的文档,每个API会链接到介绍如何使用这些不同的API的文章。迄今,约有4000开发者提交了应用,大约900个项目已经批准获得生产API密钥。为了通过利用现有的MVC框架来简化开发,我们使用Java和Groovy编写开发者门户网站并运行在Tomcat中,而前端则使用Bootstrap框架。
③方便数据在Riot公司内部共享。
我们开始在内部宣传开发者门户网站,并鼓励所有团队吸收它的优点。大多数公共API程序主要集中在外部协作上,我们发现很多开发者和Riot公司团队之间的协作有了很多提高。边缘层使更多团队可以轻松地访问这些API,我们的全球办事处,采用了特定的公共API速度更快了,他们不必通过内部导航技术,不会受团队组织结构所限,可以轻松获取玩家数据。像俄罗斯的Guilds系统和欧洲的Battlegrounds系统都由我们公共API授权。
我们看到在实现我们最初的几个目标方面我们已经取得了巨大的成功,第三方开发人员已经接纳了API作为获取英雄联盟数据的标准接口,并且线上系统不再有抓数据的情况。也许我们的API程序最好的结果决定于什么样的技术已经解锁,一致性的API平台解决了很多常见的需求,随着微服务的发展我们将在Riot公司采取更多措施。我们可以解决伸缩问题,限速问题,负载均衡问题及架构中许多安全问题。我们的API平台不仅仅可用于获取英雄联盟玩家的流量信息,更可用于我们Riot公司所有的服务,无论是现在还是未来都可以使用。
参加开发者社区
虽然公共API已经让Riot公司内部获得收益,但能让整个开发者社区为我们的玩家构建解决方案同样也是一个关键的目标。因此,我们觉得参与和促进开发者社区是非常重要的。为此,我们宣布在2015年3月举行我们第一届API挑战赛,比赛中使用的数据是从Ultra Rapid Fire游戏模型中提取的游戏数据。我们对开发者的响应程度感到惊讶高兴,多个区域的开发者提交了超过100项完整项目。多数开发商选择通过“duo queue”平台提交他们的项目,还有很多是通过开发者交流论坛提交。所有的参赛作品都让我们印象深刻,让我们对获奖者的评选感到很为难。
我们认为第一届API挑战赛在创意、互动和参与度等方面都取得圆满成功,所以在8月份,我们宣布了我们第二届API挑战赛,这次分成三个不同的项目类,包括黑市乱斗模式比赛游戏数据的应用、API改变前后游戏数据的应用、数据集文档的应用。这一次,我们的合作开发商提交了超过300项作品,我们根据不同项目类评选出获奖者,虽然这些挑战赛对获奖者都会授予奖品,但最终的目标是让社区参与度和协作更进一步,并且提供大家互相学习的机会。
在2015年11月我们举办了现场编程马拉松比赛,受邀嘉宾包括API挑战赛冠军和亚军,同时也邀请了开发者社区的一些重要成员。与会者被分成小组,并要在仅有的两天内创建一个作品。在游戏结束时,与会者有机会在Riot公司内部的科技展览会上向Riot公司员工展示自己的作品。许多作品都是基于公共API开发的,但有一些团队选择使用客户端API去创建作品,例如,虚拟世界auto-caster游戏作品和基于虚拟资产的小游戏作品。所有参赛者很享受赛会,并且他们在编程马拉松结束后将对他们的作品保留权利。我们期望未来继续举办挑战赛和编程马拉松赛,这样我们就能伴随着开发者社区功能学习成长。
感谢您的阅读,如果您有任何意见或问题,请在下面给我提出。我将在不久的将来继续探讨驱动我们API平台的技术架构。