史密斯:用于定义服务和SDK的语言

2021-05-08 22:51:09

[完整举例]命名空间example.Weather Service天气{Version:" 2006-03-01"资源:[City],操作:[GetCurrenttime]}资源城市{标识符:{CityID:CityID},阅读:Getcity,List:ListCities,Resources:[预测],}

史密斯旨在使用任何编程语言,描述在任何环境中运行的服务,并使用任何类型的传输或序列化格式。

史密斯通过特质延伸。锻造' S扩展元模型可以在不破坏变化的情况下演变和捕获有关服务的更多信息。

可自定义的API标准有助于自动确保API满足客户的期望。可以共享验证规则并将其应用于组织中的所有API。

锻造模型由资源和操作定义。使用资源定义服务有助于导致更好的API,并提供丰富的模型转换信息。

史密斯是基于亚马逊和AWS在十年内被广泛使用的接口定义语言。我们决定公开发布史密斯,让其他开发人员为自己的服务使用锻炼,并从我们多年的经验中受益于建造成千上万的服务。通过释放匠空规范和工具,我们也希望开发人员更容易维护开源AWS SDK。

不,史密斯可以与任何类型的服务一起使用。史密斯中的所有特定于AWS特定的元数据都被实现为解耦包。

在AWS,我们严重依赖于元数据,代码生成,服务框架,客户端库和自动策略实施。 AWS之外可用的现有IDL不足以满足我们的需求,不兼容我们现有的服务。

史密斯是用于代码生成和工具的。设计用于为多个编程语言生成代码的媒介型号。例如,稳态模型完全归一化,这为所有生成的类型提供了显式名称,使型号易于遍历,验证和差异。

锻造可以延伸和约束。特征用于扩展模型并添加不属于核心规范的功能。例如,AWS定义了用于生成从媒体模型派生的其他元数据文档的AWS特定的特征。虽然可扩展是一个关键的设计要求,但史密斯提供了一个内置的验证系统,可确保模型遵循可配置的规则和策略集。

锻造是协议不可知的。史密斯从服务的数据结构和能力与服务的数据结构和功能分离,以便它们可以独立演变。

史密斯帮助大型组织在API上进行协作。史密斯允许模型的不同方面由不同的团队拥有。我们在AWS上使用此功能以允许文档团队自己拥有API文档,而服务主控制服务的形状和操作。

可以为不同的受众改变锻造模型。锻造' S投影系统允许基于模型的特定构建来筛选和更改模型的内容。这允许使用类似情况,如维护模型的内部和外部版本,并将Beta模型提供给客户的一部分。

协议 - 不可知意味着该模型是一种抽象,它指定客户端和服务器通信方式的规则和语义。服务的传输和序列化格式作为实现细节留下,允许它们随时间演变。例如,服务所有者可能希望演变其序列化格式(例如,从文本移动到二进制),它们的连接类型(例如,从HTTP / 1移动到HTTP / 2),或者启动完全新的功能。

锻造和森盖之间的主要差异是铁匠铺是协议 - 不可知的,允许史密斯描述更广泛的服务,元数据和能力。 匠可以通过将匠型模型转换为Openapi来与Openapi一起使用。