Alibaba Cloud SDK for Java V2.0 mendukung panggilan API generik. Topik ini menjelaskan cara melakukan panggilan generik menggunakan Alibaba Cloud SDK for Java V2.0.
Karakteristik
Ringan: Anda dapat menggunakan Alibaba Cloud SDK V2.0 untuk Python guna memanggil operasi API hanya dengan menginstal pustaka inti Alibaba Cloud SDK, tanpa perlu menginstal SDK masing-masing layanan.
Mudah digunakan: Anda hanya perlu membuat parameter permintaan umum dan menggunakan klien umum untuk mengirim permintaan. Tanggapan dikembalikan dalam format umum.
Untuk informasi selengkapnya, lihat Panggilan generik dan panggilan khusus.
Catatan penggunaan
Sebelum melakukan panggilan generik, kami menyarankan agar Anda melihat metadata operasi API untuk memperoleh gaya API, parameter permintaan, dan URL.
Instal pustaka inti Alibaba Cloud SDK
Jalankan perintah berikut di terminal Anda untuk menginstal pustaka inti Alibaba Cloud SDK V2.0 untuk Python:
pip install alibabacloud-tea-openapiPanggil operasi API
1. Inisialisasi klien permintaan
Inisialisasi klien permintaan dengan membuat kelas Client dari modul client dalam paket alibabacloud_tea_openapi. Gunakan klien ini untuk melakukan panggilan OpenAPI. Anda juga dapat menggunakan alat Credentials saat menginisialisasi klien. Untuk informasi selengkapnya tentang alat Credentials, lihat Mengelola kredensial akses.
Instans klien bersifat thread-safe. Dalam aplikasi Anda, gunakan pola singleton untuk membuat klien. Hal ini memastikan bahwa hanya satu instans klien yang diinisialisasi untuk kredensial dan titik akhir yang sama selama siklus hidup aplikasi.
import os
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_openapi.client import Client as OpenApiClient
# Peroleh Pasangan Kunci Akses dari variabel lingkungan.
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']
)
# Tetapkan titik akhir layanan.
config.endpoint = f'ecs-cn-hangzhou.aliyuncs.com'
# config.protocol = 'HTTPS' # Kirim permintaan melalui 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, # Periode timeout baca dalam milidetik (ms).
# config.connect_timeout = 5000 # Periode timeout koneksi dalam milidetik (ms).
client = OpenApiClient(config)
# Gunakan alat 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. Konfigurasi informasi OpenAPI
Gunakan kelas Params dari modul models dalam paket alibabacloud_tea_openapi untuk mengonfigurasi informasi dasar OpenAPI, seperti gaya API, versi API, dan metode permintaan. Contoh berikut menunjukkan cara memanggil operasi DescribeInstanceTypeFamilies:
params = open_api_models.Params(
style='RPC', # Gaya API: RPC atau ROA.
version='2014-05-26', # Nomor versi API.
action='DescribeInstanceTypeFamilies', # Nama API.
method='POST', # Metode permintaan.
pathname='/', # Jalur sumber API. Jalur default untuk API RPC adalah "/". Untuk API ROA, ambil jalur sumber dari data.path dalam metadata OpenAPI.
protocol='HTTPS', # Protokol permintaan: HTTPS atau HTTP. Kami menyarankan Anda menggunakan HTTPS.
auth_type='AK', # Jenis autentikasi. Nilai default digunakan. Jika OpenAPI mendukung permintaan anonim, Anda dapat meneruskan Anonymous untuk membuat permintaan anonim.
req_body_type='json', # Jenis badan permintaan. Jenis yang didukung adalah byte, json, dan formData.
body_type='json' # Format data respons. json didukung.
)3. Konfigurasi parameter permintaan
Gunakan kelas OpenApiRequest dari modul models dalam paket alibabacloud_tea_openapi untuk mengonfigurasi parameter permintaan. Anda dapat meneruskan parameter melalui query, body, atau stream. Pilih metode berdasarkan informasi dalam metadata. Misalnya, parameter permintaan RegionId dari operasi DescribeInstanceTypeFamilies ditentukan sebagai {"name":"RegionId","in":"query",...} dalam metadata. "in":"query" menunjukkan bahwa RegionId diteruskan sebagai parameter query.
Cara parameter diteruskan | Deskripsi |
query | Jika parameter permintaan menampilkan |
body | Jika parameter permintaan menampilkan |
stream | Untuk mengunggah file, Anda dapat meneruskan aliran file dengan mengonfigurasi parameter Stream. |
from alibabacloud_openapi_util.client import Client as OpenApiUtilClient
# Skenario 1: Tetapkan parameter query.
query = {'RegionId': 'cn-hangzhou'}
# Buat objek permintaan API.
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(query),
)
# Skenario 2: Tetapkan parameter body. Nilai reqBodyType adalah json.
# body = {
# 'param1': 'value1'
# }
# Buat objek permintaan API.
# request = open_api_models.OpenApiRequest(
# body=OpenApiUtilClient.query(body),
# )
# Skenario 3: Gunakan parameter stream untuk meneruskan aliran file.
# Buat objek permintaan API.
# request = open_api_models.OpenApiRequest(
# stream='<FILE_STREAM>', # Ganti <FILE_STREAM> dengan aliran file sebenarnya.
# )
# Skenario 4: Tetapkan parameter body. Nilai reqBodyType adalah formData.
# form_data = {
# 'param1': 'value1'
# }
# Buat objek permintaan API.
# request = open_api_models.OpenApiRequest(
# body=form_data,
# )
4. Kirim permintaan
Gunakan klien yang dibuat pada Langkah 1 untuk memanggil call_api untuk permintaan sinkron atau call_api_async untuk permintaan asinkron. Anda juga dapat menetapkan parameter waktu proses untuk permintaan saat ini, seperti konfigurasi timeout dan proxy. Untuk informasi selengkapnya, lihat Konfigurasi lanjutan.
from alibabacloud_tea_util import models as util_models
# Konfigurasi waktu proses, yang hanya berlaku untuk permintaan saat ini.
runtime = util_models.RuntimeOptions(
# ignore_ssl=True # Mengabaikan verifikasi sertifikat SSL. Verifikasi diaktifkan secara default.
# autoretry=True, # Menentukan apakah akan mengaktifkan pengulangan. Default: dinonaktifkan.
# max_attempts=3 # Jumlah pengulangan. Default: 3.
)
# Panggilan sinkron.
response = client.call_api(params, request, runtime)
# Panggilan asinkron.
# response = await client.call_api_async(params, request, runtime)
# Nilai kembali adalah dict. Anda dapat memperoleh tiga jenis data dari hasilnya: body, headers, dan statusCode (kode status HTTP).
print(response['body'])
Kode contoh
Contoh: Panggil operasi API bergaya RPC
Dalam contoh ini, operasi DescribeInstanceTypeFamilies dari Elastic Compute Service (ECS) dipanggil untuk menunjukkan cara melakukan panggilan generik suatu operasi.
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():
# Peroleh Pasangan Kunci Akses dari variabel lingkungan.
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']
)
# Tetapkan titik akhir layanan.
config.endpoint = f'ecs-cn-hangzhou.aliyuncs.com'
client = OpenApiClient(config)
params = open_api_models.Params(
style='RPC', # Gaya API.
version='2014-05-26', # Nomor versi API.
action='DescribeInstanceTypeFamilies', # Nama API.
method='POST', # Metode permintaan.
pathname='/', # JALUR API. Jalur default untuk API RPC adalah "/".
protocol='HTTPS', # Protokol API.
auth_type='AK',
req_body_type='json', # Format konten badan permintaan.
body_type='json' # Format konten badan respons.
)
query = {'RegionId': 'cn-hangzhou'}
# Buat objek permintaan API.
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(query),
)
# Buat objek opsi waktu proses.
runtime = util_models.RuntimeOptions()
# Panggil API dan cetak responsnya.
response = client.call_api(params, request, runtime)
# Nilai kembali adalah Map. Anda dapat memperoleh tiga jenis data dari Map: body, headers, dan statusCode (kode status HTTP).
print(response)
@staticmethod
async def main_async():
"""
Fungsi utama asinkron, yang menunjukkan cara memanggil API Alibaba Cloud secara asinkron.
"""
# Peroleh Pasangan Kunci Akses dari variabel lingkungan.
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']
)
# Tetapkan titik akhir layanan.
config.endpoint = f'ecs-cn-hangzhou.aliyuncs.com'
client = OpenApiClient(config)
params = open_api_models.Params(
style='RPC', # Gaya API.
version='2014-05-26', # Nomor versi API.
action='DescribeInstanceTypeFamilies', # Nama API.
method='POST', # Metode permintaan.
pathname='/', # JALUR API.
protocol='HTTPS', # Protokol API.
auth_type='AK',
req_body_type='json', # Format konten badan permintaan.
body_type='json' # Format konten badan respons.
)
query = {'RegionId': 'cn-hangzhou'}
# Buat objek permintaan API.
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(query),
)
# Buat objek opsi waktu proses.
runtime = util_models.RuntimeOptions()
# Lakukan panggilan API asinkron.
await client.call_api_async(params, request, runtime)
if __name__ == '__main__':
Sample.main()
Contoh: Panggil operasi API bergaya RESTful (gaya ROA)
Dalam contoh ini, operasi DescribeClustersV1 dari Container Service for Kubernetes (ACK) dipanggil untuk menunjukkan cara melakukan panggilan generik suatu operasi.
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:
# Peroleh ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
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(
# Nama API.
action='DescribeClustersV1',
# Versi API.
version='2015-12-15',
# Protokol API.
protocol='HTTPS',
# Metode HTTP API.
method='GET',
auth_type='AK',
style='ROA',
# JALUR API. Untuk API ROA, ambil jalur sumber dari data.path dalam metadata OpenAPI.
pathname=f'/api/v1/clusters',
# Format konten badan permintaan.
req_body_type='json',
# Format konten badan respons.
body_type='json'
)
# parameter query
queries = {'name': 'cluster-demo'}
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(queries)
)
# opsi waktu proses
runtime = util_models.RuntimeOptions()
# Nilai kembali adalah Map. Anda dapat memperoleh tiga jenis data dari Map: badan respons, header respons, dan kode status HTTP.
response = client.call_api(params, request, runtime)
print(response)
@staticmethod
async def main_async() -> None:
# Peroleh ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
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(
# Nama API.
action='DescribeClustersV1',
# Versi API.
version='2015-12-15',
# Protokol API.
protocol='HTTPS',
# Metode HTTP API.
method='GET',
auth_type='AK',
style='ROA',
# JALUR API.
pathname=f'/api/v1/clusters',
# Format konten badan permintaan.
req_body_type='json',
# Format konten badan respons.
body_type='json'
)
# parameter query
queries = {'name': 'cluster-demo'}
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(queries)
)
# opsi waktu proses
runtime = util_models.RuntimeOptions()
# Nilai kembali adalah Map. Anda dapat memperoleh tiga jenis data dari Map: badan respons, header respons, dan kode status HTTP.
await client.call_api_async(params, request, runtime)
if __name__ == '__main__':
Sample.main()