本文以调用 Function AI 的查询项目接口 GetProject
为例,介绍 Python SDK 的安装和使用。关于 GetProject
接口的 API 文档,请参见GetProject - 查询项目。
前提条件
调用阿里云OpenAPI通常需要设置访问密钥(AccessKey),由于阿里云账号(主账号)拥有资源的所有权限,AccessKey一旦泄露风险巨大,所以建议您使用满足最小化权限需求的RAM用户的AccessKey。
在环境变量中配置AccessKey
具体操作步骤,请参见在Linux、macOS和Windows系统配置环境变量。
环境要求
Python版本 >= 3.7
安装包管理工具
pip
安装SDK
复制下方提供的安装命令在Terminal中执行,以完成Function AI SDK的安装:
pip install alibabacloud_devs20230714
使用SDK
1.初始化客户端
在SDK中,所有的OpenAPI均通过SDK提供的请求客户端(Client)发起调用。因此,在调用OpenAPI之前,需要先对请求客户端进行初始化。请求客户端支持多种方式初始化,本示例以通过AccessKey初始化客户端为例。更多初始化方式请参见管理访问凭据。
# -*- coding: utf-8 -*-
import os
import sys
from typing import List
from alibabacloud_devs20230714.client import Client as Devs20230714Client
from alibabacloud_tea_openapi import models as open_api_models
class Sample:
def __init__(self):
pass
@staticmethod
def create_client() -> Devs20230714Client:
config = open_api_models.Config(
# 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
# 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
endpoint='devs.cn-hangzhou.aliyuncs.com'
)
return Devs20230714Client(config)
2. 构建接口的请求对象
在调用OpenAPI进行参数传递时,需使用SDK提供的请求对象来实现参数的传递。在构建请求对象之前,请查看该接口的API文档GetProject - 查询项目获取参数信息。
请求对象命名规则:{API名称}Request,例如GetProject接口的请求对象为GetProjectRequest。
// 构造请求对象
request = Devs20230714Client.models.GetProjectRequest()
request.project_name = 'my-project'
3. 发起调用
通过客户端调用OpenAPI时,支持设置运行时参数,例如超时配置、代理配置等,更多信息请查看进阶配置。
接口返回对象命名规则:{API名称}Response,例如GetProject该接口的返回对象为GetProjectResponse。
// 设置运行时参数
runtime = RuntimeOptions()
// 调用 GetProject 接口
response = client.get_project_with_options(request, runtime)
4. 异常处理
Python SDK将异常进行了细致的分类,主要划分为UnretryableException和TeaException。
UnretryableException:主要是因为网络问题造成,一般是网络问题达到最大重试次数后抛出。
TeaException:主要以业务报错为主的异常。
建议采取合理的措施来处理异常,比如合理地传播异常、记录日志、尝试恢复等,以确保系统的健壮性和稳定性。
5. 完整示例
# -*- coding: utf-8 -*-
import os
import sys
from typing import List
from alibabacloud_devs20230714.client import Client as Devs20230714Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
class Sample:
def __init__(self):
pass
@staticmethod
def create_client() -> Devs20230714Client:
config = open_api_models.Config(
# 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
# 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
endpoint='devs.cn-hangzhou.aliyuncs.com'
)
return Devs20230714Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
client = Sample.create_client()
runtime = util_models.RuntimeOptions()
headers = {}
try:
# 复制代码运行请自行打印 API 的返回值
client.get_project_with_options('my-project', headers, runtime)
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
print(error.message)
# 诊断地址
print(error.data.get("Recommend"))
UtilClient.assert_as_string(error.message)
@staticmethod
async def main_async(
args: List[str],
) -> None:
client = Sample.create_client()
runtime = util_models.RuntimeOptions()
headers = {}
try:
# 复制代码运行请自行打印 API 的返回值
await client.get_project_with_options_async('my-project', headers, runtime)
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
print(error.message)
# 诊断地址
print(error.data.get("Recommend"))
UtilClient.assert_as_string(error.message)
if __name__ == '__main__':
Sample.main(sys.argv[1:])
更多内容
除了使用上述调用方式外,您还可以使用泛化调用方式调用Function AI的OpenAPI,详细介绍请参见泛化调用。