نمای کلی YouTube Data API

مقدمه

این سند برای توسعه‌دهندگانی است که می‌خواهند برنامه‌هایی بنویسند که با YouTube تعامل داشته باشند. این سند مفاهیم پایه YouTube و خود API را توضیح می‌دهد. همچنین نمای کلی از عملکردهای مختلفی که میانای برنامه‌سازی کاربردی پشتیبانی می‌کند ارائه می‌دهد.

قبل‌از شروع

  1. برای دسترسی به کنسول Google Cloud، درخواست کلید میانای برنامه‌سازی کاربردی، و ثبت برنامه، به حساب Google نیاز دارید.

  2. پروژه‌ای در Google Developers Console ایجاد کنید و اعتبارنامه مجوز را دریافت کنید تا برنامه‌تان بتواند درخواست‌های API را ارسال کند.

  3. پس‌از ایجاد پروژه، مطمئن شوید که YouTube Data API یکی از سرویس‌هایی است که برنامه شما برای استفاده از آن ثبت شده است:

    1. به کنسول Cloud بروید و پروژه‌ای را که به‌تازگی ثبت کرده‌اید انتخاب کنید.
    2. به صفحه میاناهای برنامه‌سازی کاربردی فعال‌شده بروید. مطمئن شوید که YouTube Data API در فهرست میاناهای برنامه‌سازی کاربردی فعال‌شده قرار دارد. اگر فعال نیست، «کتابخانه API» را باز کنید و API را فعال کنید.
  4. اگر برنامه شما از روش‌های میانای برنامه‌سازی کاربردی (API) استفاده می‌کند که به مجوز کاربر نیاز دارد، راهنمای اصالت‌سنجی را بخوانید تا با نحوه پیاده‌سازی مجوز OAuth 2.0 آشنا شوید.

  5. برای ساده کردن پیاده‌سازی میانای برنامه‌سازی کاربردی، کتابخانه کارخواه را انتخاب کنید.

  6. با مفاهیم اصلی قالب داده JSON (نشان‌گذاری شیء جاوا اسکریپت) آشنا شوید. ‫JSON قالب داده رایج و مستقل از زبانی است که نمایش نوشتاری ساده‌ای از ساختارهای داده دلخواه ارائه می‌دهد. برای اطلاعات بیشتر، به json.org مراجعه کنید.

منابع و انواع منبع

منبع یک موجودیت داده تکی با شناسه یکتا است. جدول زیر انواع مختلف منابعی را که می‌توانید بااستفاده از میانای برنامه‌سازی کاربردی با آن‌ها تعامل داشته باشید شرح می‌دهد.

