使用Cloud Foundry来调整微服务API

[本文由John Wetherill撰写。]

最近的微服务博客中,我讨论了创建和管理访问库的做法,建议“微服务提供者应负责构建和管理用于访问服务的客户端库”。

在上周的Get Some REST文章中,我深入盘点了Cloud Foundry REST API。

在这里,我将把使用Cloud Foundry“cf”CLI端的虽然不是数据库本身但却是策划Cloud Foundry API的完美例证的两者联系在一起,并且也是一种直接应用于微服务API的技术。

Cloud Foundry REST API:简约却不简单

获取某些REST”文章显示了使用Cloud Foundry REST API将应用程序推送到Cloud Foundry所需的精确调用。该API的使用灵活,功能强大且相对直接,但正如我所提到的,它需要做出错误处理,解析响应,获取各种实体的GUID,压缩应用程序目录和其他低级工作。API方法虽然简单,但其实并不像看起来那么容易。当你真的想要部署你的应用程序时,你需要花费很多时间在管道上工作。

还有一个更简单的方法

比起前述种种,我们来看看这个如何:

     cf push

这个简单的命令调用了“cf”端,它负责处理上面的所有细节。它处理错误,处理身份验证令牌,解析和解释响应,创建zip文件,向PaaS查询所需的信息,如域指引。以及更多功能。

全部只需用一个命令。

管理模式

而这正是重点。“cf”命令是“调整”或“掌管”API的完美例子。虽然Cloud Foundry API功能强大且方便,但它们使用起来相当复杂,而在没有“cf”命令的情况下,任何想要使用此API的人都必须设置自己的访问实用程序或库。并保持它。并教育其他开发人员。随着基础API的发展,随着时间的推移而变化。

“cf”端提供了执行基本Cloud Foundry操作(例如推送应用程序)所需的各种API调用的标准包装。

对于大多数用途,最好使用cf工具与Cloud Foundry进行交互,而不是直接调用API。Cloud Foundry验收测试(或CAT社区)就是这样做的。这些测试可以确保Cloud Foundry自身的行为,而不是像调用低级别的REST调用那样直接包装cf命令。

这是大使模式

这种使用大使设计模式的管理方法。

一个大使要做什么?在现实生活中,大使是一个国家或国家的官方特使或代表,作为该国与外国政府的联络人。大使了解当地法律,语言,习俗,解决交流沟通问题,以及如何应对可能发生的事件和情况。如果游客需要帮助,那么通过大使而不是自己处理复杂问题要高效得多。

与此类似,cf命令充当Cloud Foundry(特别是其REST API)的特使,因为它了解如何与其通信,响应特殊情况,解释响应以及遵循Cloud Foundry特性(又名协议)。

这个比喻可能会让事情变得有些松懈,但重要的是,图书馆或者工具能够处理所有的细节,减轻开发者的担忧。

其他Cloud Foundry管理示例

“cf”命令不是Cloud Foundry可用的唯一访问库/实用程序。看看Java的cf端,通过Java允许相同的功能。

例如,下面是几行Java代码,它们调用(提供)cf Java客户端来输出每个空间的名称以及它所包含的组织:

for(CloudSpace space:client.getSpaces()){
   System.out.printf(“%s \ t(%s)%n”,space.getName(),
   。space.getOrganization()的getName());
}

请注意,Java客户端比cf cli稍低一点,因为它不提供单个调用来推送应用程序。也许更高级别的api被要求包装整个推送操作,但另一方面,也许不是:它足够简单地直接从Java调用“cf”cli客户端,并且如上所述,这是首选方法。

另一个值得关注的访问库是ActiveState的云代工客户端 JavaScript客户端。如果您想从浏览器中运行的应用程序管理Cloud Foundry,这个方法非常方便。像Java客户端一样,它还不具备直接推送应用程序的能力(Pull Requests welcome!),但它确实可以直接从JavaScript访问大多数Cloud Foundry功能。

