使用 Smithy Init 创建 Smithy 项目

作者: 安德鲁·福斯 |

Smithy 团队很高兴地宣布在 Sm it hy CLI 中发布 初始化 命令。 此命令使开发人员能够快速轻松地创建新的 Smithy 项目。

在引入 Smithy init 命令之前,开发人员必须仔细遵循开发者指南或博客文章来设置他们的 Smithy 项目。这包括复制和粘贴代码片段,以及创建各种文件和目录。随着始化 命令的引入,开发人员可以使用单个命令来创建包含所有必要的 Smithy 文件、配置文件和目录的项目,所有这些文件都是根据他们的用例量身定制的。新的 初始化 命令简化了开发者开始使用 Smithy 的体验,而且由于它基于模板创建项目,因此不易出错。 ini t 命令提供的模板可以满足不同的项目需求,也可以作为很好的示例。开发人员可以使用这些模板来探索不同的项目设置并了解 Smithy 的各种功能。

什么是史密斯?

Smithy 是一种开源接口定义语言 (IDL) 和一组用于构建 Web 服务的工具,由 亚马逊云科技 创建。亚马逊云科技 使用 Smithy 对服务进行建模、生成服务器脚手架、生成多种语言的软件开发工具包以及生成 亚马逊云科技 开发工具包。Smithy 通过其可扩展的元模型和可插拔的设计在 API 上实现大规模协作。它专为支持多种语言的代码生成、支持自动执行 API 标准而构建,并且不受协议限制。Smithy 的设计植根于我们在亚马逊内部构建数千个服务 API 和开发复杂的 SDK 的经验。要了解更多信息,请访问s mithy.io 网站,并观看Smithy的一位创作者的 介绍性演讲

什么是 Smithy CLI?

Smithy CLI 允许开发人员快速迭代他们的 Smithy 模型。使用 Smithy CLI,开发人员可以快速初始化 Smithy 项目、构建模型、运行验证、比较模型的差异、查询模型等。Smithy CLI 可 在 macOS、Linux 和 Windows 平台上 下载

入门

如果你之前没有安装过 Smithy CLI,请按照 安装指南 进行操作。如果你已经安装了 Smithy CLI,请在终端 中运行 s mithy--version 来验证版本是否为 1. 36.0 或更高版本。如果使用 Homebrew 来安装 Smithy CLI,则可以通过在终端中运行 brew upgrade smithy-cli 将其更新到最新版本。否则,请参阅 安装指南 进行更新。

安装了 Smithy CLI 后,你可以使用 -- help 标志查看 初始化 命令的帮助信息:

$ smithy init --help
Usage: smithy init [--help | -h] [--debug] 
                   [--quiet] [--no-color] 
                   [--force-color] [--stacktrace] 
                   [--logging LOG_LEVEL] 
                   [--template | -t quickstart-cli] 
                   [--url https://github.com/smithy-lang/smithy-examples.git] 
                   [--output | -o new-smithy-project] 
                   [--list | -l] 
Initialize a smithy project using a template

接下来,我们将演示如何使用 init 命令来创建新的 Smithy 项目。

创建一个新的 Smithy 项目

让我们通过调用 init 命令来创建一个新项目:

$ smithy init --output ./new-smithy-project
Smithy project created in directory: new-smithy-project

这将在 news mithy-project 目录中创建一个新 项目:

$ tree ./new-smithy-project
./new-smithy-project
├── README.md
├── models
│   └── weather.smithy
└── smithy-build.json

默认情况下,初 始化 命令行工具将使用 quickstart -cli 模板创建一个新项目。在下一节中,我们将查看可用的模板以及如何访问它们。

利用项目模板

init 命令提供了一系列满足不同需求的项目模板。每个模板都有自己的 s mithy-build.json 文件和 模型 文件,用于满足不同的项目需求。如果你不熟悉 Smithy 并想了解 Smithy 的不同功能,这会很有用。例如,您可能需要使用模板来创建一个项目,该项目包含一个以 Smithy 建模的简单服务。

要查看可用的模板及其各自的用例,可以运行带有 --lis t 标志的 ini t 命令:

$ smithy init --list   
────────────────────────────  ──────────────────────────────────────────────────────────────────────
NAME                          DOCUMENTATION
────────────────────────────  ──────────────────────────────────────────────────────────────────────
common-linting-configuration  Gradle project to create a package to define a common set of model
                              validations.
custom-annotation-trait       Gradle project for creating a package for a custom annotation trait.
custom-linter                 Gradle project to create a custom, configurable model linter.
custom-string-trait           Gradle project for creating a package for a custom string trait.
custom-structure-trait        Gradle project for creating a package for a custom structure trait.
custom-validator              Gradle project to create a custom model validator.
decorators                    Gradle project to create a custom  decorator for validation events.
filter-internal-projection    Projection that filters out internal shapes and traits.
quickstart-cli                Smithy Quick Start example weather service using the Smithy CLI.
quickstart-gradle             Smithy Quick Start example weather service using the
                              Smithy-Gradle-Plugin.
shared-model-package          Gradle project to create a shared package of common Smithy models.
smithy-to-openapi             Generate an OpenAPI spec from a Smithy model

让我们尝试使用 quickstart-gradle 模板为气象服务创建一个项目。 你可以使用 --tem pl ate 标志调用初始化 命令:

$ smithy init --template quickstart-gradle --output ./my-new-service
Smithy project created in directory: my-new-service

这将在 my-new-service 目录中创建一个由 Smithy 模型文件、sm ithy-build.json 文件和各种 Gradle 配置文件组成的项目:

$ tree ./my-new-service
./my-new-service
├── README.md
├── build.gradle.kts
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── models
│   └── weather.smithy
├── settings.gradle.kts
└── smithy-build.json

如你所见,初化 命令简化了新 Smithy 项目的启动。我们鼓励您尝试其他模板,以了解有关不同项目设置和 Smithy 功能的更多信息!

模板存储库

在幕后, 初始化 命令会检查 Smithy 的 smithy 示例 G it 存储库中提供的最新模板列表。 这个开源存储库包括来自 亚马逊云科技 和社区成员的贡献。

开发人员可以灵活地使用替代存储库来覆盖默认存储库。开发人员可能想要设置自己的模板存储库来共享特定于其产品或用例的 Smithy 模型。或者,他们可能想要创建一组私有模板以在组织内共享。

--url 参数指定自定义存储库:

$ smithy init --template some-common-package --url https://github.com/user/repo.git
Smithy project created in directory: some-common-package

初始化 命令需要在存储库的根级别上有一 个 smithy-templates.json 文件。以下是史密斯 示例 存储库 中的示例,供参考。

下一步是什么?

随着 Smithy init 命令现已可用,开发人员可以从一组精选的项目模板快速轻松地启动 Smithy 项目。开发人员还可以利用这些模板来探索不同的项目设置并了解 Smithy 的各种功能。

我们鼓励你试用 Smithy init 命令,并在 GitHub 上 联系我们,告诉我们你的想法。 如果你有改进的想法,请毫不犹豫地创建 问题 拉取请求

作者简介:

Andrew Foss

安德鲁·福斯

安德鲁是 亚马逊云科技 Smithy 团队的软件开发工程师。他喜欢开发旨在改善开发者体验的项目和工具。