بما أنّ Google Ads API تستخدِم Protobuf كتنسيق الحمولة التلقائي، من المهم فهم بعض اصطلاحات Protobuf وأنواعها عند العمل مع واجهة برمجة التطبيقات.
الحقول الاختيارية
تم وضع علامة optional
على العديد من الحقول في Google Ads API. يتيح لك ذلك
التمييز بين الحالات التي يحتوي فيها الحقل على قيمة فارغة، في مقابل الحالات التي لم يُرسِل فيها الخادم قيمة للحقل. تتصرّف هذه الحقول مثل الحقول العادية، إلا أنّها توفّر أيضًا طرقًا إضافية لمحو الحقل والتحقّق مما إذا كان الحقل محدّدًا.
على سبيل المثال، تم وضع علامة على حقل Name
للعنصر Campaign
على أنّه اختياري.
ويمكنك استخدام الطرق التالية للعمل مع هذا الحقل.
// Get the name.
string name = campaign.Name;
// Set the name.
campaign.Name = name;
// Check if the campaign object has the name field set.
bool hasName = campaign.HasName();
// Clear the name field. Use this method to exclude Name field from
// being sent to the server in a subsequent API call.
campaign.ClearName();
// Set the campaign to empty string value. This value will be
// sent to the server if you use this object in a subsequent API call.
campaign.Name = "";
// This will throw a runtime error. Use ClearName() instead.
campaign.Name = null;
الأنواع المتكرّرة
يتم تمثيل صفيف الحقول في Google Ads API كعنصر readonly
RepeatedField
.
على سبيل المثال، حقل url_custom_parameters
للحملة هو حقل متكرّر،
لذلك يتم تمثيله على أنّه RepeatedField<CustomParameter>
للقراءة فقط في مكتبة عملاء .NET.
ينفِّذ RepeatedField
واجهة
IList<T>
.
هناك طريقتان لملء حقل RepeatedField
.
إصدار C# الأقدم: إضافة قيم باستخدام طريقة AddRange
في ما يلي مثال على ذلك.
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
Status = CampaignStatus.Paused,
};
// Add values to UrlCustomParameters using AddRange method.
campaign.UrlCustomParameters.AddRange(new CustomParameter[]
{
new CustomParameter { Key = "season", Value = "christmas" },
new CustomParameter { Key = "promocode", Value = "NY123" }
});
الإصدارات الأحدث من C#: استخدام بنية أداة إعداد المجموعة
// Option 1: Initialize the field directly.
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
Status = CampaignStatus.Paused,
// Directly initialize the field.
UrlCustomParameters =
{
new CustomParameter { Key = "season", Value = "christmas" },
new CustomParameter { Key = "promocode", Value = "NY123" }
}
};
// Option 2: Initialize using an intermediate variable.
CustomParameter[] parameters = new CustomParameter[]
{
new CustomParameter { Key = "season", Value = "christmas" },
new CustomParameter { Key = "promocode", Value = "NY123" }
}
Campaign campaign1 = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
Status = CampaignStatus.Paused,
// Initialize from an existing array.
UrlCustomParameters = { parameters }
};
أنواع OneOf
تم وضع علامة على بعض الحقول في Google Ads API على أنّها حقول OneOf
، ما يعني أنّ الحقل
يمكن أن يحتوي على أنواع مختلفة ولكن قيمة واحدة فقط في وقت معيّن. حقول OneOf مشابهة
لنوع البنية في C.
تُنفِّذ مكتبة .NET حقول OneOf من خلال توفير خاصية واحدة لكل نوع من القيم التي يمكن تخزينها في حقل OneOf، وجميع السمات التي تعدِّل حقل ملف تعريف برمجي مشترَكًا.
على سبيل المثال، يتم وضع علامة على campaign_bidding_strategy
للحملة باعتباره حقل OneOf. يتم تنفيذ هذه الفئة على النحو التالي (تم تبسيط الرمز البرمجي للاختصار):
public sealed partial class Campaign : pb::IMessage<Campaign>
{
object campaignBiddingStrategy_ = null;
CampaignBiddingStrategyOneofCase campaignBiddingStrategyCase_;
public ManualCpc ManualCpc
{
get
{
return campaignBiddingStrategyCase_ == CampaignBiddingStrategyOneofCase.ManualCpc ?
(ManualCpc) campaignBiddingStrategy_ : null;
}
set
{
campaignBiddingStrategy_ = value;
campaignBiddingStrategyCase_ = CampaignBiddingStrategyOneofCase.ManualCpc;
}
}
public ManualCpm ManualCpm
{
get
{
return campaignBiddingStrategyCase_ == CampaignBiddingStrategyOneofCase.ManualCpm ?
(ManualCpm) campaignBiddingStrategy_ : null;
}
set
{
campaignBiddingStrategy_ = value;
campaignBiddingStrategyCase_ = CampaignBiddingStrategyOneofCase.ManualCpm;
}
}
public CampaignBiddingStrategyOneofCase CampaignBiddingStrategyCase
{
get { return campaignBiddingStrategyCase_; }
}
}
بما أنّ سمات OneOf تشترك في مساحة التخزين، يمكن أن تلغي مهمة واحدة مهمة سابقة، ما يؤدي إلى ظهور أخطاء طفيفة. على سبيل المثال،
Campaign campaign = new Campaign()
{
ManualCpc = new ManualCpc()
{
EnhancedCpcEnabled = true
},
ManualCpm = new ManualCpm()
{
}
};
في هذه الحالة، أصبح campaign.ManualCpc
هو null
لأنّ إعداد حقل
campaign.ManualCpm
يحلّ محلّ الإعداد السابق ل
campaign.ManualCpc
.
التحويل إلى تنسيقات أخرى
يمكنك بسهولة تحويل عناصر protobuf إلى تنسيق JSON والعكس. يكون ذلك مفيداً عند إنشاء أنظمة تحتاج إلى واجهة مع أنظمة أخرى تتطلّب بيانات بتنسيقات مستندة إلى النصوص، مثل JSON أو XML.
GoogleAdsRow row = new GoogleAdsRow()
{
Campaign = new Campaign()
{
Id = 123,
Name = "Campaign 1",
ResourceName = ResourceNames.Campaign(1234567890, 123)
}
};
// Serialize to JSON and back.
string json = JsonFormatter.Default.Format(row);
row = GoogleAdsRow.Parser.ParseJson(json);
يمكنك أيضًا تسلسل عنصر إلى وحدات بايت والعكس. إنّ التسلسل الثنائي أكثر فعالية في استخدام الذاكرة ومساحة التخزين مقارنةً بتنسيق JSON.
GoogleAdsRow row = new GoogleAdsRow()
{
Campaign = new Campaign()
{
Id = 123,
Name = "Campaign 1",
ResourceName = ResourceNames.Campaign(1234567890, 123)
}
};
// Serialize to bytes and back.
byte[] bytes = row.ToByteArray();
row = GoogleAdsRow.Parser.ParseFrom(bytes);