منابع
activity شامل اطلاعاتی درباره اقدامی است که یک کاربر خاص در سایت YouTube انجام داده است. کنش‌های کاربر که در فیدهای فعالیت گزارش می‌شوند شامل رتبه‌بندی ویدیو، هم‌رسانی ویدیو، علامت‌گذاری ویدیو به‌عنوان موردپسند، و پست کردن اعلامیه کانال، و غیره است.
channel حاوی اطلاعات مربوط به یک کانال YouTube است.
channelBanner نشانی وبی را که برای تنظیم تصویر بارگذاری‌شده جدید به‌عنوان تصویر برنمای کانال استفاده می‌شود شناسایی می‌کند.
channelSection حاوی اطلاعاتی درباره مجموعه‌ای از ویدیوها است که کانال برای نمایش انتخاب کرده است. برای مثال، یک بخش می‌تواند جدیدترین بارگذاری‌های کانال، محبوب‌ترین بارگذاری‌ها، یا ویدیوهای یک یا چند فهرست پخش را نمایش دهد.
guideCategory دسته‌ای را شناسایی می‌کند که YouTube براساس محتوا یا شاخص‌های دیگر، مانند محبوبیت، با کانال‌ها مرتبط می‌کند. دسته‌های راهنما سعی دارند کانال‌ها را به گونه‌ای سازماندهی کنند که کاربران YouTube بتوانند محتوای موردنظر خود را راحت‌تر پیدا کنند. درحالی‌که کانال‌ها می‌توانند با یک یا چند دسته راهنما مرتبط باشند، تضمینی وجود ندارد که در هیچ‌یک از دسته‌های راهنما قرار بگیرند.
i18nLanguage زبان برنامه‌ای را که وب‌سایت YouTube پشتیبانی می‌کند شناسایی می‌کند. زبان برنامه را می‌توان زبان واسط کاربر نیز نامید.
i18nRegion منطقه جغرافیایی را که کاربر YouTube می‌تواند به‌عنوان منطقه محتوای ترجیحی انتخاب کند شناسایی می‌کند. منطقه محتوا را می‌توان به‌عنوان منطقه زبانی محتوا نیز نامید.
playlist نشان‌دهنده یک فهرست پخش YouTube است. فهرست پخش مجموعه‌ای از ویدیوها است که می‌توان آن‌ها را به‌صورت متوالی مشاهده کرد و با کاربران دیگر هم‌رسانی کرد.
playlistItem منبعی را شناسایی می‌کند، مانند ویدیو، که بخشی از فهرست پخش است. منبع playlistItem همچنین حاوی جزئیاتی است که نحوه استفاده از منبع گنجانده شده در فهرست پخش را توضیح می‌دهد.
search result حاوی اطلاعاتی درباره ویدیو، کانال، یا فهرست پخش YouTube است که با پارامترهای جستجوی مشخص‌شده در درخواست API مطابقت دارد. درحالی‌که نتیجه جستجو به یک منبع قابل‌شناسایی منحصربه‌فرد، مانند یک ویدیو، اشاره می‌کند، داده‌های ماندگار خود را ندارد.
subscription شامل اطلاعاتی درباره اشتراک کاربر YouTube است. اشتراک زمانی به کاربر اطلاع می‌دهد که ویدیوهای جدید به یک کانال اضافه می‌شوند یا زمانی که کاربر دیگری یکی از چندین اقدام در YouTube را انجام می‌دهد، مانند بارگذاری ویدیو، رتبه‌بندی ویدیو، یا نظر دادن روی ویدیو.
thumbnail تصاویر کوچک مرتبط با منبع را شناسایی می‌کند.
video یک ویدیو YouTube را نشان می‌دهد.
videoCategory دسته‌ای را که با ویدیوهای بارگذاری‌شده مرتبط بوده یا می‌تواند مرتبط باشد شناسایی می‌کند.
watermark تصویری را که درطول بازپخش ویدیوهای یک کانال مشخص نمایش داده می‌شود شناسایی می‌کند. مالک کانال همچنین می‌تواند کانال هدفی را که تصویر به آن پیوند می‌دهد و همچنین جزئیات زمان‌بندی را که تعیین می‌کند ته‌نقش چه زمانی درطول بازپخش ویدیو ظاهر شود و مدت‌زمانی که قابل‌مشاهده است، مشخص کند.

توجه داشته باشید که در بسیاری از موارد، یک منبع حاوی ارجاع به منابع دیگر است. برای مثال، ویژگی snippet.resourceId.videoId منبع playlistItem منبع ویدیویی را شناسایی می‌کند که به‌نوبه خود حاوی اطلاعات کامل درباره ویدیو است. به‌عنوان مثالی دیگر، نتیجه جستجو شامل یک ویژگی videoId، playlistId، یا channelId است که یک ویدیو، فهرست پخش، یا منبع کانال خاص را شناسایی می‌کند.

عملیات پشتیبانی‌شده

جدول زیر رایج‌ترین روش‌هایی را که API پشتیبانی می‌کند نشان می‌دهد. برخی‌از منابع از روش‌های دیگری نیز پشتیبانی می‌کنند که عملکردهای خاص‌تری را برای آن منابع انجام می‌دهند. برای مثال، روش 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، ازجمله درخواست‌های نامعتبر، حداقل یک امتیاز هزینه سهمیه دارند. می‌توانید سهمیه دردسترس برای برنامه‌تان را در API Console پیدا کنید.

پروژه‌هایی که YouTube Data API را فعال می‌کنند، دارای تخصیص سهمیه پیش‌فرض ۱۰۰ search.list تماس، ۱۰۰ videos.insert تماس، و ۱۰٬۰۰۰ واحد در روز به‌صورت ترکیبی برای همه نقاط پایانی دیگر هستند. سهمیه پیش‌فرض، که ممکن است تغییر کند، به ما کمک می‌کند تخصیص‌های سهمیه را بهینه کنیم و زیرساخت خود را به روشی که برای کاربران API ما معنادارتر است مقیاس‌بندی کنیم. می‌توانید میزان استفاده از سهمیه را در صفحه سهمیه‌ها در «کنسول API» ببینید.

توجه: اگر به حد سهمیه رسیدید، می‌توانید با تکمیل فرم درخواست افزایش سهمیه برای «خدمات API YouTube»، سهمیه اضافی درخواست کنید.

درحال محاسبه استفاده از سهمیه

