在旧金山举行的微软Build大会上,InfoQ有机会采访了Microsoft Graph API的架构师 Gareth Jones 。Microsoft Graph旨在通过提供统一的API端点简化开发人员的工作。
微软的产品广泛应用于世界各地的大多数企业中,看看他们在那种规模下如何解决这个问题会很有意思。让我们来看一下,关于Microsoft Graph API,Jones都说了什么。
Gareth Jones:我是Microsoft Graph团队的一名API架构师。我大约是在5个月之前加入的,之前的几年,我都在设计OneNote API。
我在OneNote团队所做的其中最后一件事就是将OneNote和Microsoft Graph连接起来。我认为,那是一个超级让人兴奋的项目,那段经历让我想要加入这个团队。
Jones:我第一次接触Web API是在Visual Studio团队工作的时候。那会,我们正在构建一个连接CodeLens服务的API。对我而言,那是一种新的设计体验。之前,我设计过许多.NET API,而且我非常享受API设计的过程,将那些技巧应用在Web上是一项极大的挑战。当有机会从事OneNote API设计时,我迫不及待地就去做了。而且,在学习设计Web API的过程中,通过像APICraft和APIStrat这样的社区,我更广泛地参与到了API社区中。
OneNote是一个很有趣的API设计问题,因为它有许多结构化数据是在层次结构的页和节中,但它也有许多非结构化数据是以格式非常自由的画布形式呈现。将那两种东西拟合到一个一致的API中是一项非常有意思的工作。
Jones:Microsoft Graph的核心价值是统一微软的API,将微软所有的API都整合到具有单一身份验证过程的单一端点的单一URI命名空间中,提供一种更简单的开发体验;但如果只是这样,那只能是一个Microsoft API,而不是Microsoft Graph。
Microsoft Graph的根本不同在于,将所有的API整合到一起,允许我们在API上进行智能推理,并提取实体之间的关系,这样,我们就可以实现增值,让应用程序更智能。
例如,我们的合作伙伴Starbucks可以轻松使用Microsoft Graph的People API,在他们即将推出的Outlook插件中,基于以往的通信模式,挖掘你很可能会安排与哪些联系人召开一次会议的线索。
Jones:现有的API当然不会消失,但我认为,你会看到,由于带来了额外的价值,微软将主要通过Microsoft Graph提供新的API。
Jones:Excel一直有数以百万计的企业在桌面上使用它,现在,借助Microsoft Graph Excel API,将那种逻辑直接连接到业务线应用程序简单了许多。你现在可以与财务应用同步Excel电子表格数据。借助丰富的图表可视化和外部资源数据绑定,你能真正地构建激动人心的解决方案。
Jones:好的,这当然需要API社区的帮助,围绕OAuth 2.0进行标准化,因此,至少协议是明确的,但另一方面,从历史角度看,微软有两种不同类型的授权系统,一个面向客户,一个面向企业。
为了简化开发人员这方面的工作,我们近日随Microsoft Graph推出了身份验证端点的2.0版本,针对客户、企业和教育场景,以一种标准的方式,将面向应用程序注册和身份管理的开发人员情境整合成一个单一的门户和单一的端点。
此外,OpenID Connect现在正迅速成为一个公认的登录验证标准,完善了OAuth的授权过程。
Jones:对于Microsoft Graph,我们的计划无疑是完全可扩展。现如今,Graph的部分API已经允许你使用自己的属性扩展实体,我们正努力让其成为所有Graph API的一个标准功能。我们的最终目标是让更广泛的客户数据成为Graph的一部分,并充分利用由此带来的智能关系。
Jones:在微软,我们发现,OData在API建模和描述方面是一个非常实用的工具,特别是Microsoft Graph如此重视不同API中实体之间的关系以及关系导航的价值。
经过几年的发展,OData现在已经非常符合如今的REST API,并于最近在ISO层面进行了标准化,因此,将它作为强交互情境的基础,我们很安心。
当然,我们认识到,社区对于OAI/Swagger投入了很大的精力,因此,我们也希望确保在那方面有一个精彩的故事。
Microsoft Graph的所有服务都是通过OData v4.0提供的,你只要请求$metadata端点就可以获得实时元数据。许多终端用户工具,如Excel、Power BI或Salesforce,可以利用OData直接消费Graph数据。那样,高级用户真就可以在聘用开发人员之前从API获取价值了。
Jones:在Graph方面,我们目前还没有什么具体的工作要做,但那无疑是我们未来会考虑的东西,我们在许多平台上已经有了身份验证库和Graph SDK,包括Java,因此,从那里出发开始下一步的工作是合理的。
Jones:将微软许多有自己API的团队团结在一起创建一个一致的Microsoft Graph,最难的问题是模式的数据建模。
这里有一个例子:在微软,我们至少有三个团队从事Outlook、Planner和WunderList的开发,每个团队都有自己的任务表示形式,所有这些形式的应用场景都稍有不同,但就数据来看,它们显然有大量的重叠。
为统一后的任务API创建一个好的模型是一个有趣的问题。你不会希望在杂货店购买奶酪的任务默认显示在看板上。在数据模型合并领域,没有任何真正意义上的好工具,因此,随着工作进行,我们创建了其中的部分工具。
这里的真正挑战是,在恰当的时间介入项目生命周期,确保在一个足够早的阶段考虑设计统一的模型。
Jones:在微软,API定义语言无处不在。你会注意到,Swagger已经深深扎根于许多Azure API产品,Visual Studio也有一个针对Swagger的API客户端向导。我先前的团队,OneNote团队,就是使用API Blueprint设计API的,当然,OData CSDL的应用也相当广泛。
和其他人一样,我们希望整合一下,当然,我认为你可以期待OAS和OData CSDL接下来成为微软的基本规范。
Jones:我认为,在未来几年中,超媒体将越来越普遍,但不是每个人都做好了准备。构建一个灵活的系统,可以对超媒体响应的动态特性作出回应,是一种观念的转变,需要花一些时间去适应。
OData为我们提供了它们两者的其中一些最大的优点。如今,OData的典型应用是使用预定义的关系,但如果你是一个超媒体迷,那么你可以要求将元数据包含到响应报文中,并以此为基础构建一个完全动态的系统。
如果你看过任何最新的Cortana演示,在里面,我们主动为用户提供了贯通业务和个人生活的建议,那么就很容将其与API进行类比,静态关系根本不够用。你会需要通过一个API利用超媒体来提供这些主动建议。
我认为,使用超媒体注解类似机器学习这种更为传统的API,在这类场景中,我们可能会看到超媒体API的首次大规模实施。
Jones:对于Microsoft Graph,我们正致力于两项主要的支柱性工作:第一项显而易见,就是增加API覆盖,让你可以使用Microsoft Graph做更多的事。我正考虑把类似Microsoft Intune和Skype这样的产品作为范例。
另一项支柱性工作是进一步智能化。近日,我们向Graph的FindMeetingTimes API添加了一个调度算法,我们希望添加更多类似的东西。我们还希望添加深度Graph查询功能。
Jones:我认为,客户大多对我们务实的REST方法相当满意,必要的时候,我们向OData添加了动作或函数,而不是教条式地遵循REST原则。因此,我们没有感觉到那种压力。在流和实时数据方面,我们确实每天都会看到REST的局限。渐渐地,客户简直期望每个系统都有实时功能。
Jones:根据我在微软团队的工作经验,开发人员非常喜欢有更多形式化的东西,因为这样在解释规范时就不用臆测了。更大的挑战可能在于,让业务人员和架构师习惯工具和那种工作准确度。
借助部分内部构建的工具,我们非常注重预先设计文档和开发体验,并在那些文档中包含准确的元数据以驱动开发流程。这将模式设计过程和真实的API使用场景联系了起来,我们觉得那非常重要。
有时候,我们将契约驱动设计看作是从中间开始。我们努力推动上游将设计编入API文档的用例描述中。
Jones:好的,正如前面提到的,我认为实时会成为下一个大事件。REST非常适合事务型系统,但对于动态交互式应用,你确实需要一个实时通道。看看API社区如何关注这个领域将会很有意思。我这里可能会有偏见,但我认为,从现在开始,你会看到更多类似Microsoft Graph的孤立API整合。将智能机器学习和实体与不同API之间的关系联系起来,可以提供巨大的价值。
查看英文原文: Microsoft Graph Unifies Access to All APIs