Alibaba Cloud SDK, uygulamanızdan OpenAPI işlemlerini çağırırken geliştirmeyi ve özellik entegrasyonunu basitleştirir. Bu konuda SDK kurulumu, erişim kimlik bilgilerinin yapılandırılması ve SDK kullanımı dahil olmak üzere eksiksiz entegrasyon akışı açıklanmaktadır. Ayrıca dosya yüklemeleri için Advance API ve sıkça sorulan sorular ele alınmaktadır.
Önkoşullar
Python — Python 3.7 veya sonraki bir sürüm.
AccessKey çifti — Alibaba Cloud OpenAPI çağrıları yapmak için bir AccessKey çifti gereklidir. AccessKey çiftiyle ilişkili Resource Access Management (RAM) kullanıcısının hedef API işlemlerini çağırma izinlerine sahip olması gerekir. Aksi takdirde çağrılar "You are not authorized to perform this operation" hatasıyla başarısız olur.
SDK paketleri — Bu konudaki ana örnekler
alibabacloud_dysmsapi20180501,alibabacloud_tea_openapivealibabacloud_tea_utilpaketlerini gerektirir.
SDK Kurulumu
SDK Center, her ürün için SDK kurulum yöntemini sağlar. SDK'yı edinmek ve kurmak için:
SDK Center adresine gidin.
API'lerini çağırmak istediğiniz ürünü seçin; örneğin Short Message Service (SMS).
Installation sayfasında SDK Generation için ve All Languages için Python seçeneğini belirleyin.
Getting Started sekmesinde Short Message Service (SMS) için SDK kurulum yöntemini bulun ve SDK'yı yükleyin.
Erişim Kimlik Bilgilerini Yapılandırma
Alibaba Cloud OpenAPI çağrıları genellikle erişim kimlik bilgileri gerektirir. Yaygın kimlik bilgisi türleri AccessKey (AK) ve Security Token Service (STS) belirteçleridir. Kimlik bilgilerinin sızmasını önlemek amacıyla bunları ortam değişkenlerinde saklamak yaygın bir uygulamadır. Güvenlik en iyi uygulamaları hakkında daha fazla bilgi için bkz. Erişim kimlik bilgilerinin güvenli kullanımı.
Bu konuda örnek olarak bir AccessKey çifti kullanılmaktadır. Aşağıdaki örnekte ALIBABA_CLOUD_ACCESS_KEY_ID ve ALIBABA_CLOUD_ACCESS_KEY_SECRET ortam değişkenleri kullanılır:
Linux ve macOS'ta Yapılandırma
Linux ve macOS'ta Ortam Değişkenlerinde Alibaba Cloud AccessKey Ayarlama
Bu bölümde örnek olarak ALIBABA_CLOUD_ACCESS_KEY_ID ve ALIBABA_CLOUD_ACCESS_KEY_SECRET ortam değişkenleri kullanılmaktadır. İhtiyaçınıza göre değişken adlarını değiştirebilirsiniz; örneğin OSS_ACCESS_KEY_ID ve OSS_ACCESS_KEY_SECRET.
Ortam değişkenlerini export komutunu kullanarak yapılandırın:
Export komutuyla ayarlanan geçici bir ortam değişkeni yalnızca geçerli oturum için geçerlidir. Oturum sonlandığında değişken temizlenir. Uzun süreli saklama (LTR) için export komutunu işletim sisteminizin başlangıç yapılandırma dosyasına ekleyin.
-
AccessKey ID değerini yapılandırın ve Enter tuşuna basın.
# Replace yourAccessKeyID with your AccessKey ID. export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID -
AccessKey secret değerini yapılandırın ve Enter tuşuna basın.
# Replace yourAccessKeySecret with your AccessKey secret. export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret -
Yapılandırmayı doğrulayın.
echo $ALIBABA_CLOUD_ACCESS_KEY_IDkomutunu çalıştırın. Komut doğru AccessKey ID değerini döndürürse yapılandırma başarılıdır.
Windows'ta Yapılandırma
Windows'ta Ortam Değişkenlerinde Alibaba Cloud AccessKey Ayarlama
Bu bölümde örnek olarak ALIBABA_CLOUD_ACCESS_KEY_ID ve ALIBABA_CLOUD_ACCESS_KEY_SECRET ortam değişkenleri kullanılmaktadır. İhtiyaçınıza göre değişken adlarını değiştirebilirsiniz; örneğin OSS_ACCESS_KEY_ID ve OSS_ACCESS_KEY_SECRET.
Grafiksel Kullanıcı Arabirimini (GUI) Kullanma
-
Yordam
Aşağıdaki adımlarda Windows 10'da GUI kullanılarak ortam değişkenlerinin nasıl ayarlanacağı açıklanmaktadır.
Masaüstünüzde This PC öğesine sağ tıklayın ve Properties > Advanced system settings > Environment Variables > New seçeneklerini System variables veya User variables altında seçin. Ardından yapılandırmayı tamamlayın.
Değişken
Örnek değer
AccessKey ID
Değişken adı: ALIBABA_CLOUD_ACCESS_KEY_ID
Değişken değeri: yourAccessKeyID
AccessKey secret
Değişken adı: ALIBABA_CLOUD_ACCESS_KEY_SECRET
Değişken değeri: yourAccessKeySecret
-
Yapılandırmayı test etme
Start öğesine tıklayın (veya Win+R klavye kısayolunu kullanın), Run seçeneğine tıklayın,
cmdgirin ve ardından komut istemini açmak için OK seçeneğine tıklayın (veya Enter tuşuna basın).echo %ALIBABA_CLOUD_ACCESS_KEY_ID%veecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%komutlarını çalıştırın. Komutlar doğru AccessKey değerini döndürürse yapılandırma başarılıdır.
Komut İstemini (CMD) Kullanma
-
Yordam
Komut istemini yönetici olarak açın ve sisteme yeni ortam değişkenleri eklemek için aşağıdaki komutları çalıştırın.
setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M/Mparametresi bir sistem ortam değişkenini belirtir. Kullanıcı ortam değişkeni ayarlarken bu parametreyi atlayabilirsiniz. -
Yapılandırmayı test etme
Start öğesine tıklayın (veya Win+R klavye kısayolunu kullanın), Run seçeneğine tıklayın,
cmdgirin ve ardından komut istemini açmak için OK seçeneğine tıklayın (veya Enter tuşuna basın).echo %ALIBABA_CLOUD_ACCESS_KEY_ID%veecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%komutlarını çalıştırın. Komutlar doğru AccessKey değerini döndürürse yapılandırma başarılıdır.
Windows PowerShell Kullanma
PowerShell'de tüm yeni oturumlar için geçerli olacak şekilde yeni ortam değişkenleri ayarlayabilirsiniz:
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::User)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::User)
Tüm kullanıcılar için ortam değişkenleri ayarlamak üzere yönetici izinlerine sahip olmanız gerekir:
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::Machine)
Yalnızca geçerli oturum için geçerli olacak geçici ortam değişkenleri ayarlayabilirsiniz:
$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "yourAccessKeyID"
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "yourAccessKeySecret"
PowerShell'de Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID ve Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET komutlarını çalıştırın. Komutlar doğru AccessKey değerini döndürürse yapılandırma başarılıdır.
Ortam değişkenlerini yapılandırdıktan sonra yeni ayarların etkili olması için entegre geliştirme ortamları (IDE'ler) gibi geliştirme araçlarınızı veya hizmetleri yeniden başlatmanız gerekebilir.
SDK Kullanımı
Standart çağrı akışı çoğu senaryo için geçerlidir. Bazı cloud ürünleri standart OpenAPI işlemleri aracılığıyla doğrudan dosya yüklemelerini desteklemez. Bu ürünlere dosya yüklemek için Advance API kullanın. Bkz. Advance API ile dosya yükleme.
Bu konuda örnek olarak SendMessageToGlobe Short Message Service (SMS) işlemi kullanılmaktadır. SendMessageToGlobe işlemine ilişkin API referansı için bkz. SendMessageToGlobe.
İstek istemcisini başlatma
Tüm OpenAPI çağrıları SDK tarafından sağlanan istek istemcisi (Client) aracılığıyla yapılır. Herhangi bir OpenAPI işlemi çağırmadan önce istek istemcisini başlatın. İstek istemcisi birden çok başlatma yöntemini destekler. Bu örnekte bir AccessKey çifti kullanılmaktadır. Daha fazla başlatma yöntemi için bkz. Erişim kimlik bilgilerini yönetme.
İstemci nesneleri iş parçacığı güvenlidir. Örneğin, çok iş parçacıklı bir ortamda tek bir Dysmsapi20180501Client örneğini güvenle paylaşabilirsiniz. Her iş parçacığı için ayrı bir örnek oluşturmanız gerekmez.
İstemci nesnelerini sık sık oluşturmayın. Sık oluşturmak kaynak israfına neden olur ve performansı düşürür. (Önerilen) İstemciyi sarmak için singleton desenini kullanın ve uygulama yaşam döngüsü boyunca aynı erişim kimlik bilgileri ve uç nokta için yalnızca bir istemci örneğinin başlatıldığından emin olun.
@staticmethod
def create_client() -> Dysmsapi20180501Client:
config = open_api_models.Config(
# Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
# Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
# See https://api.alibabacloud.com/product/Dysmsapi.
config.endpoint = f'dysmsapi.aliyuncs.com'
return Dysmsapi20180501Client(config)
İstek nesnesi oluşturma
Bir OpenAPI işlemi çağrılırken parametreleri iletmek için SDK tarafından sağlanan istek nesnesini kullanın. İstek nesneleri <API operation name>Request biçiminde adlandırılır. İstek parametreleri hakkında daha fazla bilgi için ilgili API belgelerine bakın. Bu örnekte kullanılan API belgeleri için bkz. SendMessageToGlobe.
Bir OpenAPI işlemi istek parametrelerini desteklemiyorsa istek nesnesi oluşturmanız gerekmez. Örneğin, DescribeCdnSubList işlemi istek parametrelerini desteklemez.
# Create a request object and set the required input parameters.
send_message_to_globe_request = dysmsapi_20180501_models.SendMessageToGlobeRequest(
# Replace with the recipient number.
to='<YOUR_NUMBER>',
# Replace with the SMS content.
message='<YOUR_MESSAGE>'
)
İsteği gönderme
(Önerilen) İsteği göndermek için <api_name>_with_options işlevini çağırın; burada <api_name> snake_case biçimindeki OpenAPI adıdır. İşlev iki parametre alır: önceki adımda oluşturulan istek nesnesi ve bir çalışma zamanı seçenekleri nesnesi. Çalışma zamanı seçenekleri nesnesi zaman aşımı ayarları ve proxy ayarları gibi istek davranışını yapılandırır. Daha fazla bilgi için bkz. Gelişmiş Yapılandırmalar.
İstek başarılı olursa işlev bir yanıt nesnesi döndürür. Çağrı sonucunu doğrulamak için yanıtı yazdırın veya günlüğe kaydedin.
Bir OpenAPI işlemi istek parametrelerini desteklemiyorsa isteği gönderirken bir istek nesnesi iletmeniz gerekmez. Örneğin, DescribeCdnSubList işlemini çağırırken yalnızca çalışma zamanı seçeneklerini iletirsiniz.
# Create runtime parameters.
runtime = util_models.RuntimeOptions()
client = create_client()
# Send the request.
client.send_message_to_globe_with_options(send_message_to_globe_request, runtime)
Özel durumları işleme
V2.0 Python SDK özel durumları iki ana türe ayırır:
TeaUnretryableException: Ağ sorunları nedeniyle, ağ yeniden denemeleri maksimum yeniden deneme sayısına ulaştığında oluşturulur.
-
TeaException: Temel olarak sunucu tarafındaki iş hataları için oluşturulur.
Özel durum işleme hakkında daha fazla bilgi için bkz. Özel durum işleme.
Sisteminizin dayanıklılığını ve kararlılığını sağlamak için özel durumları yayma, günlük kaydetme ve kurtarma denemesi yapma gibi uygun önlemler alarak özel durumları düzgün şekilde işleyin.
Tam kod örneği
Aşağıdaki örnek önceki adımları birleştirir: istek istemcisini başlatma, istek nesnesi oluşturma, isteği gönderme ve özel durumları işleme.
API çağrısı örneği
import os
import sys
from typing import List
from alibabacloud_dysmsapi20180501.client import Client as Dysmsapi20180501Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dysmsapi20180501 import models as dysmsapi_20180501_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() -> Dysmsapi20180501Client:
config = open_api_models.Config(
# Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
# Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
# See https://api.alibabacloud.com/product/Dysmsapi.
config.endpoint = f'dysmsapi.aliyuncs.com'
return Dysmsapi20180501Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
client = Sample.create_client()
# Create a request object and set the required input parameters.
send_message_to_globe_request = dysmsapi_20180501_models.SendMessageToGlobeRequest(
# Replace with the recipient number.
to='<YOUR_NUMBER>',
# Replace with the SMS content.
message='<YOUR_MESSAGE>'
)
# Create runtime parameters.
runtime = util_models.RuntimeOptions()
try:
# Send the request.
send_message_to_globe_response = client.send_message_to_globe_with_options(send_message_to_globe_request, runtime)
# Print the API response to verify the result.
print(send_message_to_globe_response)
except Exception as error:
# For demonstration purposes only. Handle exceptions with care and never ignore exceptions in your project.
# The error message.
error_message = getattr(error, 'message', str(error))
print(error_message)
# The diagnostic URL.
print(getattr(error, 'data', {}).get("Recommend"))
UtilClient.assert_as_string(error_message)
if __name__ == '__main__':
Sample.main(sys.argv[1:])
Advance API ile Dosya Yükleme
Image Search ve Visual Intelligence API gibi bazı cloud ürünleri resmi belgelerde açıklanan standart OpenAPI işlemleri aracılığıyla doğrudan dosya yüklemelerini desteklemez. Bu ürünlere dosya yüklemek için cloud ürünü tarafından sağlanan Advance API'sini kullanın. Advance API bir dosya akışı nesnesini kabul eder. Arka planda cloud ürünü yüklenen dosyayı geçici olarak Alibaba Cloud OSS içinde depolar. Varsayılan depolama bölgesi cn-shanghai şeklindedir. Cloud ürünü özelliği sağlamak için dosyayı OSS'ten okur. Aşağıdaki örnekte Alibaba Cloud Visual Intelligence API üzerindeki Face and Body hizmetinin DetectBodyCount API'si kullanılmaktadır.
Alibaba Cloud OSS içinde depolanan geçici dosyalar periyodik olarak temizlenir.
İstek istemcisini başlatmak için
İstek istemcisini başlatırken hem region_id hem de ürün endpoint değerlerini ayarlayın. region_id OSS'teki geçici dosyanın depolama bölgesini belirtir. region_id ayarlanmazsa ürün ve OSS farklı bölgelerde bulunabilir ve bu durum OpenAPI işlemi çağrılırken zaman aşımlarına neden olabilir.
def create_client() -> facebody20191230Client:
config = open_api_models.Config(
# Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set in your code execution environment.
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
# Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set in your code execution environment.
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
# The endpoint and regionId must be set to the same region.
config.region_id = 'cn-shanghai'
config.endpoint = 'facebody.cn-shanghai.aliyuncs.com'
return facebody20191230Client(config)
İstek nesnesi oluşturmak için
Dosya akışını iletmek için bir <OpenAPIName>AdvanceRequest istek nesnesi oluşturun. Parametre adı sabit olarak ImageURLObject şeklindedir.
# Open the file as a binary stream.
with open('<FILE_PATH>', "rb") as f: # Replace with your file path.
# Set request parameters.
detect_body_count_advance_request = facebody_20191230_models.DetectBodyCountAdvanceRequest(
image_urlobject=f,
)
İsteği göndermek için
İsteği göndermek için <apiName>Advance işlevini çağırın; burada <apiName> lower camelCase biçimindeki OpenAPI adıdır.
# Runtime configuration.
runtime = util_models.RuntimeOptions()
client = create_client()
# Send the request.
res = client.detect_body_count_advance(detect_body_count_advance_request, runtime)
Aşağıdaki örnekte Advance API ile dosya yükleme için tam kod gösterilmektedir.
import os
from alibabacloud_facebody20191230 import models as facebody_20191230_models
from alibabacloud_facebody20191230.client import Client as facebody20191230Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util import models as util_models
class Sample:
def __init__(self):
pass
@staticmethod
def create_client() -> facebody20191230Client:
config = open_api_models.Config(
# Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set in your code execution environment.
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
# Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set in your code execution environment.
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
config.region_id = 'cn-shanghai'
config.endpoint = 'facebody.cn-shanghai.aliyuncs.com'
return facebody20191230Client(config)
@staticmethod
def main() -> None:
client = Sample.create_client()
# Open the file as a binary stream.
with open('<FILE_PATH>', "rb") as f: # Replace <FILE_PATH> with your file path.
# Set request parameters.
detect_body_count_advance_request = facebody_20191230_models.DetectBodyCountAdvanceRequest(
image_urlobject=f,
)
runtime = util_models.RuntimeOptions()
try:
# Send the request.
res = client.detect_body_count_advance(detect_body_count_advance_request, runtime)
print(res)
except Exception as error:
# This is for printing and demonstration purposes only. Handle exceptions with care and do not ignore them in your project.
print(error)
if __name__ == '__main__':
Sample.main()
SSS
"You are not authorized to perform this operation"
Neden: AccessKey çiftinizle ilişkili RAM kullanıcısının bu API işlemini çağırma izni yok.
Çözüm: Gerekli OpenAPI izinlerini RAM kullanıcısına verin. Bir RAM kullanıcısına izin verme hakkında daha fazla bilgi için bkz. RAM kullanıcı izinlerini yönetme.
Örneğin, RAM kullanıcısı ilgili izne sahip değilse SendMessageToGlobe işlemi çağrıldığında bu hata döndürülür. Aşağıdakine benzer özel bir izin ilkesi oluşturun ve ilgili izinleri RAM kullanıcısına verin.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "dysms:SendMessageToGlobe",
"Resource": "*"
}
]
}
"SDK.EndpointResolvingError"
Neden: Çağırdığınız OpenAPI işlemi istek istemcisini başlatırken belirtilen uç noktayı desteklemiyor.
Çözüm: Uç nokta yapılandırması kontrol edin, uç noktayı desteklenen bir değerle güncelleyin ve ardından OpenAPI işlemini tekrar çağırın.
AccessKey ile İlgili AttributeError veya KeyError
Bir OpenAPI çağrısı AttributeError: 'AttributeError' object has no attribute 'message' veya KeyError: 'ALIBABA_CLOUD_ACCESS_KEY_ID' hatası bildiriyor.
Neden: AccessKey çifti doğru şekilde iletilmemiş.
Çözüm: İstek istemcisini başlatırken AccessKey çiftinin doğru şekilde iletildiğini kontrol edin. os.environ["XXX"] ifadesinin XXX değerini ortam değişkenlerinden aldığını unutmayın.
SDK kullanırken karşılaştığınız hatalara ilişkin diğer çözümler için bkz. SSS.