مقدمة
هذا المستند مخصّص للمطوّرين الذين يريدون كتابة تطبيقات تتفاعل مع YouTube. توضّح هذه السلسلة المفاهيم الأساسية حول YouTube وواجهة برمجة التطبيقات نفسها. ويقدّم أيضًا نظرة عامة على الوظائف المختلفة التي تتيحها واجهة برمجة التطبيقات.
قبل البدء
-
يجب أن يكون لديك حساب على Google للوصول إلى "وحدة تحكّم Google API" وطلب مفتاح واجهة برمجة تطبيقات وتسجيل تطبيقك.
-
أنشئ مشروعًا في Google Developers Console واحصل على بيانات اعتماد التفويض ليتمكّن تطبيقك من إرسال طلبات إلى واجهة برمجة التطبيقات.
-
بعد إنشاء مشروعك، تأكَّد من أنّ YouTube Data API هي إحدى الخدمات التي تم تسجيل تطبيقك لاستخدامها:
- انتقِل إلى API Console واختَر المشروع الذي سجّلته للتو.
- انتقِل إلى صفحة واجهات برمجة التطبيقات المفعَّلة. في قائمة واجهات برمجة التطبيقات، تأكَّد من أنّ الحالة مفعّلة في YouTube Data API v3.
-
إذا كان تطبيقك سيستخدم أيًا من أساليب واجهة برمجة التطبيقات التي تتطلب ترخيص المستخدم، فاقرأ دليل المصادقة للتعرف على كيفية تطبيق ترخيص OAuth 2.0.
-
حدد مكتبة عميل لتبسيط عملية تطبيق واجهة برمجة التطبيقات.
-
التعرّف على المفاهيم الأساسية لتنسيق بيانات JSON (JavaScript Object Notation) JSON هو تنسيق بيانات شائع مستقل عن اللغة يقدّم تمثيلاً نصيًا بسيطًا عن بنى عشوائية للبيانات. لمزيد من المعلومات، راجع json.org.
الموارد وأنواع الموارد
المورد هو كيان بيانات فردي يتضمّن معرّفًا فريدًا. يوضّح الجدول أدناه الأنواع المختلفة من المراجع التي يمكنك التفاعل معها باستخدام واجهة برمجة التطبيقات.
| الموارد | |
|---|---|
activity |
تحتوي هذه السمة على معلومات حول إجراء اتّخذه مستخدم معيّن على موقع YouTube الإلكتروني. تشمل إجراءات المستخدمين التي يتم الإبلاغ عنها في خلاصات الأنشطة تقييم فيديو ومشاركته وإضافته إلى المحتوى المفضّل ونشر نشرة في القناة وغير ذلك. |
channel |
تحتوي على معلومات حول قناة واحدة على YouTube. |
channelBanner |
تحدّد هذه السمة عنوان URL الذي سيتم استخدامه لضبط صورة تم تحميلها حديثًا كصورة بانر لقناة. |
channelSection |
تحتوي هذه السمة على معلومات حول مجموعة من الفيديوهات اختارت القناة عرضها. على سبيل المثال، يمكن أن يعرض قسم ما أحدث الفيديوهات التي حمّلتها قناة أو الفيديوهات الأكثر رواجًا أو الفيديوهات من قائمة تشغيل واحدة أو أكثر. |
guideCategory |
تحدّد هذه السمة فئة يربطها YouTube بالقنوات استنادًا إلى محتواها أو مؤشرات أخرى، مثل مدى رواجها. تهدف فئات الأدلة إلى تنظيم القنوات بطريقة تسهّل على مستخدمي YouTube العثور على المحتوى الذي يبحثون عنه. على الرغم من إمكانية ربط القنوات بفئة واحدة أو أكثر من فئات الدليل، لا يمكن ضمان إدراجها في أي من فئات الدليل. |
i18nLanguage |
تحدّد هذه السمة لغة تطبيق يتيحها موقع YouTube الإلكتروني. يمكن أيضًا الإشارة إلى لغة التطبيق باسم لغة واجهة المستخدم. |
i18nRegion |
تحدّد هذه السمة مساحة جغرافية يمكن لمستخدم YouTube اختيارها كمنطقة المحتوى المفضّلة. يمكن أيضًا الإشارة إلى منطقة المحتوى على أنّها لغة المحتوى. |
playlist |
تمثّل هذه السمة قائمة تشغيل واحدة على YouTube. قائمة التشغيل هي مجموعة من الفيديوهات التي يمكن مشاهدتها بالتسلسل ومشاركتها مع مستخدمين آخرين. |
playlistItem |
تحدّد هذه السمة مرجعًا، مثل فيديو، يشكّل جزءًا من قائمة تشغيل. يتضمّن مورد playlistItem أيضًا تفاصيل توضّح كيفية استخدام المورد المُدرَج في قائمة التشغيل. |
search result |
تحتوي على معلومات حول فيديو أو قناة أو قائمة تشغيل على YouTube تتطابق مع مَعلمات البحث المحدّدة في طلب البيانات من واجهة برمجة التطبيقات. على الرغم من أنّ نتيجة البحث تشير إلى مصدر يمكن التعرّف عليه بشكلٍ فريد، مثل فيديو، إلا أنّها لا تتضمّن بيانات ثابتة خاصة بها. |
subscription |
يحتوي على معلومات حول اشتراك مستخدم YouTube. يتم إشعار المستخدم عند إضافة فيديوهات جديدة إلى قناة أو عندما يتّخذ مستخدم آخر أحد الإجراءات المتعددة على YouTube، مثل تحميل فيديو أو تقييمه أو التعليق عليه. |
thumbnail |
تحدّد هذه السمة الصور المصغّرة المرتبطة بمورد. |
video |
يمثّل هذا النوع فيديو واحدًا على YouTube. |
videoCategory |
تحدّد هذه السمة فئة تم ربطها أو يمكن ربطها بالفيديوهات المحمّلة. |
watermark |
تحدّد هذه السمة صورة يتم عرضها أثناء تشغيل فيديوهات قناة معيّنة. يمكن لمالك القناة أيضًا تحديد قناة مستهدَفة يتم ربط الصورة بها، بالإضافة إلى تفاصيل التوقيت التي تحدّد وقت ظهور العلامة المائية أثناء تشغيل الفيديوهات ومدة ظهورها. |
يُرجى العِلم أنّه في كثير من الحالات، يحتوي المرجع على إشارات إلى مراجع أخرى. على سبيل المثال، تحدّد السمة snippet.resourceId.videoId الخاصة بمورد playlistItem مورد فيديو يحتوي بدوره على معلومات كاملة عن الفيديو. كمثال آخر، تحتوي نتيجة البحث على السمة videoId أو playlistId أو channelId التي تحدّد فيديو أو قائمة تشغيل أو قناة معيّنة.
العمليات المتوافقة
يعرض الجدول التالي الطرق الأكثر شيوعًا التي يتيحها واجهة برمجة التطبيقات. تتيح بعض المراجع أيضًا طرقًا أخرى تنفّذ وظائف أكثر تحديدًا لتلك المراجع. على سبيل المثال، تربط الطريقة videos.rate تقييم المستخدم بفيديو، وتحمّل الطريقة thumbnails.set صورة مصغّرة للفيديو إلى YouTube وتربطها بفيديو.
| العمليات | |
|---|---|
list |
يسترد (GET) قائمة تتضمّن صفرًا أو أكثر من المراجع. |
insert |
ينشئ (POST) مرجعًا جديدًا. |
update |
يعدّل (PUT) مرجعًا حاليًا ليعكس البيانات الواردة في طلبك. |
delete |
يزيل (DELETE) مرجعًا معيّنًا. |
تتيح واجهة برمجة التطبيقات حاليًا طرقًا لإدراج كل نوع من أنواع الموارد المتوافقة، كما تتيح عمليات الكتابة للعديد من الموارد أيضًا.
يوضّح الجدول أدناه العمليات المتاحة لأنواع مختلفة من الموارد. تتطلّب العمليات التي تُدرج موارد أو تعدّلها أو تحذفها دائمًا إذن المستخدم. في بعض الحالات، تتيح طرق list إمكانية تقديم طلبات مُصرَّح بها وغير مُصرَّح بها، حيث لا تسترد الطلبات غير المُصرَّح بها سوى البيانات العامة، بينما يمكن للطلبات المُصرَّح بها أيضًا استرداد معلومات عن المستخدم الذي تم إثبات هويته حاليًا أو معلومات خاصة به.
| العمليات المتوافقة | ||||
|---|---|---|---|---|
| list | insert | update | delete | |
activity |
||||
caption |
||||
channel |
||||
channelBanner |
||||
channelSection |
||||
comment |
||||
commentThread |
||||
guideCategory |
||||
i18nLanguage |
||||
i18nRegion |
||||
playlist |
||||
playlistItem |
||||
search result |
||||
subscription |
||||
thumbnail |
||||
video |
||||
videoCategory |
||||
watermark |
||||
مقدار استخدام الحصة
تستخدم YouTube Data API حصة لضمان استخدام المطوّرين للخدمة على النحو المنشود وعدم إنشاء تطبيقات تقلّل من جودة الخدمة بشكل غير عادل أو تحدّ من إمكانية وصول الآخرين إليها. تتسبّب جميع طلبات البيانات من واجهة برمجة التطبيقات، بما في ذلك الطلبات غير الصالحة، في تكلفة حصة لا تقلّ عن نقطة واحدة. يمكنك العثور على الحصة المتاحة لتطبيقك في API Console.
تتضمّن المشاريع التي تفعّل YouTube Data API حصة تلقائية تبلغ 10,000 وحدة في اليوم، وهو مبلغ كافٍ لأغلبية مستخدمي واجهة برمجة التطبيقات. تساعدنا الحصة التلقائية، التي يمكن أن تتغيّر، في تحسين عمليات تخصيص الحصص وتوسيع نطاق البنية الأساسية بطريقة أكثر فائدة لمستخدمي واجهة برمجة التطبيقات. يمكنك الاطّلاع على استخدام حصتك في صفحة الحصص في "وحدة تحكّم واجهة برمجة التطبيقات".
ملاحظة: إذا بلغت الحد الأقصى للحصة، يمكنك طلب حصة إضافية من خلال ملء نموذج طلب زيادة الحصة لخدمات YouTube API.
احتساب مقدار استخدام الحصة
تحتسب Google نسبة استهلاكك من الحصة عن طريق تحديد تكلفة لكل طلب. تختلف تكلفة الحصة باختلاف أنواع العمليات. على سبيل المثال:
- تتطلّب عملية القراءة التي تسترد قائمة بالموارد، مثل القنوات والفيديوهات وقوائم التشغيل، عادةً وحدة واحدة.
- تكلّف عملية الكتابة التي تنشئ موردًا أو تعدّله أو تحذفه عادةً
50وحدة. - يُكلّف طلب البحث
100وحدة. - يستهلك تحميل فيديو
100وحدة.
يعرض جدول تكاليف الحصة لطلبات البيانات من واجهة برمجة التطبيقات تكلفة الحصة لكل طريقة من طرق واجهة برمجة التطبيقات. مع أخذ هذه القواعد في الاعتبار، يمكنك تقدير عدد الطلبات التي يستطيع تطبيقك إرسالها يوميًا بدون تجاوز حصتك المخصّصة.
المراجع الجزئية
تسمح واجهة برمجة التطبيقات باسترداد الموارد الجزئية، بل وتتطلّب ذلك، حتى تتجنّب التطبيقات نقل البيانات غير الضرورية وتحليلها وتخزينها. يضمن هذا الأسلوب أيضًا استخدام موارد الشبكة ووحدة المعالجة المركزية (CPU) والذاكرة بكفاءة أكبر.CPU
تتيح لك واجهة برمجة التطبيقات تحديد سمات المورد التي يجب تضمينها في ردود واجهة برمجة التطبيقات، وذلك من خلال معلَمتَي طلب موضّحتَين في الأقسام التالية.
- تحدّد المَعلمة
partمجموعات من السمات التي يجب عرضها لمورد معيّن. - تفلتر المَعلمة
fieldsالردّ من واجهة برمجة التطبيقات لعرض سمات معيّنة فقط ضمن أجزاء المورد المطلوب.
كيفية استخدام المَعلمة part
المَعلمة part هي مَعلمة مطلوبة لأي طلب من طلبات واجهة برمجة التطبيقات التي تستردّ موردًا أو تعرضه. تحدّد المَعلمة سمة واحدة أو أكثر من سمات الموارد على المستوى الأعلى (غير المتداخلة) التي يجب تضمينها في استجابة واجهة برمجة التطبيقات. على سبيل المثال، يحتوي مورد video على الأجزاء التالية:
snippetcontentDetailsfileDetailsplayerprocessingDetailsrecordingDetailsstatisticsstatussuggestionstopicDetails
جميع هذه الأجزاء هي عناصر تحتوي على خصائص متداخلة، ويمكنك اعتبار هذه العناصر مجموعات من حقول البيانات الوصفية التي قد يستردها خادم واجهة برمجة التطبيقات (أو لا يستردها). وبالتالي، تتطلّب المَعلمة part منك اختيار مكوّنات الموارد التي يستخدمها تطبيقك فعليًا. يخدم هذا الشرط غرضَين رئيسيَّين:
- يقلّل هذا الإجراء من وقت الاستجابة من خلال منع خادم واجهة برمجة التطبيقات من استغراق وقت في استرداد حقول البيانات الوصفية التي لا يستخدمها تطبيقك.
- يقلّل من استخدام النطاق الترددي من خلال تقليل (أو إزالة) مقدار البيانات غير الضرورية التي قد يستردّها تطبيقك.
بمرور الوقت، ومع إضافة المزيد من الأجزاء إلى الموارد، ستزداد هذه المزايا فقط لأنّ تطبيقك لن يطلب خصائص تم تقديمها حديثًا ولا يتوافق معها.
كيفية استخدام المَعلمة fields
تفلتر المَعلمة fields استجابة واجهة برمجة التطبيقات التي لا تحتوي إلا على أجزاء الموارد المحدّدة في قيمة المَعلمة part، وبالتالي لا تتضمّن الاستجابة سوى مجموعة معيّنة من الحقول. تتيح لك المَعلمة fields إزالة السمات المتداخلة من استجابة واجهة برمجة التطبيقات، وبالتالي تقليل معدل نقل البيانات بشكل أكبر. (لا يمكن استخدام المَعلمة part لفلترة المواقع المتداخلة من الردّ).
توضّح القواعد التالية البنية المتوافقة لقيمة المَعلمة fields، والتي تستند بشكل عام إلى بنية XPath:
- استخدِم قائمة قيم مفصولة بفاصلة (
fields=a,b) لاختيار أكثر من حقل. - استخدِم علامة نجمة (
fields=*) كحرف بدل لتحديد جميع الحقول. - استخدِم الأقواس (
fields=a(b,c)) لتحديد مجموعة من الخصائص المتداخلة التي سيتم تضمينها في استجابة واجهة برمجة التطبيقات. - استخدِم شرطة مائلة للأمام (
fields=a/b) لتحديد سمة متداخلة.
في الواقع، تسمح هذه القواعد غالبًا بعدة قيم مختلفة للمَعلمة fields باسترداد استجابة واجهة برمجة التطبيقات نفسها. على سبيل المثال، إذا أردت استرداد معرّف عنصر قائمة التشغيل وعنوانه وموضعه لكل عنصر في قائمة تشغيل، يمكنك استخدام أيّ من القيم التالية:
fields=items/id,playlistItems/snippet/title,playlistItems/snippet/positionfields=items(id,snippet/title,snippet/position)fields=items(id,snippet(title,position))
ملاحظة: كما هو الحال مع جميع قيم مَعلمات طلبات البحث، يجب أن تكون قيمة مَعلمة fields مرمّزة بعنوان URL. تم حذف الترميز من الأمثلة الواردة في هذا المستند لتسهيل قراءتها.
أمثلة على الطلبات الجزئية
توضّح الأمثلة أدناه كيف يمكنك استخدام المَعلمتَين part وfields للتأكّد من أنّ ردود واجهة برمجة التطبيقات تتضمّن فقط البيانات التي يستخدمها تطبيقك:
- يعرض المثال 1 مورد فيديو يتضمّن أربعة أجزاء بالإضافة إلى سمات
kindوetag. - يعرض المثال 2 مورد فيديو يتضمّن جزأين بالإضافة إلى سمتَي
kindوetag. - يعرض المثال 3 مصدر فيديو يتضمّن جزأين ولكنّه يستبعد السمتَين
kindوetag. - يعرض المثال 4 مصدر فيديو يتضمّن جزأين ولكن يستبعد
kindوetagبالإضافة إلى بعض السمات المتداخلة في عنصرsnippetالخاص بالمصدر.
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,contentDetails,statistics,status Description: This example retrieves avideoresource and identifies several resource parts that should be included in the API response. API response:{ "kind": "youtube#videoListResponse", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"", "videos": [ { "id": "7lCDEYXw3mM", "kind": "youtube#video", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "contentDetails": { "duration": "PT15M51S", "aspectRatio": "RATIO_16_9" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" }, "status": { "uploadStatus": "STATUS_PROCESSED", "privacyStatus": "PRIVACY_PUBLIC" } } ] }
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,statistics Description: This example modifies thepartparameter value so that thecontentDetailsandstatusproperties are not included in the response. API response:{ "kind": "youtube#videoListResponse", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"", "videos": [ { "id": "7lCDEYXw3mM", "kind": "youtube#video", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,statistics&fields=items(id,snippet,statistics) Description: This example adds thefieldsparameter to remove allkindandetagproperties from the API response. API response:{ "videos": [ { "id": "7lCDEYXw3mM", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&fields=items(id,snippet(channelId,title,categoryId),statistics)&part=snippet,statistics Description: This example modifies thefieldsparameter from example 3 so that in the API response, each video resource'ssnippetobject only includes thechannelId,title, andcategoryIdproperties. API response:{ "videos": [ { "id": "7lCDEYXw3mM", "snippet": { "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }
تحسين الأداء
استخدام علامات ETag
تتيح ETags، وهي جزء أساسي من بروتوكول HTTP، للتطبيقات الإشارة إلى إصدار معيّن من مورد معيّن في واجهة برمجة التطبيقات. يمكن أن يكون المرجع عبارة عن خلاصة كاملة أو عنصر في تلك الخلاصة. تتيح هذه الوظيفة حالات الاستخدام التالية:
-
التخزين المؤقت والاسترجاع الشرطي: يمكن لتطبيقك تخزين موارد واجهة برمجة التطبيقات وETag الخاصة بها مؤقتًا. بعد ذلك، عندما يطلب تطبيقك موردًا مخزّنًا مرة أخرى، يحدّد ETag المرتبط بهذا المورد. إذا تغيّر المورد، تعرض واجهة برمجة التطبيقات المورد المعدَّل وETag المرتبط بهذه النسخة من المورد. إذا لم يتغيّر المرجع، تعرض واجهة برمجة التطبيقات استجابة HTTP 304 (
Not Modified)، ما يشير إلى أنّ المرجع لم يتغيّر. يمكن لتطبيقك تقليل وقت الاستجابة واستخدام معدل نقل البيانات من خلال عرض الموارد المخزّنة مؤقتًا بهذه الطريقة.تختلف مكتبات العملاء الخاصة بواجهات Google API في إتاحة علامات ETag. على سبيل المثال، تتيح مكتبة برامج JavaScript للعملاء استخدام علامات ETag من خلال قائمة بيضاء لعناوين طلبات مسموح بها تتضمّن
If-MatchوIf-None-Match. تسمح القائمة البيضاء بتخزين المتصفّح العادي في ذاكرة التخزين المؤقت، وبالتالي إذا لم يتغيّر ETag لأحد الموارد، يمكن عرض المورد من ذاكرة التخزين المؤقت للمتصفّح. من ناحية أخرى، لا يتوافق برنامج Obj-C مع علامات ETag. -
الحماية من الكتابة فوق التغييرات عن غير قصد: تساعد علامات ETag في ضمان عدم قيام العديد من برامج واجهة برمجة التطبيقات بالكتابة فوق تغييرات بعضها البعض عن غير قصد. عند تعديل مورد أو حذفه، يمكن لتطبيقك تحديد ETag الخاص بالمورد. إذا لم يتطابق ETag مع أحدث إصدار من هذا المرجع، سيتعذّر تنفيذ طلب البيانات من واجهة برمجة التطبيقات.
يوفّر استخدام علامات ETag في تطبيقك العديد من المزايا:
- تستجيب واجهة برمجة التطبيقات بشكل أسرع لطلبات الموارد المخزّنة مؤقتًا ولكن غير المتغيرة، ما يؤدي إلى تقليل وقت الاستجابة واستخدام معدل نقل البيانات.
- لن يلغي تطبيقك عن غير قصد التغييرات التي تم إجراؤها على أحد الموارد من خلال برنامج آخر للوصول إلى واجهة برمجة التطبيقات.
تتيح السمة Google APIs Client Library for JavaScript استخدام العنوانَين If-Match وIf-None-Match لطلبات HTTP، ما يتيح عمل علامات ETag في سياق التخزين المؤقت العادي للمتصفح.
استخدام gzip
يمكنك أيضًا تقليل معدّل نقل البيانات المطلوب لكل ردّ من واجهة برمجة التطبيقات من خلال تفعيل ضغط gzip. على الرغم من أنّ تطبيقك سيحتاج إلى وقت إضافي لوحدة المعالجة المركزية لفك ضغط ردود واجهة برمجة التطبيقات، إلا أنّ فائدة استهلاك موارد أقل من الشبكة تفوق عادةً هذه التكلفة.
للحصول على استجابة مرمّزة باستخدام gzip، يجب تنفيذ خطوتَين:
- اضبط عنوان طلب HTTP الخاص بـ
Accept-Encodingعلىgzip. - عدِّل وكيل المستخدم ليتضمّن السلسلة
gzip.
توضّح عناوين HTTP النموذجية أدناه هذه المتطلبات لتفعيل ضغط البيانات باستخدام gzip:
Accept-Encoding: gzip User-Agent: my program (gzip)