Alibaba Cloud SDK V1.0 untuk Python mendukung pemanggilan API generik. Dokumen ini menjelaskan cara melakukan pemanggilan generik menggunakan Alibaba Cloud SDK V1.0 untuk Python.
Karakteristik
Ringan: Anda dapat menggunakan Alibaba Cloud SDK V1.0 untuk Python untuk memanggil semua operasi API hanya dengan menginstal
aliyun-python-sdk-core, tanpa perlu menginstal SDK untuk setiap layanan.Iterasi cepat dan kompatibilitas: Jika layanan cloud tidak menyediakan SDK, atau SDK belum diperbarui untuk operasi API terbaru, Anda dapat melakukan pemanggilan generik. Dengan cara ini, Anda dapat memanggil operasi API terbaru tanpa menunggu pembaruan SDK.
Untuk informasi lebih lanjut, lihat Pemanggilan generik dan spesifik.
Catatan penggunaan
Sebelum melakukan pemanggilan generik, peroleh dan tentukan metadata yang diperlukan secara manual, termasuk versi API, URL permintaan, dan tipe parameter. Untuk informasi lebih lanjut, lihat Metadata API.
Instal pustaka inti Alibaba Cloud SDK V1.0 untuk Python
Jalankan perintah berikut di terminal Anda untuk menginstal pustaka inti Alibaba Cloud SDK V1.0 untuk Python:
pip install aliyun-python-sdk-corePanggil operasi API
Inisialisasi klien permintaan
Dalam paket aliyunsdkcore, buat modul client untuk menginisialisasi klien permintaan, dan gunakan client untuk memanggil operasi API. Dalam contoh ini, sepasang AccessKey digunakan untuk menginisialisasi klien permintaan. Untuk informasi lebih lanjut, lihat Kelola kredensial akses.
Untuk mencegah kebocoran AccessKey, Anda dapat mencatat pasangan AccessKey dalam variabel lingkungan. Untuk informasi lebih lanjut, lihat Konfigurasi variabel lingkungan di Linux, macOS, dan Windows.
import os
from aliyunsdkcore.client import AcsClient
# Gunakan sepasang AccessKey untuk langsung menginisialisasi klien permintaan.
client = AcsClient(
os.environ['ALIYUN_ACCESS_KEY_ID'],
os.environ['ALIYUN_ACCESS_KEY_SECRET'],
region_id='cn-hangzhou',
# verify=False # Nonaktifkan verifikasi sertifikat SSL.
# proxy={'http': 'http://127.0.0.1:9898'}, # Konfigurasikan proxy.
# proxy={'https': 'http://<user>:<password>@127.0.0.1:8989'},
connect_timeout=10, # Konfigurasikan periode timeout untuk permintaan koneksi.
timeout=15 # Konfigurasikan periode timeout untuk permintaan baca.
)Konfigurasikan informasi operasi API dan parameter permintaan
Gunakan CommonRequest untuk mengonfigurasi parameter permintaan umum dan parameter spesifik operasi untuk operasi API. Untuk informasi lebih lanjut tentang parameter permintaan umum, lihat Pengaturan lanjutan.
Modul request digunakan untuk mengonversi metadata API, seperti nomor versi, URL, dan tipe parameter, menjadi permintaan HTTP yang valid melalui proses konfigurasi permintaan standar, lalu mengembalikan data respons asli. Bagaimana parameter dilewatkan ditentukan oleh gaya dan desain API.
Parameter spesifik operasi
Cara parameter permintaan dilewatkan ditentukan oleh metadata operasi API. Sebagai contoh, operasi API DescribeInstanceStatus didefinisikan sebagai {"name":"RegionId","in":"query",...}} dalam metadata. Dalam hal ini, "in":"query" menunjukkan bahwa ID wilayah (RegionId) harus dilewatkan dalam putQueryParameter.
Deskripsi | Cara parameter dilewatkan |
| dd_query_param(self, k, v) Catatan Untuk menentukan satu set pasangan kunci-nilai, gunakan format berikut: dd_query_param("key.1","value1"); add_query_param("key.2","value2");... |
| add_body_params(self, k, v) Catatan Jika parameter permintaan bukan bertipe string, Anda harus mengonversi nilai parameter menjadi string JSON. |
Unggah file | set_content(self, content) Catatan Tetapkan parameter |
# 2. Buat objek CommonRequest dan konfigurasikan informasi dasar serta parameter permintaan operasi API.
request = CommonRequest()
# 2.1 Konfigurasikan parameter permintaan umum.
request.set_domain('ecs-cn-hangzhou.aliyuncs.com') # Titik akhir API.
request.set_version('2014-05-26') # Nomor versi API.
request.set_action_name('DescribeInstanceStatus') # Nama operasi API. Saat Anda memanggil operasi API bergaya RPC, Anda harus mengonfigurasi set_action_name() untuk menentukan nama operasi API.
request.set_method('POST') # Metode permintaan operasi API.
request.set_protocol_type('HTTPS') # Protokol permintaan. Nilai valid: HTTP dan HTTPS. Kami sarankan Anda menggunakan HTTPS.
# request.set_uri_pattern('/') # Jalur sumber daya, yang diperlukan oleh operasi API bergaya ROA. Jangan konfigurasikan parameter ini untuk operasi API bergaya RPC.
# 2.2 Konfigurasikan parameter permintaan spesifik operasi.
# Skenario 1: Tentukan parameter query dalam add_query_param(self, k, v).
InstanceIds = [
"i-bp1axhql4dqXXXXXXXX",
"i-bp124uve8zqXXXXXXXX"
]
for depth1 in range(len(InstanceIds)):
request.add_query_param('InstanceId.' + str(depth1 + 1), InstanceIds[depth1])
request.add_query_param('PageNumber', '1')
request.add_query_param('PageSize', '30')
# Skenario 2: Tentukan parameter body dalam add_body_params(self, k, v).
# request.add_body_params('key1', 'value1')
# request.add_body_params('key2', 'value2')
# request.add_body_params('key3', 'value3')
# Skenario 3: Gunakan set_content(self, content) untuk mengunggah file, dan tetapkan content ke larik byte.
# file_path = "<FILE_PATH>" # Ganti <FILE_PATH> dengan jalur file sebenarnya.
# with open(file_path, 'rb') as file:
# Baca konten gambar sebagai larik byte.
# ByteArray = file.read()
# request.set_content(ByteArray)Ajukan permintaan
Gunakan client untuk memanggil fungsi do_action_with_exception. Gunakan instance CommonRequest untuk menentukan parameter permintaan.
# Ajukan permintaan.
response = client.do_action_with_exception(request)
# Jika respons bertipe byte, ID permintaan dan parameter respons dikembalikan.
print(f"response:\n{response}")
# Parse respons dalam format JSON.
response_json = json.loads(response.decode('utf-8')) # Konversi respons ke kamus Python.
print("RequestId:", response_json["RequestId"]) # ID permintaan.
Kode contoh
Contoh: Panggil operasi API bergaya RPC
Contoh berikut menunjukkan cara memanggil operasi API DescribeInstanceStatus dari Elastic Compute Service (ECS).
import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
class Sample:
@staticmethod
def main():
# Gunakan sepasang AccessKey untuk langsung menginisialisasi klien permintaan.
client = AcsClient(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
'cn-hangzhou')
# Buat objek permintaan.
request = CommonRequest()
request.set_domain('ecs-cn-hangzhou.aliyuncs.com') # Titik akhir API.
request.set_version('2014-05-26') # Nomor versi API.
request.set_action_name('DescribeRegions') # Nama operasi API. Saat Anda memanggil operasi API bergaya RPC, Anda harus mengonfigurasi set_action_name() untuk menentukan nama operasi API.
request.set_method('POST') # Metode permintaan operasi API.
request.set_protocol_type('HTTPS') # Protokol permintaan. Nilai valid: HTTP dan HTTPS. Kami sarankan Anda menggunakan HTTPS.
InstanceIds = [
"i-bp1axhql4dqXXXXXXXX",
"i-bp124uve8zqXXXXXXXX"
]
for depth1 in range(len(InstanceIds)):
request.add_query_param('InstanceId.' + str(depth1 + 1), InstanceIds[depth1])
request.add_query_param('PageNumber', '1')
request.add_query_param('PageSize', '30')
# Ajukan permintaan dan tangani respons.
response = client.do_action_with_exception(request)
print(response)
if __name__ == '__main__':
Sample.main()
Contoh: Panggil operasi API bergaya RESTful (ROA)
Dalam contoh ini, operasi DescribeClustersV1 dari Container Service for Kubernetes (ACK) dipanggil untuk menunjukkan cara membuat pemanggilan generik operasi.
import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
class Sample:
@staticmethod
def main():
# Gunakan sepasang AccessKey untuk langsung menginisialisasi klien permintaan.
client = AcsClient(
os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
'cn-hangzhou')
# Buat objek permintaan.
request = CommonRequest()
request.set_domain('cs.aliyuncs.com') # Titik akhir operasi API.
request.set_version('2015-12-15') # Nomor versi API.
request.set_uri_pattern(
f'/api/v1/clusters') # URL operasi API. Saat Anda memanggil operasi API bergaya ROA, Anda harus mengonfigurasi set_uri_pattern() untuk menentukan URL lengkap operasi API. Anda dapat memperoleh URL operasi API dari metadata API.
request.set_method('GET') # Metode permintaan operasi API.
request.add_query_param('name', 'cluster-demo') # Konfigurasikan parameter permintaan.
# Ajukan permintaan dan tangani respons.
response = client.do_action_with_exception(request)
print(response)
if __name__ == '__main__':
Sample.main()
FAQ
Apa yang dapat saya lakukan jika pesan kesalahan "Error:MissingParameter The input parameter "AccessKeyId" that is mandatory for processing this request is not supplied" dikembalikan?
Penyebab: Pasangan AccessKey tidak dikonfigurasi dengan benar.
Solusi:
Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah dikonfigurasi.
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%Jika pasangan AccessKey yang valid dikembalikan, variabel lingkungan telah dikonfigurasi dengan benar. Jika tidak ada pasangan AccessKey atau pasangan AccessKey tidak valid yang dikembalikan, konfigurasikan variabel lingkungan sesuai kebutuhan. Untuk informasi lebih lanjut, lihat Konfigurasi variabel lingkungan di Linux, macOS, dan Windows.
Periksa kesalahan terkait pasangan AccessKey dalam kode.
Permintaan kesalahan sampel:
AccessKeyId = os.environ['yourAccessKeyID'], AccessKeySecret = os.environ['yourAccessKeySecret']CatatanDalam permintaan kesalahan sampel sebelumnya, nilai input os.environ digunakan sebagai pasangan AccessKey. Namun, fungsi ini digunakan untuk membaca nilai dari variabel lingkungan. Setelah Anda menentukan nama variabel lingkungan sebagai ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET di mesin Anda, os.environ dapat membaca nilai dari variabel lingkungan.
Permintaan sukses sampel:
os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
Apa yang dapat saya lakukan jika pesan kesalahan "aliyunsdkcore.acs_exception.exceptions.ServerException: HTTP Status: 400 Error:MissingParameter The input parameter "Timestamp" that is mandatory for processing this request is not supplied" dikembalikan?
Penyebab: Parameter uri_pattern dikonfigurasi dalam parameter permintaan umum operasi API bergaya RPC.
Solusi: Hapus parameter uri_pattern dari parameter permintaan umum.