Alibaba Cloud SDK for Java V2.0 は、汎用 API 呼び出しをサポートしています。この Topic では、Alibaba Cloud SDK for Java V2.0 を使用して汎用呼び出しを行う方法について説明します。
特徴
軽量: Alibaba Cloud SDK のコアライブラリのみをインストールすることで、Alibaba Cloud SDK V2.0 for Python を使用して API 操作を呼び出すことができます。各サービスの SDK をインストールする必要はありません。
使いやすい: 共通のリクエストパラメーターを作成し、共通のクライアントを使用してリクエストを開始するだけで済みます。応答は共通のフォーマットで返されます。
詳細については、「ジェネリック呼び出しと特殊な呼び出し」をご参照ください。
使用上の注意
ジェネリック呼び出しを行う前に、API 操作のメタデータ を表示して、API スタイル、リクエストパラメーター、および URL を取得することをお勧めします。
Alibaba Cloud SDK のコアライブラリをインストールする
ターミナルで次のコマンドを実行して、Alibaba Cloud SDK V2.0 for Python のコアライブラリをインストールします:
pip install alibabacloud-tea-openapiAPI 操作の呼び出し
1. リクエストクライアントの初期化
alibabacloud_tea_openapi パッケージの client モジュールから Client クラスを作成して、リクエストクライアントを初期化します。このクライアントを使用して OpenAPI 呼び出しを行います。クライアントを初期化する際に、Credentials ツールを使用することもできます。Credentials ツールの詳細については、「アクセス資格情報の管理」をご参照ください。
クライアントインスタンスはスレッドセーフです。アプリケーションでは、シングルトンパターンを使用してクライアントを作成します。これにより、アプリケーションライフサイクル中に同じ資格情報とエンドポイントに対して初期化されるクライアントインスタンスが 1 つだけであることが保証されます。
import os
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_openapi.client import Client as OpenApiClient
# 環境変数から AccessKey ペアを取得します。
config = open_api_models.Config(
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
# サービスのエンドポイントを設定します。
config.endpoint = f'ecs-cn-hangzhou.aliyuncs.com'
# config.protocol = 'HTTPS' # HTTPS 経由でリクエストを送信します。
# config.http_proxy = 'http://127.0.0.1:9898'
# config.https_proxy='http://user:password@127.0.0.1:8989'
# config.read_timeout = 10000, # 読み取りタイムアウト期間 (ミリ秒)。
# config.connect_timeout = 5000 # 接続タイムアウト期間 (ミリ秒)。
client = OpenApiClient(config)
# Credentials ツールを使用します。
# crendconfig = credentialConfig()
# crendconfig.type = 'access_key'
# crendconfig.access_key_id = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
# crendconfig.access_key_secret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
#
# credentialsClient = CredClient(crendconfig)
# config = open_api_models.Config()
# config.credential = credentialsClient
# config.endpoint = f'ecs.cn-hangzhou.aliyuncs.com'
# client = OpenApiClient(config)2. OpenAPI 情報の設定
alibabacloud_tea_openapi パッケージの models モジュールから Params クラスを使用して、API スタイル、API バージョン、リクエストメソッドなどの基本的な OpenAPI 情報を設定します。次の例は、DescribeInstanceTypeFamilies 操作を呼び出す方法を示しています:
params = open_api_models.Params(
style='RPC', # API スタイル: RPC または ROA。
version='2014-05-26', # API バージョン番号。
action='DescribeInstanceTypeFamilies', # API 名。
method='POST', # リクエストメソッド。
pathname='/', # API リソースパス。RPC API のデフォルトパスは "/" です。ROA API の場合、OpenAPI メタデータの data.path からリソースパスを取得します。
protocol='HTTPS', # リクエストプロトコル: HTTPS または HTTP。HTTPS の使用を推奨します。
auth_type='AK', # 認証タイプ。デフォルト値が使用されます。OpenAPI が匿名リクエストをサポートしている場合は、Anonymous を渡して匿名リクエストを行うことができます。
req_body_type='json', # リクエストボディのタイプ。サポートされているタイプは byte、json、および formData です。
body_type='json' # 応答データ形式。json がサポートされています。
)3. リクエストパラメーターの設定
alibabacloud_tea_openapi パッケージの models モジュールから OpenApiRequest クラスを使用して、リクエストパラメーターを設定します。クエリ、ボディ、またはストリームを介してパラメーターを渡すことができます。メタデータ内の情報に基づいてメソッドを選択します。たとえば、DescribeInstanceTypeFamilies 操作の RegionId リクエストパラメーターは、メタデータで {"name":"RegionId","in":"query",...}} として指定されています。"in":"query" は、RegionId がクエリパラメーターとして渡されることを示します。
パラメーターの渡し方 | 説明 |
query | リクエストパラメーターに |
body | リクエストパラメーターに |
stream | ファイルをアップロードするには、Stream パラメーターを設定してファイルストリームを渡すことができます。 |
from alibabacloud_openapi_util.client import Client as OpenApiUtilClient
# シナリオ 1: クエリパラメーターを設定します。
query = {'RegionId': 'cn-hangzhou'}
# API リクエストオブジェクトを作成します。
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(query),
)
# シナリオ 2: ボディパラメーターを設定します。reqBodyType の値は json です。
# body = {
# 'param1': 'value1'
# }
# API リクエストオブジェクトを作成します。
# request = open_api_models.OpenApiRequest(
# body=OpenApiUtilClient.query(body),
# )
# シナリオ 3: ストリームパラメーターを使用してファイルストリームを渡します。
# API リクエストオブジェクトを作成します。
# request = open_api_models.OpenApiRequest(
# stream='<FILE_STREAM>', # <FILE_STREAM> を実際のファイルストリームに置き換えます。
# )
# シナリオ 4: ボディパラメーターを設定します。reqBodyType の値は formData です。
# form_data = {
# 'param1': 'value1'
# }
# API リクエストオブジェクトを作成します。
# request = open_api_models.OpenApiRequest(
# body=form_data,
# )
4. リクエストの送信
ステップ 1 で作成した client を使用して、同期リクエストの場合は call_api を、非同期リクエストの場合は call_api_async を呼び出します。タイムアウトやプロキシ設定など、現在のリクエストの実行時パラメーターを設定することもできます。詳細については、「高度な設定」をご参照ください。
from alibabacloud_tea_util import models as util_models
# 実行時の設定。現在のリクエストに対してのみ有効です。
runtime = util_models.RuntimeOptions(
# ignore_ssl=True # SSL 証明書の検証を無視します。検証はデフォルトで有効になっています。
# autoretry=True, # リトライを有効にするかどうかを指定します。デフォルト: 無効。
# max_attempts=3 # リトライ回数。デフォルト: 3。
)
# 同期呼び出し。
response = client.call_api(params, request, runtime)
# 非同期呼び出し。
# response = await client.call_api_async(params, request, runtime)
# 戻り値は dict です。結果から body、headers、statusCode (HTTP ステータスコード) の 3 種類のデータを取得できます。
print(response['body'])
サンプルコード
例: RPC スタイルの API 操作を呼び出す
この例では、Elastic Compute Service (ECS) の DescribeInstanceTypeFamilies 操作を呼び出して、操作のジェネリック呼び出しを行う方法を示します。
import os
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_openapi.client import Client as OpenApiClient
from alibabacloud_tea_util import models as util_models
from alibabacloud_openapi_util.client import Client as OpenApiUtilClient
class Sample:
@staticmethod
def main():
# 環境変数から AccessKey ペアを取得します。
config = open_api_models.Config(
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
# サービスのエンドポイントを設定します。
config.endpoint = f'ecs-cn-hangzhou.aliyuncs.com'
client = OpenApiClient(config)
params = open_api_models.Params(
style='RPC', # API スタイル。
version='2014-05-26', # API バージョン番号。
action='DescribeInstanceTypeFamilies', # API 名。
method='POST', # リクエストメソッド。
pathname='/', # API PATH。RPC API のデフォルトパスは "/" です。
protocol='HTTPS', # API プロトコル。
auth_type='AK',
req_body_type='json', # リクエストボディのコンテンツ形式。
body_type='json' # 応答ボディのコンテンツ形式。
)
query = {'RegionId': 'cn-hangzhou'}
# API リクエストオブジェクトを作成します。
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(query),
)
# 実行時オプションオブジェクトを作成します。
runtime = util_models.RuntimeOptions()
# API を呼び出して応答を出力します。
response = client.call_api(params, request, runtime)
# 戻り値は Map です。Map から body、headers、statusCode (HTTP ステータスコード) の 3 種類のデータを取得できます。
print(response)
@staticmethod
async def main_async():
"""
非同期の main 関数。Alibaba Cloud API を非同期で呼び出す方法を示します。
"""
# 環境変数から AccessKey ペアを取得します。
config = open_api_models.Config(
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
# サービスのエンドポイントを設定します。
config.endpoint = f'ecs-cn-hangzhou.aliyuncs.com'
client = OpenApiClient(config)
params = open_api_models.Params(
style='RPC', # API スタイル。
version='2014-05-26', # API バージョン番号。
action='DescribeInstanceTypeFamilies', # API 名。
method='POST', # リクエストメソッド。
pathname='/', # API PATH。
protocol='HTTPS', # API プロトコル。
auth_type='AK',
req_body_type='json', # リクエストボディのコンテンツ形式。
body_type='json' # 応答ボディのコンテンツ形式。
)
query = {'RegionId': 'cn-hangzhou'}
# API リクエストオブジェクトを作成します。
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(query),
)
# 実行時オプションオブジェクトを作成します。
runtime = util_models.RuntimeOptions()
# 非同期 API 呼び出しを行います。
await client.call_api_async(params, request, runtime)
if __name__ == '__main__':
Sample.main()
例: RESTful スタイル (ROA スタイル) の API 操作を呼び出す
この例では、Container Service for Kubernetes (ACK) の DescribeClustersV1 操作を呼び出して、操作のジェネリック呼び出しを行う方法を示します。
import os
from alibabacloud_openapi_util.client import Client as OpenApiUtilClient
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_openapi.client import Client as OpenApiClient
from alibabacloud_tea_util import models as util_models
class Sample:
@staticmethod
def main() -> None:
# 環境変数から AccessKey ID と AccessKey Secret を取得します。
config = open_api_models.Config(
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
config.endpoint = f'cs.cn-qingdao.aliyuncs.com'
client = OpenApiClient(config)
params = open_api_models.Params(
# API 名。
action='DescribeClustersV1',
# API バージョン。
version='2015-12-15',
# API プロトコル。
protocol='HTTPS',
# API HTTP メソッド。
method='GET',
auth_type='AK',
style='ROA',
# API PATH。ROA API の場合、OpenAPI メタデータの data.path からリソースパスを取得します。
pathname=f'/api/v1/clusters',
# リクエストボディのコンテンツ形式。
req_body_type='json',
# 応答ボディのコンテンツ形式。
body_type='json'
)
# クエリパラメーター
queries = {'name': 'cluster-demo'}
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(queries)
)
# 実行時オプション
runtime = util_models.RuntimeOptions()
# 戻り値は Map です。Map から応答ボディ、応答ヘッダー、HTTP ステータスコードの 3 種類のデータを取得できます。
response = client.call_api(params, request, runtime)
print(response)
@staticmethod
async def main_async() -> None:
# 環境変数から AccessKey ID と AccessKey Secret を取得します。
config = open_api_models.Config(
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
config.endpoint = f'cs.cn-qingdao.aliyuncs.com'
client = OpenApiClient(config)
params = open_api_models.Params(
# API 名。
action='DescribeClustersV1',
# API バージョン。
version='2015-12-15',
# API プロトコル。
protocol='HTTPS',
# API HTTP メソッド。
method='GET',
auth_type='AK',
style='ROA',
# API PATH。
pathname=f'/api/v1/clusters',
# リクエストボディのコンテンツ形式。
req_body_type='json',
# 応答ボディのコンテンツ形式。
body_type='json'
)
# クエリパラメーター
queries = {'name': 'cluster-demo'}
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(queries)
)
# 実行時オプション
runtime = util_models.RuntimeOptions()
# 戻り値は Map です。Map から応答ボディ、応答ヘッダー、HTTP ステータスコードの 3 種類のデータを取得できます。
await client.call_api_async(params, request, runtime)
if __name__ == '__main__':
Sample.main()