我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
介绍适用于 Python 的 Smit
亚马逊云科技 很高兴地宣布推出
什么是史密斯?
包括什么?
代码生成的 Python 客户端将具有以下功能:
- 代码生成和类型提示-客户端、操作及其包含的所有数据的代码将生成到 python 类中。除了类型提示外,这将允许客户使用诸如mypy或其他类型分析工具之类的工具轻松地整理和调试他们的代码。
-
拦截器 — 拦截器是新的可扩展性功能,它取代了 botocore 事件系统。 它们旨在更加可靠,并在 Smithy 支持的所有语言中保持一致。 - 首先是异步——异步在 Python 生态系统 中
变得越来越重要 ,而且由于客户将大部分时间都花在 IO 上,因此它们是它的完美用例。因此,所有操作都将作为异步函数生成。 - 可配置组件-客户端的所有核心组件都将完全可配置。例如,如果你想使用龙卷风作为底层的 http 库,你可以很容易地做到这一点。
目前,协议支持仅限于
入门
生成客户有三个先决条件。第一个先决条件是 Python,它的最低要求版本为 3.11。第二个先决条件是 Java 17,它只是构建生成器所必需的。将来,当生成器发布到软件包存储库时,将不需要这样做。也不需要运行生成的 Python 客户端。你需要的最后一个先决条件是
要构建生成器,请克隆 s
这将生成生成器并使其在您的本地计算机上可用。
现在你已经建造了生成器,你需要一个 Smithy 模型。在此示例中,您将为服务使用一个小型模型,该模型接受 JSON 正文中的字符串消息并未修改地返回该消息。 将以下模型内容保存到名为
main.smithy 的文件 中,该文件位于名为 m
odel 的目录中。
$version: "2.0"
namespace com.example
use aws.protocols#restJson1
@restJson1
service EchoService {
operations: [Echo]
}
@http(
method: "POST"
uri: "/echo"
)
operation EchoMessage {
input := {
message: String
}
output := {
message: String
}
}
现在你需要创建一个名为 s mithy-
build.json 的配置文件。此配置文件允许您指定依赖关系、配置插件和创建投影,这些是满足特定目的的模型的不同视图。sm
mithy-build.json
文件添加了一些必要的依赖关系,并创建了用于构建 python 客户端的投影。在与模型文件夹相同的目录中创建您的 sm ithy-build.json
文件,其中包含以下内容:
{
"version": "1.0",
"sources": ["model"],
"maven": {
"dependencies": [
"software.amazon.smithy:smithy-model:1.34.0",
"software.amazon.smithy:smithy-aws-traits:1.34.0",
"software.amazon.smithy.python:smithy-python-codegen:0.1.0"
]
},
"projections": {
"python-client": {
"plugins": {
"python-client-codegen": {
"service": "com.example#EchoService",
"module": "echo",
"moduleVersion": "0.1.0"
}
}
}
}
}
你的文件结构现在应该是这样的:
生成客户端剩下的唯一步骤就是运行 s mithy build
。现在,您的新客户端将作为可安装包在 build/python-client/python-client-codegen
中提供。要使用它,你需要通过 从 smithy-python 存储库的根目录运行 m ake install-python 组件来安装
一些 Python 依赖项。以下片段显示了如何使用新客户端:
import asyncio
from echo.client import EchoService
from echo.config import Config
from echo.models import EchoMessageInput
async def main() -> None:
client = EchoService(Config(endpoint_uri="https://example.com/"))
response = await client.echo(EchoMessageInput(message="spam"))
print(response.message)
if __name__ == "__main__":
asyncio.run(main())
Smithy for Python 的下一步是什么?
我们将为代码生成器提供新功能,以便更轻松地生成自定义客户端。我们还将提供对更多协议和功能的支持,以生成更多类型的服务。
反馈
我们鼓励你试用 Smithy for Python 来构建自己的客户端。如果你有任何问题、意见、疑虑或想法,请在 s
作者简介:
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。