salesforce 开源,salesforce项目

创作者 | Nitesh Kumar

译员 | 张卫滨

方案策划 | Tina

API 相对于机构而言正变得更加关键,可是,构建安全性、可扩展的 API 绝非易事。文中从实行自然环境、API 技术性、安全系数等角度考虑,阐述了怎样构建高效率、可扩展的 API。

文中最开始发布于 Salesforce 网站,经创作者 Nitesh Kumar 受权,由 InfoQ 中文网站汉语翻译共享。

API 是一个关键的一种手段,容许合作方、开发者和其他应用交易大家所提供的微服务架构,与此开展通讯,并鉴于此构建各种各样作用。

高质量 API 要能伴随着业务流程生态体系的高速发展而扩展,构建这种 API 并不是一件容易的事情,必须对所有的事开展整体思索和计划,牵涉到选择什么样的实行自然环境,甚至还要确定该采用哪一种 API 技术性。

那样,我们都是如何做到的啊?在这篇文章中,我将会剖析在 Salesforce 为 Activity Platform 构建 API 积累的经验,它可作为你撰写 API 的一个手册。Activity Platform 是一个大数据应用模块,每天都会摄入与分析超出 1 亿个的客户交流,以全自动捕捉数据信息从而产生剖析、强烈推荐和 feed。Activity Platform 带来了 API 来给我们的客户交货这个功能。

挑选实行自然环境

根据自己的需求不一样,实行自然环境能是原装机、vm虚拟机(VM)或是运用容器。大家选了应用运用容器,因为他还可以在物理机或 VM 上运作,一个电脑操作系统案例可以兼容好几个容器,每一个容器都是在独立自主的落实环境中运行。简单点来说,容器是轻量、生命期、便捷的,而且便于部署和扩展,因此他们纯天然合适微服务架构。

有关容器编辑

假如你像我们这样确定应用容器,容器编辑能帮助你完成自动化部署,管理方法容器、扩展及其互联网。在这一方面,有许多可供选择的容器编辑专用工具,例如 Kubernetes、Apache Mesos、DC/OS(with Marathon)、Amazon EKS、Google Kubernetes Engine(GKE)等。

大家采用的是 Hashicorp 的 Nomad 群集。它比较简单、轻量,并且能编辑一切类型的应用,而不只是容器。它可以无缝拼接与 Consul 和 Vault 集成化,完成服务发现和 secret 管理方法。我们可以非常容易地把需求描述为一个待实行任务(task),例如运行内存、互联网、CPU,及其大家水准扩展服务项目所需要的案例总数。

挑选 API 技术性

为了能构建 API,大家选了应用 GraphQL。如果你没听过它得话,它是其它可选择技术性(如 REST、SOAP、Apache Thrift、OpenAPI/Swagger 或 gRPC)的一个替代选择。

大家为什么要选择 GraphQL

我们要想构建的 API 可以立足于多种多样手机客户端,包含 Web 和移动智能终端。它必须具备高效率、强劲和灵活多变的特性。

由于以内的缘故,GraphQL 是最佳选择计划方案:

GraphQL 是数据库系统不相干的技术性,可以从哪里都给我们事先界定的业务范围给出的数据。这就意味着为了实现一个查看,最底层可以用 Cassandra、Elasticsearch 或其它模块目前 API。

它容许手机客户端精准要求自己想要的数据信息,防止过多载入(overfetching)或载入不够(underfetching)。假如 API 返回数据信息远远超过了手机客户端的需要,这也会导致性能问题,假如返回数据信息比预估尽量少,那样将进行数次互联网启用,进而缓解3D渲染时长。GraphQL 可以防止这些情况。

虽然绝大多数 API 都完成了版本控制,可是 GraphQL 是一个无版本号变的 API。因为他只能回到确立要求的信息,因此我们可以根据加上一个新的类型及其类型里的新字组词段来提高作用,防止产生破坏的变动。

GraphQL 应用强类型系统软件,每一个类型全是应用 Graph SDL 以方式(schema)的形式进行界定的。它可作为手机客户端和云服务器合同,防止要求 / 回应构造的搞混。

GraphLQ 适用自悟(introspection),因此模式定义能通过各种工具开展分享和免费下载,如 GraphiQL、GraphQL-playground 或 cli 专用工具。

GraphQL 实战演练

大家在 Classification Insight API 中用了 GraphQL。Classification Insight 带来了客户的信息内容,并且能协助会议的参与者掌握别的与会人员的名号和人物角色。大家应用 Kotlin 和 graphql-java(GraphQL 的一个 Java 完成)完成该 API。

第一步:界定方式(如 schema.graphqls)。每一个 GraphQL 服务项目会界定一组类型。GraphQL 模式下最基本部件是目标类型,它代表着一种我们可以从业务中获得对象。

schema.graphqls

第二步:完成 Datafetcher(又被称为在线解析)来分析 getClassificationInsightsByUser 字段名。通俗点说,在线解析是由开发者所提供的一个函数,用于分析模式下界定的每一个字段并且从的配置网络资源(如数据库系统、别的 API 或缓存文件等)中传参。

在本例中,我们自己的 Query 类型提供了一个名叫 getClassificationInsightsByUser 的字段名,它接纳 emailAddresses 主要参数。该字段在线解析函数公式很有可能会浏览一个数据库系统,并结构和回到 ClassificationInsightByUser 对象一个目录。

第三步:复位 GraphQLSchema 和 GraphQL Object(依靠 graphql-java)来协助执行查询。

第四步:撰写 servlet(MyAppServlet),解决传到请求

第五步:在运用中,置入 Web 网络服务器(本例中常用的是 Jetty)。

第六步:构建并运行运用,请选择 CI/CD 专用工具来建立、公布和布署 Docker 镜像系统到群集中。

保证 API 安全性

在 Salesforce,安全系数是重中之重。我们自己的 API 仅作用户注册浏览,并且他们只会浏览有权限数据信息。在这一方面,你能探寻 OAuth 2.0(JWT 授于类型和根据人物的密钥管理)和对外开放对策代理商(Open Policy Agent ,OPA)去满足密钥管理的需要。

做为良好实践,验证消息中间件应当放到 GraphQL 以前,而且需在业务逻辑层有唯一一个地区承担受权,确保在多个地方都会进行查验。除开认证和授权,在规划 API 的时候还应注意速度限定、数据脱敏(data masking)和荷载扫描仪。

总 结

己经展现了怎样构建一个可扩展、高效率、安全 API。在这过程中,大家应用运用容器开展扩展,应用 GraphQL 和内嵌式 Jetty 保证高效率和轻量,并优先选择了 API 安全性。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

 Theme By 优美尚品

每日搜寻全球各个角落的热点新闻,锁定小童说事网,多一点惊喜与感动!