نمای کلی API داده YouTube

مقدمه

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

قبل از شروع

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

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

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

    1. به کنسول API بروید و پروژه‌ای را که ثبت کرده‌اید انتخاب کنید.
    2. به صفحه APIهای فعال‌شده مراجعه کنید. در لیست APIها، مطمئن شوید که وضعیت برای YouTube Data API نسخه ۳ روشن است.

  4. اگر برنامه شما از هر روش API که نیاز به مجوز کاربر دارد استفاده می‌کند، راهنمای احراز هویت را برای یادگیری نحوه پیاده‌سازی مجوز OAuth 2.0 مطالعه کنید.

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

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

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

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

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

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

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

جدول زیر رایج‌ترین متدهایی را که API پشتیبانی می‌کند نشان می‌دهد. برخی منابع همچنین از متدهای دیگری پشتیبانی می‌کنند که عملکردهای خاص‌تری را برای آن منابع انجام می‌دهند. به عنوان مثال، متد videos.rate امتیاز کاربر را به یک ویدیو مرتبط می‌کند و متد thumbnails.set تصویر کوچک یک ویدیو را در YouTube آپلود کرده و آن را به یک ویدیو مرتبط می‌کند.

عملیات
list لیستی از صفر یا چند منبع را بازیابی می‌کند ( GET ).
insert یک منبع جدید ( POST ) ایجاد می‌کند.
update یک منبع موجود را برای انعکاس داده‌ها در درخواست شما تغییر می‌دهد ( PUT ).
delete یک منبع خاص را حذف می‌کند ( DELETE ).

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

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

پروژه‌هایی که API داده یوتیوب را فعال می‌کنند، سهمیه پیش‌فرض ۱۰،۰۰۰ واحد در روز دارند، مبلغی که برای اکثریت قریب به اتفاق کاربران API ما کافی است. سهمیه پیش‌فرض، که قابل تغییر است، به ما کمک می‌کند تا تخصیص سهمیه را بهینه کنیم و زیرساخت خود را به گونه‌ای مقیاس‌بندی کنیم که برای کاربران API ما معنادارتر باشد. می‌توانید میزان استفاده از سهمیه خود را در صفحه سهمیه‌ها در کنسول API مشاهده کنید.

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

محاسبه میزان استفاده از سهمیه

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

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

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

منابع جزئی

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

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

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

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

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

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

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

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

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

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

پارامتر fields پاسخ API را فیلتر می‌کند، که فقط شامل بخش‌های منبع مشخص شده در مقدار پارامتر part است، به طوری که پاسخ فقط شامل مجموعه‌ای خاص از فیلدها می‌شود. پارامتر fields به شما امکان می‌دهد ویژگی‌های تو در تو را از یک پاسخ API حذف کنید و در نتیجه استفاده از پهنای باند خود را بیشتر کاهش دهید. (از پارامتر part نمی‌توان برای فیلتر کردن ویژگی‌های تو در تو از یک پاسخ استفاده کرد.)

قوانین زیر، سینتکس پشتیبانی‌شده برای مقدار پارامتر fields را توضیح می‌دهند که تا حدودی مبتنی بر سینتکس XPath است:

  • برای انتخاب چندین فیلد از یک لیست جدا شده با کاما ( fields=a,b ) استفاده کنید.
  • برای مشخص کردن همه فیلدها از علامت ستاره ( fields=* ) به عنوان wildcard استفاده کنید.
  • از پرانتز ( fields=a(b,c) ) برای مشخص کردن گروهی از ویژگی‌های تو در تو که در پاسخ API گنجانده خواهند شد، استفاده کنید.
  • برای مشخص کردن یک ویژگی تو در تو، از یک اسلش ( fields=a/b ) استفاده کنید.

در عمل، این قوانین اغلب به چندین مقدار پارامتر fields مختلف اجازه می‌دهند تا پاسخ API یکسانی را بازیابی کنند. برای مثال، اگر می‌خواهید شناسه، عنوان و موقعیت آیتم لیست پخش را برای هر آیتم در یک لیست پخش بازیابی کنید، می‌توانید از هر یک از مقادیر زیر استفاده کنید:

  • fields=items/id,playlistItems/snippet/title,playlistItems/snippet/position
  • fields=items(id,snippet/title,snippet/position)
  • fields=items(id,snippet(title,position))

توجه: همانند تمام مقادیر پارامترهای پرس‌وجو، مقدار پارامتر fields باید به صورت URL کدگذاری شود. برای خوانایی بهتر، مثال‌های این سند از کدگذاری صرف نظر کرده‌اند.

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

مثال‌های زیر نشان می‌دهند که چگونه می‌توانید از پارامترهای 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" } } ] }

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

استفاده از ETag ها

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

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

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

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

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

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

Google APIs Client Library for JavaScript از هدرهای درخواست HTTP If-Match و If-None-Match پشتیبانی می‌کند و در نتیجه ETagها را قادر می‌سازد تا در چارچوب ذخیره‌سازی معمولی مرورگر کار کنند.

استفاده از gzip

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

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

  • هدر درخواست HTTP Accept-Encoding را روی gzip تنظیم کنید.
  • عامل کاربر خود را طوری تغییر دهید که شامل رشته gzip باشد.

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

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