بما أنّ 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
يتم وضع علامة OneOf
على بعض الحقول في Google Ads API، ما يعني أنّ الحقل يمكن أن يتضمّن أنواعًا مختلفة ولكن قيمة واحدة فقط في وقت معيّن. تشبه حقول OneOf نوع الاتحاد في C.
تنفّذ مكتبة .NET حقول OneOf من خلال توفير سمة واحدة لكل نوع من أنواع القيم التي يمكن الاحتفاظ بها في حقل OneOf، وتعدّل جميع السمات حقل فئة مشتركة.
على سبيل المثال، يتم وضع علامة OneOf على campaign_bidding_strategy
الخاصة بالحملة. يتم تنفيذ هذه الفئة على النحو التالي (تم تبسيط الرمز البرمجي للاختصار):
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);