Alibaba Cloud SDK V1.0 は、OpenAPI を呼び出すための汎用的なメソッドである「汎化呼び出し」をサポートしています。このトピックでは、汎化呼び出しを使用して OpenAPI にアクセスする方法を説明します。
特徴
軽量:呼び出しにはコアパッケージのみが必要です。各製品の SDK をダウンロードしてインストールする必要はありません。
高い互換性:クラウド製品がまだ SDK を提供していない場合や、新しい API がリリースされても SDK が更新されていない場合でも、汎化呼び出しを使用できます。これにより、SDK の更新を待たずに最新の API オペレーションを呼び出すことができます。
詳細については、「汎化呼び出しと特化呼び出し」をご参照ください。
注意事項
汎化呼び出しを使用する前に、バージョン番号、リクエスト URI、パラメータータイプなどの OpenAPI メタデータを手動で取得して設定する必要があります。OpenAPI の API スタイル、リクエストパラメーター、リソースパスの詳細については、「OpenAPI メタデータ」をご参照ください。
コア SDK のインストール
ターミナルで次のコマンドを実行して、コア SDK をインストールします。最新バージョンについては、「aliyun-net-sdk-core」をご参照ください。
dotnet add package aliyun-net-sdk-coreOpenAPI の呼び出し
リクエストクライアントの初期化
DefaultAcsClient オブジェクトを作成して、リクエストクライアントを初期化します。この例では、AccessKey を使用してクライアントを初期化する方法を示します。その他の初期化方法の詳細については、「アクセス認証情報の管理」をご参照ください。
認証情報の漏洩を防ぐため、認証情報は環境変数に保存してください。詳細については、「Linux、macOS、Windows で環境変数を設定する」をご参照ください。
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
namespace AlibabaCloud.SDK.Sample
{
public class Sample
{
public static void Main(string[] args)
{
IClientProfile profile = DefaultProfile.GetProfile(
// リージョン ID。
"<REGION_ID>",
// 環境変数から Resource Access Management (RAM) ユーザーの AccessKey ID を取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// 環境変数から RAM ユーザーの AccessKey Secret を取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
}
}
}OpenAPI 情報とリクエストパラメーターの設定
CommonRequest を使用して、OpenAPI で必要な共通リクエストパラメーターと API 固有のリクエストパラメーターを設定します。共通リクエストパラメーターとその使用方法の詳細については、「高度な設定」をご参照ください。
API リクエストパラメーターの説明
リクエストパラメーターを渡す方法については、対応する API オペレーションの OpenAPI メタデータを参照してください。たとえば、メタデータ内の DescribeInstanceStatus オペレーションの RegionId リクエストパラメーターの情報は {"name":"RegionId","in":"query",...}} です。この場合、"in":"query" は、RegionId が AddQueryParameters を使用して渡すことを示します。
説明 | パラメーターの渡し方 |
リクエストパラメーターが | AddQueryParameters(string key, string value) 説明 リクエストパラメーターがコレクションの場合、AddQueryParameters("key.1", "value1")、AddQueryParameters("key.2", "value2") のような形式でパラメーターを渡します。 |
リクエストパラメーターが | AddBodyParameters(string key, string value) 説明 リクエストパラメーターが文字列でない場合は、パラメーター値を JSON 文字列に変換し、 |
ファイルをアップロードする場合。 | SetContent(byte[] content, string charset, FormatType formatType) 説明
|
// 2. APIリクエストを作成し、パラメーターを設定します。
CommonRequest request = new CommonRequest();
// 2.1 共通リクエストパラメーターを設定します。
request.Domain = "ecs-cn-hangzhou.aliyuncs.com"; // クラウド製品のドメイン。
request.Version = "2014-05-26"; // クラウド製品の API バージョン。
request.Action = "DescribeInstanceStatus"; // API オペレーションの名前。 このパラメーターは RPC API オペレーションでは必須ですが、ROA API オペレーションでは必須ではありません。
request.Method = MethodType.POST; // リクエストメソッド。 有効な値:MethodType.POST、MethodType.GET、MethodType.PUT、MethodType.DELETE、MethodType.HEAD、MethodType.OPTIONS。
request.Protocol = ProtocolType.HTTPS; // リクエストプロトコル。 有効な値:ProtocolType.HTTPS および ProtocolType.HTTP。
request.TimeoutInMilliSeconds = 1000; // タイムアウト期間。
// request.UriPattern = "/"; // リソースパス。 このパラメーターは ROA API オペレーションでは必須です。 RPC API オペレーションではこのパラメーターを設定しないでください。
// 2.2 API 固有のリクエストパラメーターを設定します。
// シナリオ 1:AddQueryParameters(string key, string value) を使用してクエリパラメーターを設定します。
request.AddQueryParameters("RegionId", "cn-hangzhou");
List<string> instanceIds = new List<string> { "i-bp124uve8zq7XXXXXXXX", "i-bp1axhql4dqaXXXXXXXX" };
for (int i = 0; i < instanceIds.Count; i++) {
request.AddQueryParameters($"InstanceId.{i + 1}" , instanceIds[i]);
}
request.AddQueryParameters("PageNumber", "1");
request.AddQueryParameters("PageSize", "30");
// シナリオ 2:AddBodyParameters(string key, string value) を使用してボディパラメーターを設定します。
// request.AddBodyParameters("key1", "value1");
// request.AddBodyParameters("key2", "value2");
// シナリオ 3:SetContent(byte[] content, string charset, FormatType formatType) を使用してファイルをアップロードします。 formatType パラメーターは FormatType.RAW に設定する必要があります。
// byte[] content = File.ReadAllBytes(@"<FILE_PATH>");
// request.SetContent(content, "UTF-8",FormatType.RAW);
リクエストの送信
前の手順で作成した client を使用して GetCommonResponse メソッドを呼び出し、リクエストを送信します。
CommonResponse response = client.GetCommonResponse(request);
System.Console.WriteLine(response.Data);例: RPC スタイルの API の呼び出し
次のコードは、CommonRequest を使用して Elastic Compute Service (ECS) の DescribeInstanceStatus オペレーションを呼び出す方法を示しています:
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
class Sample
{
static void Main(string[] args)
{
// リクエストを送信するクライアントインスタンスを作成します。
IClientProfile profile = DefaultProfile.GetProfile(
// リージョンID。
"cn-hangzhou",
// 環境変数から RAM ユーザーの AccessKey ID を取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// 環境変数から RAM ユーザーの AccessKey Secret を取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
try
{
// リクエストを構築します。
CommonRequest request = new CommonRequest();
request.Domain = "ecs.aliyuncs.com";
request.Version = "2014-05-26";
// これは RPC API オペレーションであるため、ApiName (Action) を指定する必要があります。
request.Action = "DescribeInstanceStatus";
request.AddQueryParameters("RegionId", "cn-hangzhou");
List<string> instanceIds = new List<string> { "i-bp124uve8zq7XXXXXXXX", "i-bp1axhql4dqaXXXXXXXX" };
for (int i = 0; i < instanceIds.Count; i++) {
request.AddQueryParameters($"InstanceId.{i + 1}" , instanceIds[i]);
}
request.AddQueryParameters("PageNumber", "1");
request.AddQueryParameters("PageSize", "30");
// リクエストを送信し、レスポンスを取得します。
CommonResponse response = client.GetCommonResponse(request);
System.Console.WriteLine(response.Data);
}
catch (ServerException ex)
{
System.Console.WriteLine(ex.ToString());
}
catch (ClientException ex)
{
System.Console.WriteLine(ex.ToString());
}
}
}例: RESTful (ROA) スタイルの API の呼び出し
次のコードは、CommonRequest を使用して Container Service (CS) の API オペレーションを呼び出し、すべてのクラスターインスタンスを表示する方法を示しています:
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
class Sample
{
static void Main(string[] args)
{
// リクエストを送信するクライアントを作成します。
IClientProfile profile = DefaultProfile.GetProfile(
// リージョンID。
"<REGION-ID>",
// 環境変数から RAM ユーザーの AccessKey ID を取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// 環境変数から RAM ユーザーの AccessKey Secret を取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
try
{
// リクエストを構築します。
CommonRequest request = new CommonRequest();
request.Domain = "cs.aliyuncs.com";
request.Version = "2015-12-15";
// これは RESTful API オペレーションであるため、UriPattern を指定する必要があります。
request.UriPattern = "/clusters";
// リクエストを送信し、レスポンスを取得します。
CommonResponse response = client.GetCommonResponse(request);
System.Console.WriteLine(response.Data);
}
catch (ServerException ex)
{
System.Console.WriteLine(ex.ToString());
}
catch (ClientException ex)
{
System.Console.WriteLine(ex.ToString());
}
}
}よくある質問
「The input parameter \"AccessKeyId\" that is mandatory for processing this request is not supplied.」というエラーメッセージが返ります。
原因: AccessKey が正しく設定されていません。
解決策:
次のコマンドを実行して、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が正しく設定されているかどうかを確認します:
Linux/macOS
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRETWindows
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%正しい AccessKey が返された場合は、設定は成功です。返された値が空または正しくない場合は、環境変数を再度設定してください。詳細については、「Linux、macOS、Windows で環境変数を設定する」をご参照ください。
AccessKey に関連するコードに誤りがないか確認してください。
よくある誤りの例:
AccessKeyId = Environment.GetEnvironmentVariable("yourAccessKeyID"), AccessKeySecret = Environment.GetEnvironmentVariable("yourAccessKeySecret"),正しい例:
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
「Unhandled exception. Aliyun.Acs.Core.Exceptions.ClientException: SDK.WebException : HttpWebRequest WebException occurred, the request url is XXX.cn-hangzhou.aliyuncs.com System.Net.WebException: An error occurred while sending the request.」というエラーメッセージが返ります。
原因: RPC API オペレーションの共通リクエストパラメーターに UriPattern パラメーターが設定されています。
解決策: 共通リクエストパラメーターから UriPattern パラメーターを削除してください。