Google با اختصاص دادن هزینه به هر درخواست، میزان استفاده از سهمیه را محاسبه می‌کند. انواع مختلف عملیات هزینه‌های سهمیه متفاوتی دارند. برای مثال:

  • یک عملیات خواندن که فهرستی از منابع (کانال‌ها، ویدیوها، فهرست‌های پخش) را بازیابی می‌کند، معمولاً ۱ واحد هزینه دارد.
  • عملیات نوشتن که منبعی را ایجاد، به‌روزرسانی، یا حذف می‌کند معمولاً 50 واحد هزینه دارد.
  • پرسمان جستجو 1 واحد هزینه دارد.
  • بارگذاری ویدیو 1 واحد هزینه دارد.

جدول هزینه‌های سهمیه برای درخواست‌های API هزینه سهمیه هر روش API را نشان می‌دهد. با درنظر گرفتن این قوانین، می‌توانید تعداد درخواست‌هایی را که برنامه‌تان می‌تواند در روز ارسال کند بدون اینکه از سهمیه‌تان فراتر رود تخمین بزنید.

منابع جزئی

این API امکان بازیابی منابع جزئی را فراهم می‌کند و درواقع آن را الزامی می‌کند تا برنامه‌ها از انتقال، تجزیه، و ذخیره داده‌های غیرضروری اجتناب کنند. این رویکرد همچنین تضمین می‌کند که میانای برنامه‌سازی کاربردی از منابع شبکه، CPU، و حافظه به‌طور کارآمدتری استفاده می‌کند.

این API از دو پارامتر درخواست پشتیبانی می‌کند که در بخش‌های زیر توضیح داده شده‌اند و به شما امکان می‌دهند ویژگی‌های منبعی را که باید در پاسخ‌های API گنجانده شوند شناسایی کنید.

  • پارامتر part گروه‌هایی از ویژگی‌ها را که باید برای منبع برگردانده شوند شناسایی می‌کند.
  • پارامتر fields پاسخ میانای برنامه‌سازی کاربردی را فیلتر می‌کند تا فقط ویژگی‌های خاصی را در بخش‌های منبع درخواست‌شده برگرداند.

نحوه استفاده از پارامتر part

پارامتر part یک پارامتر الزامی برای هر درخواست API است که منبعی را بازیابی یا برمی‌گرداند. این پارامتر یک یا چند ویژگی منبع سطح بالا (غیرتودرتو) را که باید در پاسخ میانای برنامه‌سازی کاربردی گنجانده شود شناسایی می‌کند. برای مثال، یک منبع video دارای بخش‌های زیر است:

  • snippet
  • contentDetails
  • fileDetails
  • player
  • processingDetails
  • recordingDetails
  • statistics
  • status
  • suggestions
  • topicDetails

همه این بخش‌ها اشیایی هستند که حاوی دارایی‌های تودرتو هستند و می‌توانید این اشیا را به‌عنوان گروه‌هایی از فیلدهای فراداده درنظر بگیرید که ممکن است کارگزار API آن‌ها را بازیابی کند (یا نکند). به همین دلیل، پارامتر part از شما می‌خواهد مؤلفه‌های منبعی را که برنامه‌تان واقعاً استفاده می‌کند انتخاب کنید. این الزام دو هدف کلیدی را دنبال می‌کند:

  • این کار با جلوگیری از صرف زمان سرور API برای بازیابی فیلدهای فراداده‌ای که برنامه شما استفاده نمی‌کند، تأخیر را کاهش می‌دهد.
  • این کار با کاهش (یا حذف) مقدار داده‌های غیرضروری که ممکن است برنامه شما بازیابی کند، مصرف پهنای باند را کاهش می‌دهد.

با گذشت زمان، با افزودن بخش‌های بیشتر توسط منابع، این مزایا افزایش می‌یابد زیرا برنامه شما ویژگی‌های جدید معرفی‌شده‌ای را که پشتیبانی نمی‌کند درخواست نخواهد کرد.

نحوه استفاده از پارامتر fields

پارامتر fields پاسخ API را فیلتر می‌کند، که فقط شامل بخش‌های منبع شناسایی‌شده در مقدار پارامتر 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/position
  • fields=items(id,snippet/title,snippet/position)
  • fields=items(id,snippet(title,position))

توجه: مانند همه مقادیر پارامتر پُرسمان، مقدار پارامتر fields باید کدبندی نشانی وب شود. برای خوانایی بهتر، مثال‌های این سند کدبندی را حذف می‌کنند.

درخواست‌های جزئی نمونه

مثال‌های زیر نشان می‌دهد که چگونه می‌توانید از پارامترهای part و fields استفاده کنید تا مطمئن شوید پاسخ‌های API فقط شامل داده‌هایی است که برنامه شما استفاده می‌کند:

  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 a video resource 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 the part parameter value so that the contentDetails and status properties 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 the fields parameter to remove all kind and etag properties 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 the fields parameter from example 3 so that in the API response, each video resource's snippet object only includes the channelId, title, and categoryId properties. 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" } } ] }

