يتيح AWS SDK لـ Delphi Delphi من Delphi العمل بسهولة مع خدمات Amazon Web Services وبناء حلول قابلة للتطوير مع Amazon SES و Amazon SQS والمزيد. إنه SDK غير رسمي يعتمد على AWS SDK الرسمي لـ .NET. يمكن العثور على مشاريع العينة في AWS SDK لمستودع عينات Delphi.
هذه هي قائمة خدمات AWS التي تدعمها حاليًا SDK. سيتم إضافة المزيد مع مرور الوقت:
يرجى استخدام صفحة مشكلات github للإبلاغ عن المشكلات أو طلب ميزات.
يدعم AWS SDK لـ Delphi جميع إصدارات Delphi الحديثة منذ Delphi 10.3 Rio (IE ، Delphi 10.4 Sydney ، Delphi 11 ، Delphi 12 ، إلخ) ويدعم جميع المنصات المتوفرة في إصدارات Delphi هذه: Windows و Linux و Android و iOS و Macos.
لا تتطلب AWS SDK for Delphi أي مكتبة طرف ثالثة ، فهي مكتوب برمز Delphi الأصلي بنسبة 100 ٪ وتعمل على جميع SKU من إصدارات Delphi المدعومة.
يمكنك تثبيت المكتبة لإجراء تثبيت Manuall.
لكل منصة مختلفة تريد تثبيت SDK:
AWSPackages.groupproj Group في Delphi IDE.<sdk_folder>/packages/d12/Win32/Release إلى Delphi 12 ، مسار مكتبة Win32. كل خدمة ويب Amazon لديها مخطط خاص بها وحزمة اسم الوحدة ، وهو AWS<service>.dproj و AWS.<service>.*.pas ، على التوالي. على سبيل المثال ، بالنسبة لـ Amazon SQS (خدمة قائمة انتظار بسيطة) ، فإن اسم الحزمة هو AWSSQS.dproj واسم الوحدة هو AWS.SQS.pas (وجميع الوحدات الأخرى في الحزمة تتبع نفس النمط ، مثل AWS.SQS.Client.pas أو AWS.SQS.ClientIntf.pas .
ستكون معظم الأنواع التي تحتاجها في الوحدة الرئيسية ، والتي على سبيل المثال هي AWS.SQS . هذه هي الوحدة الوحيدة التي ستحتاج إلى استخدام معظم الوظائف. من هناك يمكنك الوصول إلى جميع عمليات API المتاحة. تستقبل كل طريقة تشغيل واجهة طلب وإرجاع واجهة استجابة.
باختصار ، هذه هي عملية تنفيذ طلبات API:
AWS.SQS ؛TAmazonSQSClient ) ؛تتلقى الأمثلة التالية رسالة من قائمة انتظار SQS وإخراج معرف وجسم كل رسالة مستلمة:
// 1. Use main unit
uses AWS.SQS;
procedure WriteMessageIds ( const QueueUrl: string);
var
Client: IAmazonSQS;
Response: IReceiveMessageResponse;
Request: IReceiveMessageRequest;
Msg: AWS.SQS.TMessage;
begin
// 2. Instantiate client interface
Client := TAmazonSQSClient.Create;
// 3. Create and fill the request
Request := TReceiveMessageRequest.Create;
Request.QueueUrl := QueueUrl;
// 4. Call operation method passing the request to receive the response;
Response := Client.ReceiveMessage(Request);
// 5. Process the response
for Msg in Response.Messages do
begin
WriteLn(Msg.MessageId);
WriteLn(Msg.Body);
WriteLn;
end ;
end ;يرسل المثال التالي رسالة بريد إلكتروني إلى العنوان المحدد باستخدام الموضوع والرسالة المحددة:
// 1. Use main unit
uses AWS.SES;
procedure SendEmail ( const Recipient, Subject, Content: string);
var
Client: IAmazonSimpleEmailService;
Request: ISendEmailRequest;
Response: ISendEmailResponse;
begin
// 2. Instantiate client interface
Client := TAmazonSimpleEmailServiceClient.Create;
// 3. Create and fill the request
Request := TSendEmailRequest.Create;
Request.Source := SenderEmail;
Request.Destination := TDestination.Create;
Request.Destination.ToAddresses.Add(Recipient);
Request.Message := TMessage.Create(
TContent.Create(Subject),
TBody.Create(TContent.Create(Content)));
// 4. Call operation method passing the request to receive the response;
Response := Client.SendEmail(Request);
// 5. Process the response
WriteLn(Response.MessageId);
end ;في جميع كائنات الطلب والقوائم والقواميس تم إنشاء مثيل لها بالفعل ، في حين أن الكائنات الأخرى المرتبطة بها ليست كذلك. لا تحتاج إلى تدمير أي واجهة أو كائن تم تمريره أو استلامه من العمليات ، أو إضافته إلى الطلبات. تحتوي بعض العمليات على طرق زائدة من الحمل التي تتلقى عددًا أقل من المعلمات الخام بدلاً من كائن الطلب الكامل ، للاستخدام الأكثر بساطة.
لمزيد من المعلومات حول العمليات المتاحة ، يرجى الرجوع إلى وثائق API لخدمة Amazon التي تحاول استخدامها. أو بالطبع ، استخدم إكمال رمز Delphi للعثور على جميع الطرق المتاحة في كل عميل خدمة.
يمكنك استخدام Amazon SNS بالكامل: خدمة إشعار بسيطة من AWS SDK لـ Delphi. الوحدة الرئيسية هي AWS.SNS . يمكنك العثور على معلومات أكثر تفصيلاً في هذه المقالة حول استخدام Amazon SNS مع AWS SDK لـ Delphi ، وبالطبع يمكنك الرجوع إلى Amazon SNS API Reference نفسها.
إنشاء العميل:
var
Client: IAmazonSimpleNotificationService;
begin
Client := TAmazonSimpleNotificationServiceClient.Create;
end ;احصل على ARN لجميع الموضوعات الموجودة:
function GetAllTopics (AllTopics: TList<string>);
var
ListRequest: IListTopicsRequest;
ListResponse: IListTopicsResponse;
Topic: TTopic;
begin
ListRequest := TListTopicsRequest.Create;
repeat
ListResponse := Client.ListTopics(ListRequest);
for Topic in ListResponse.Topics do
AllTopics.Add(Topic.TopicArn);
ListRequest.NextToken := ListResponse.NextToken;
until ListRequest.NextToken = ' ' ;
end ;قم بإنشاء موضوع ، واحصل على ARN ، وتعيين/الحصول على سماته ، وحذف الموضوع:
var
Response: ICreateTopicResponse;
TopicArn: string;
SetAttrRequest: ISetTopicAttributesRequest;
GetAttrResponse: IGetTopicAttributesResponse;
begin
// create new topic and get ARN
Response := Client.CreateTopic( ' test-name ' );
TopicArn := Response.TopicArn;
// set topic attribute
SetAttrRequest := TSetTopicAttributesRequest.Create(TopicArn, ' DisplayName ' , ' My topic ' );
Client.SetTopicAttributes(SetAttrRequest);
// verify topic attributes
GetAttrResponse := Client.GetTopicAttributes(TopicArn);
DisplayName := GetAttrResponse.Attributes[ ' DisplayName ' ]);
// delete new topic
Client.DeleteTopic(TopicArn);
end ;اشترك في موضوع في قائمة انتظار SQS عبر عنوان URL في قائمة الانتظار ، مع إضافة الأذونات المناسبة:
function SubscribeQueue (Client: IAmazonSimpleNotificationService;
const TopicArn: string; SQSClient: IAmazonSQS; const SQSQueueUrl: string): string;
var
GetAttrResponse: IGetQueueAttributesResponse;
GetAttrRequest: IGetQueueAttributesRequest;
SQSQueueArn: string;
Policy: TPolicy;
PolicyStr: string;
TopicArn: string;
SetAttrRequest: ISetQueueAttributesRequest;
begin
// Get the queue's existing policy and ARN
GetAttrRequest := TGetQueueAttributesRequest.Create;
GetAttrRequest.QueueUrl := SQSQueueUrl;
GetAttrRequest.AttributeNames.Add(TSQSConsts.ATTRIBUTE_ALL);
GetAttrResponse := SQSClient.GetQueueAttributes(GetAttrRequest);
SQSQueueArn := GetAttrResponse.Attributes[ ' QueueArn ' ];
if GetAttrResponse.Attributes.TryGetValue( ' Policy ' , PolicyStr) then
Policy := TPolicy.FromJson(PolicyStr)
else
Policy := TPolicy.Create;
try
SetLength(Result, 0 );
if not HasSQSPermission(Policy, TopicArn, SQSQueueArn) then
AddSQSPermission(Policy, TopicArn, SQSQueueArn);
Result := Client.Subscribe(TopicArn, ' sqs ' , SQSQueueArn).SubscriptionArn;
SetAttrRequest := TSetQueueAttributesRequest.Create;
SetAttrRequest.QueueUrl := SQSQueueUrl;
SetAttrRequest.Attributes.Add( ' Policy ' , Policy.ToJson);
SQSClient.SetQueueAttributes(SetAttrRequest);
finally
Policy.Free;
end ;
end ;اشترك في موضوع البريد الإلكتروني وإرجاع الاشتراك ARN:
function SubscribeTopic ( const TopicArn, EmailAddress: string): string;
var
Latest: TDateTime;
Response: IListSubscriptionsByTopicResponse;
begin
// subscribe an email address to the topic
Client.Subscribe(TSubscribeRequest.Create(TopicArn, ' email ' , EmailAddress));
// wait until subscription has been confirmed, wait time for two minutes
Latest := IncMinute(Now, 2 );
while Now < Latest do
begin
// get subscriptions for topic
Response := Client.ListSubscriptionsByTopic(TopicArn);
// test whether the subscription has been confirmed
if Response.Subscriptions[ 0 ].SubscriptionArn <> ' PendingConfirmation ' then
Exit(Response.Subscriptions[ 0 ].SubscriptionArn);
// wait
Sleep( 15 * 1000 );
end ;
end ;نشر رسالة إلى موضوع:
// publish a message to the topic
Client.Publish(TPublishRequest.Create(TopicArn, ' Test message ' , ' Subject ' ));حذف الاشتراك:
// delete the subscription
Client.Unsubscribe(SubArn);تحليل رسالة SNS من JSON والتحقق من صحة التوقيع:
function GetMessage ( const Json: string): AWS.SNS.Message.TMessage;
begin
Result := AWS.SNS.Message.TMessage.ParseMessage(Json);
if not Result.IsMessageSignatureValid then
raise Exception.Create( ' Invalid message: bad signature ' );
end ;أرسل رسالة SMS إلى رقم الهاتف:
var
Client: IAmazonSimpleNotificationService;
Request: IPublishRequest;
begin
Client := TAmazonSimpleNotificationServiceClient.Create;
Request := TPublishRequest.Create;
Request.PhoneNumber := ' +184298765321 ' ;
Request.Message := ' Hello from AWS SDK for Delphi! ' ;
Client.Publish(Request);
end ;AWS SDK لبحث Delphi عن بيانات الاعتماد بترتيب معين وتستخدم أول مجموعة متوفرة للتطبيق الحالي.
TAWSConfigs.AWSProfileName .AWS_PROFILE . تتحكم خاصية TAWSConfigs.AWSProfilesLocation في كيفية العثور على ملفات الاعتماد AWS لـ Delphi. إذا كان فارغًا ، فإنه يبحث في ملف بيانات اعتماد AWS المشترك في الموقع الافتراضي. إذا لم يكن الملف الشخصي موجودًا ، فبحث ~/.aws/config (linux أو macOS) أو %USERPROFILE%.awsconfig إذا كان TAWSConfigs.AWSProfilesLocation يحتوي على المسار إلى ملف في تنسيق ملفات اعتماد AWS ، فإن SDK يبحث عن بيانات الاعتماد فقط في الملف المحدد للحصول على ملف تعريف مع الاسم المحدد.
يرجى الرجوع إلى وثائق AWS للحصول على مزيد من المعلومات حول إعدادات ملفات بيانات الاعتماد والملفات التعريف المسمى.
يمكنك ببساطة تمرير معرف مفتاح الوصول والمفتاح السري مباشرة في مُنشئ العميل:
Client := TAmazonSQSClient.Create(myAccessKey, mySecretKey);على الرغم من أنه يوصى باستخدام ملف تعريف بيانات الاعتماد لأنه من الأسهل إدارته وتوافقه أيضًا مع واجهة سطر أوامر AWS.
هام: لا تقم بتشغيل اختبارات التكامل على حساب الإنتاج.
يمكن العثور على اختبارات التكامل في مشروع AWSTESTS . تفترض هذه الاختبارات أنه تم تكوين ملف تعريف افتراضي لبيانات الاعتماد. يمكنك إعداد بيانات الاعتماد باستخدام ملفات التكوين أو الملفات الشخصية أو متغيرات البيئة.
تم تصميم الاختبارات لإنشاء وحذف الموارد اللازمة للاختبار ولكن من المهم الحفاظ على بياناتك آمنة. لا تقم بتشغيل هذه الاختبارات على الحسابات التي تحتوي على بيانات الإنتاج أو الموارد. نظرًا لأن موارد AWS يتم إنشاؤها وحذفها أثناء إجراء هذه الاختبارات ، يمكن أن تحدث الرسوم. لتقليل الرسوم التي حدثت من خلال إجراء الاختبارات ، تركز على موارد AWS التي لها الحد الأدنى من التكلفة.
تم إلهام بعض الفصول الداخلية من OpenSSL من مستودع Delphi-OpenSSL: https://github.com/lminuti/Delphi-Openssl.
تعتمد Unit AWS.Json.Helpers على Uwe Raabe's Rest-Json-Helpers: https://github.com/uweraabe/rest-json-helpers.
AWS SDK for Delphi تم توزيع الرمز العادل بموجب Apache 2.0 مع ترخيص Commons Clause .