所有这些:“cf”命令行客户端,Java客户端库和JavaScript客户端都是API管理的好例子,提供了一个高层次的低级操作包装,大多数开发人员不必担心。

开源吧!

我建议,如果可能的话,你开源你的访问库或实用程序。除了通常的开放源代码提供的许多好处之外,这允许API的消费者直接在源代码级看到API调用是如何进行的。

这有助于澄清规范的意图,在规范可能含糊或模糊的情况下。实际上,您正在为您的消费者提供参考实施,帮助了解规范,并避免分散和曲解。

这种方法的优点

管理API具有一些强大的优势,而不这样做就会有一些缺点。

单纯地要求您的服务的消费者/客户建立他们自己的访问库无疑增加了使用服务过程的负担,不过这是个只需通过构建您自己的访问库或实用程序即可轻松化解的入门障碍。

此外,如果您不管理您的API,则可以强制消费者编写自己的访问库。如果这样做的话,他们可能会误解你的规范,如果他们的访问库得到普及,其他消费者最终会依靠这种曲解,并出现存储残片。

无论如何,最好避免在社区中流传多种访问库和工具。

概要

微服务并不是什么新东西,但微服务的使用和意识最近已经膨胀到爆炸了。自然而然地,随着所有这些消息的曝光,许多微服务相关的模式和实践正在迅速发展。调整/掌管API是cf命令(以及stackato CLI也)精确体现的一个例子。

本文的版权归 用户1208077 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信小开发

劲爆!小程序又增新功能!为落地微信智慧零售方案做铺垫!

小程序从上线后至今共发布了97项能力,小程序还在不断完善。昨晚微信又沿袭了小程序上线后深夜更新的习惯,一次性更新了8项新功能,你想要的直播终于上线了。 ? ? ...

25660
来自专栏喔家ArchiSelf

解读六边形架构

追溯微服务架构的渊源,一般会涉及到六边形架构。追溯六边形架构的起源,要看始作俑者Alistair Cockburn的这篇文章 http://alistair.c...

23830
来自专栏blackpiglet

如何在 Kubernetes 环境中搭建 MySQL (一):简介

  最近因为工作上的需求,搭建了一套部署在 Kubernetes 环境中的 MySQL,可能听起来就是让 MySQL 的 docker image 跑在 Kub...

19050
来自专栏日常学python

Python骚操作 | 还原已撤回的微信消息

一大早醒来,发现女神昨晚发来三条消息,但是显示都已撤回,OMG,我错过了什么?群里有一个漂亮妹纸的爆照照片撤回了,想看又看不到!群里大佬分享的经典语录被撤回了,...

50560
来自专栏EAWorld

代码实战:从单体式应用到微服务的低风险演变

作者:Christian Posta 译者:海松 原题:Low-risk Monolith to Microservice Evolution Part I...

38750
来自专栏余林丰

MyBatis之级联小结

在这之前我们知道了MyBatis为我们提供了三种级联:一对一关系(assocation)、一对多关系(collection)、鉴别器(discriminator...

21280
来自专栏MoeLove

GitLab CI 使用 InsecureRegistry

继上次分享后,有读者留言问 dind 使用 insecure-registry 相关的问题。

14910
来自专栏FreeBuf

如何用kwetza给安卓应用加后门

*本文仅供安全学习、测试或信息安全教学用途,禁止非法使用 简介 这篇文章将会描述一种在Android可执行文件中种后门的方法。在接下来的动手操作部分,我将使用到...

31590
来自专栏EAWorld

微服务模式系列之八:第三方注册

译者自序: 熟悉我的朋友都知道,我很不喜欢翻译东西,因为在两种语言的思维方式之间做频繁切换对我来说是件很痛苦的事情。但是这次不一样,公司和同事的大力支持降低了我...

28980
来自专栏Timhbw博客

小白搭建博客教程之流程

2016-03-1209:03:37 发表评论 431℃热度 搭建个人博客其实说简单也简单,说难也难,当初我一个独自探索,到现在也差不多摸清门路了,因此写一个...

492100

扫码关注云+社区

领取腾讯云代金券