درحال بهینه‌سازی عملکرد

استفاده از ETags

ETags، بخش استانداردی از پروتکل HTTP، به برنامه‌ها اجازه می‌دهد به نسخه خاصی از منبع میانای برنامه‌سازی کاربردی خاصی ارجاع دهند. منبع می‌تواند کل فید یا یک مورد در آن فید باشد. این عملکرد از موارد استفاده زیر پشتیبانی می‌کند:

  • ذخیره در حافظه نهان و بازیابی شرطی – برنامه شما می‌تواند منابع API و ETag آن‌ها را در حافظه نهان ذخیره کند. سپس، وقتی برنامه شما دوباره منبع ذخیره‌شده‌ای را درخواست می‌کند، ETag مرتبط با آن منبع را مشخص می‌کند. اگر منبع تغییر کرده باشد، API منبع اصلاح‌شده و ETag مرتبط با آن نسخه از منبع را برمی‌گرداند. اگر منبع تغییر نکرده باشد، API پاسخ HTTP 304 (Not Modified) را برمی‌گرداند که نشان می‌دهد منبع تغییر نکرده است. برنامه شما می‌تواند با ارائه منابع ذخیره‌شده در حافظه نهان به این روش، تأخیر و استفاده از پهنای باند را کاهش دهد.

    کتابخانه‌های کارخواه برای «میاناهای برنامه‌سازی کاربردی Google» در پشتیبانی از ETags متفاوت هستند. برای مثال، کتابخانه مشتری JavaScript از ETags ازطریق فهرست سفید برای سرایندهای درخواست مجاز که شامل If-Match و If-None-Match است پشتیبانی می‌کند. فهرست سفید اجازه می‌دهد حافظه پنهان مرورگر عادی اتفاق بیفتد تا اگر ETag منبع تغییر نکرده باشد، منبع بتواند از حافظه پنهان مرورگر ارائه شود. ازسوی‌دیگر، کارخواه Obj-C از ETags پشتیبانی نمی‌کند.

  • محافظت دربرابر بازنویسی ناخواسته تغییرات – ETags کمک می‌کند تا اطمینان حاصل شود که چندین کارخواه میانای برنامه‌سازی کاربردی به‌طور ناخواسته تغییرات یکدیگر را بازنویسی نمی‌کنند. هنگام به‌روزرسانی یا حذف منبع، برنامه شما می‌تواند ETag منبع را مشخص کند. اگر ETag با جدیدترین نسخه آن منبع مطابقت نداشته باشد، درخواست API ناموفق خواهد بود.

استفاده از ETag در برنامه‌تان چندین مزیت دارد:

  • میانای برنامه‌سازی کاربردی به درخواست‌های منابع ذخیره‌شده در حافظه نهان اما تغییرنیافته سریع‌تر پاسخ می‌دهد و درنتیجه تأخیر و مصرف پهنای باند کاهش می‌یابد.
  • برنامه شما به‌طور ناخواسته تغییرات منبعی را که از مشتری API دیگری ایجاد شده است رونویسی نخواهد کرد.

‫Google APIs Client Library for JavaScript از سرصفحه‌های درخواست اچ‌تی‌تی‌پی If-Match و If-None-Match پشتیبانی می‌کند، بنابراین ETag را قادر می‌سازد در زمینه حافظه نهان مرورگر معمولی کار کند.

استفاده از gzip

همچنین می‌توانید با فعال کردن فشرده‌سازی gzip، پهنای باند موردنیاز برای هر پاسخ میانای برنامه‌سازی کاربردی را کاهش دهید. اگرچه برنامه شما برای از حالت فشرده خارج کردن پاسخ‌های میانای برنامه‌سازی کاربردی به زمان واحد پردازش مرکزی بیشتری نیاز دارد، اما مزیت مصرف منابع شبکه کمتر معمولاً بر این هزینه می‌چربد.

برای دریافت پاسخ کدگذاری‌شده با gzip باید دو کار انجام دهید:

  • سرصفحه درخواست اچ‌تی‌تی‌پی‌اس Accept-Encoding را روی gzip تنظیم کنید.
  • نماینده کاربرتان را اصلاح کنید تا حاوی رشته gzip باشد.

سرصفحه‌های HTTP نمونه زیر این الزامات را برای فعال کردن فشرده‌سازی gzip نشان می‌دهند:

Accept-Encoding: gzip
User-Agent: my program (gzip)