يتناول هذا المستند بعض الأساليب التي يمكنك استخدامها لتحسين أداء تطبيقك. في بعض الحالات، يتم استخدام أمثلة من واجهات برمجة التطبيقات الأخرى أو واجهات برمجة التطبيقات العامة لتوضيح الأفكار المقدمة. ومع ذلك، تنطبق المفاهيم نفسها على واجهة برمجة التطبيقات لتقرير تجارب إعلانات Google.
الضغط باستخدام gzip
الطريقة السهلة والمريحة لتقليل معدّل نقل البيانات المطلوب لكل طلب هي تفعيل ضغط gzip. يتطلب ذلك وقتًا إضافيًا لوحدة المعالجة المركزية (CPU) لفك ضغط النتائج، إلا أن المقايضة مع تكاليف الشبكة تجعلها مفيدة للغاية.
لتلقّي استجابة بترميز gzip، عليك تنفيذ إجراءَين: ضبط عنوان Accept-Encoding
وتعديل وكيل المستخدم ليتضمن السلسلة gzip
. إليك مثال على عناوين HTTP تم تنسيقها بشكل صحيح لتفعيل ضغط gzip:
Accept-Encoding: gzip User-Agent: my program (gzip)
استخدام موارد جزئية
تتمثل طريقة أخرى لتحسين أداء طلبات البيانات من واجهة برمجة التطبيقات في طلب جزء من البيانات التي تهمك فقط. يتيح لك هذا الإجراء تجنُّب نقل الحقول غير الضرورية وتحليلها وتخزينها، حتى يتمكّن التطبيق من استخدام الموارد، بما في ذلك الشبكة ووحدة المعالجة المركزية (CPU) والذاكرة بكفاءة أكبر.
ردّ جزئي
ويعرض الخادم تلقائيًا مرة أخرى التمثيل الكامل للمورد بعد معالجة الطلبات. لتحسين الأداء، يمكنك أن تطلب من الخادم أن يرسل فقط الحقول التي تحتاج إليها وأن تحصل على رد جزئي.
لطلب ردّ جزئي، استخدِم معلَمة الطلب fields
لتحديد الحقول التي تريد عرضها. ويمكنك استخدام هذه المعلّمة مع أي طلب يعرض بيانات الاستجابة.
مثال
يوضّح المثال التالي استخدام المعلّمة fields
مع واجهة برمجة تطبيقات عامة (خيالية) "Demo".
طلب بسيط: يحذف طلب HTTP GET
هذا المعلَمة fields
ويعرض المورد الكامل.
https://www.googleapis.com/demo/v1
الاستجابة الكاملة للموارد: تتضمّن بيانات الموارد الكاملة الحقول التالية، بالإضافة إلى العديد من الحقول الأخرى التي تم حذفها بسبب الإيجاز.
{ "kind": "demo", ... "items": [ { "title": "First title", "comment": "First comment.", "characteristics": { "length": "short", "accuracy": "high", "followers": ["Jo", "Will"], }, "status": "active", ... }, { "title": "Second title", "comment": "Second comment.", "characteristics": { "length": "long", "accuracy": "medium" "followers": [ ], }, "status": "pending", ... }, ... ] }
طلب استجابة جزئية: يستخدم الطلب التالي لهذا المورد نفسه المعلَمة fields
لتقليل مقدار البيانات المعروضة بشكلٍ كبير.
https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)
الاستجابة الجزئية: استجابةً للطلب أعلاه، يرسل الخادم ردًا يحتوي على المعلومات النوعية فقط إلى جانب مصفوفة عناصر يتم تقسيمها إلى عناصر وتحتوي على عنوان HTML ومعلومات خصائص الطول في كل عنصر.
200 OK
{ "kind": "demo", "items": [{ "title": "First title", "characteristics": { "length": "short" } }, { "title": "Second title", "characteristics": { "length": "long" } }, ... ] }
لاحظ أن الاستجابة هي عنصر JSON لا يتضمن سوى الحقول المحددة والكائنات الرئيسية المُضمَّنة فيها.
سيتم تناول تفاصيل حول كيفية تنسيق المَعلمة fields
بعد ذلك، متبوعة بمزيد من التفاصيل حول ما يتم عرضه بالضبط في الاستجابة.
ملخّص بنية معلّمة الحقول
ويكون تنسيق قيمة معلَمة الطلب fields
بشكلٍ غير مرن استنادًا إلى بنية XPath. يتم تلخيص البنية المتوافقة أدناه، ويتم تقديم أمثلة إضافية في القسم التالي.
- استخدِم قائمة مفصولة بفواصل لاختيار حقول متعددة.
- استخدِم
a/b
لاختيار حقلb
مدمج داخل الحقلa
، واستخدِمa/b/c
لاختيار حقلc
مدمج داخلb
.
استثناء: بالنسبة إلى استجابات واجهة برمجة التطبيقات التي تستخدم برامج الترميز "data"quot، حيث يتم دمج الاستجابة في كائن
data
الذي يبدو مثلdata: { ... }
، لا تُدرِج "data
" في مواصفاتfields
. يؤدي تضمين كائن البيانات مع مواصفات حقول مثلdata/a/b
إلى حدوث خطأ. بدلاً من ذلك، استخدِم مواصفاتfields
، مثلa/b
. - استخدِم محدِّدًا فرعيًا لطلب مجموعة من الحقول الفرعية المحدَّدة للمصفوفات أو العناصر من خلال وضع التعبيرات بين قوسَين و "
( )
".على سبيل المثال: لا تعرض
fields=items(id,author/email)
سوى معرّف العنصر والبريد الإلكتروني للمؤلف لكل عنصر في مصفوفة العناصر. ويمكنك أيضًا تحديد حقل فرعي واحد، حيث يساويfields=items(id)
fields=items/id
. - استخدِم أحرف البدل في اختيارات الحقل، إذا لزم الأمر.
على سبيل المثال: تختار
fields=items/pagemap/*
جميع العناصر في خريطة صفحة.
مزيد من الأمثلة على استخدام معلمة الحقول
تتضمّن الأمثلة أدناه أوصافًا لكيفية تأثير قيمة المعلّمة fields
على الاستجابة.
ملاحظة: كما هو الحال مع جميع قيم معلّمات طلب البحث، يجب أن تكون قيمة معلّمة fields
مشفّرة بعنوان URL. لتسهيل القراءة، تحذف الأمثلة في هذا المستند الترميز.
- حدِّد الحقول التي تريد عرضها أو اختَر اختيارات الحقول.
- قيمة معلَمة الطلب
fields
هي قائمة من الحقول مفصولة بفواصل، ويتم تحديد كل حقل بالنسبة إلى جذر الاستجابة. وبالتالي، إذا أجريت عملية list، ستكون الاستجابة عبارة عن مجموعة، وتتضمّن بشكل عام مجموعة من الموارد. إذا كنت تُنفِّذ عملية تعرض موردًا واحدًا، يتم تحديد الحقول بالنسبة إلى هذا المورد. إذا كان الحقل الذي تختاره هو (أو جزءًا من) مصفوفة، سيعرض الخادم الجزء المحدّد من جميع العناصر في الصفيف.
في ما يلي بعض الأمثلة على مستوى المجموعة:
أمثلة التأثير items
عرض جميع العناصر في مصفوفة العناصر، بما في ذلك جميع الحقول في كل عنصر، ولكن بدون أي حقول أخرى. etag,items
تعرض كلاً من الحقل etag
وكل العناصر في مصفوفة العناصر.items/title
لعرض الحقل title
فقط لجميع العناصر في مصفوفة العناصر.
عند عرض حقل مدمج، تتضمن الاستجابة العناصر الرئيسية المضمنة. لا تتضمّن الحقول الرئيسية أي حقول فرعية أخرى ما لم يتم اختيارها صراحةً أيضًا.context/facets/label
تعرض فقط الحقل label
لجميع أعضاء المصفوفةfacets
، التي هي نفسها مدمَجة ضمن العنصرcontext
.items/pagemap/*/title
بالنسبة إلى كل عنصر في مصفوفة العناصر، يتم عرض الحقل title
فقط (في حال توفّره) من جميع العناصر الفرعية للسمةpagemap
.
في ما يلي بعض الأمثلة على مستوى الموارد:
أمثلة التأثير title
عرض الحقل title
للمورد المطلوب.author/uri
تعرض الحقل الفرعي uri
للعنصرauthor
في المورد المطلوب.links/*/href
عرض الحقل href
لجميع العناصر الثانويةlinks
. - يمكنك طلب أجزاء من حقول معيّنة فقط باستخدام الاختيارات الفرعية.
- إذا حدّد طلبك حقولاً معيّنة، سيعرض الخادم العناصر أو عناصر الصفيف بالكامل. يمكنك تحديد استجابة تتضمن حقول فرعية معينة فقط. ويمكنك إجراء ذلك باستخدام بنية "
( )
"الاختيار الفرعي؛ كما في المثال أدناه.مثال التأثير items(title,author/uri)
تعرض فقط قيم title
وauthor'suri
لكل عنصر في مصفوفة العناصر.
التعامل مع الردود الجزئية
بعد أن يعالج الخادم طلبًا صالحًا يتضمّن معلَمة طلب البحث fields
، يُعيد إرسال رمز حالة HTTP 200 OK
مع البيانات المطلوبة. وإذا كانت معلَمة طلب البحث fields
تتضمّن خطأً أو كانت غير صالحة، يعرض الخادم رمز حالة HTTP 400 Bad Request
، إلى جانب رسالة خطأ تخبر المستخدم بما هو غير صحيح في اختيار الحقول (على سبيل المثال، "Invalid field selection a/b"
).
في ما يلي مثال على الاستجابة الجزئية المعروضة في القسم التمهيدي أعلاه. يستخدم الطلب المعلّمة fields
لتحديد الحقول المطلوب عرضها.
https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)
تبدو الاستجابة الجزئية على النحو التالي:
200 OK
{ "kind": "demo", "items": [{ "title": "First title", "characteristics": { "length": "short" } }, { "title": "Second title", "characteristics": { "length": "long" } }, ... ] }
ملاحظة: بالنسبة إلى واجهات برمجة التطبيقات التي تتيح معلَمات طلب البحث لتقسيم البيانات على صفحات (maxResults
وnextPageToken
مثلاً)، استخدِم هذه المعلّمات لتقليل نتائج كل طلب بحث إلى حجم يمكن إدارته. وإلا، قد لا يتم تحقيق المكاسب في الأداء من خلال الاستجابة الجزئية.