ভূমিকা
এই ডকুমেন্টটি সেইসব ডেভেলপারদের জন্য যারা YouTube-এর সাথে ইন্টার্যাক্ট করে এমন অ্যাপ্লিকেশন লিখতে চান। এটি YouTube এবং API-এর মূল ধারণা ব্যাখ্যা করে। এছাড়াও, API-এর সাথে কাজ করে এমন বিভিন্ন ফাংশনের একটি ওভারভিউ প্রদান করে।
শুরু করার আগে
-
Google Cloud কনসোল অ্যাক্সেস করতে, API কীয়ের অনুরোধ করতে এবং আপনার অ্যাপ্লিকেশন রেজিস্টার করতে, আপনার একটি Google অ্যাকাউন্ট প্রয়োজন।
-
Google Developers Console-এ একটি প্রোজেক্ট তৈরি করুন এবং অনুমোদন ক্রেডেনশিয়াল পান যাতে আপনার অ্যাপ্লিকেশন API অনুরোধ জমা দিতে পারে।
-
আপনার প্রোজেক্ট তৈরি করার পরে, আপনার অ্যাপ্লিকেশন যেসব পরিষেবা ব্যবহার করার জন্য রেজিস্টার করা হয়েছে তার মধ্যে YouTube Data API আছে কিনা তা নিশ্চিত করুন:
- Cloud console-এ যান এবং আপনি যে প্রোজেক্টে রেজিস্টার করেছেন সেটি বেছে নিন।
- চালু করা API পৃষ্ঠা দেখুন। চালু করা API-এর তালিকায় YouTube Data API আছে কিনা তা ভাল করে দেখে নিন। এটি চালু করা না থাকলে, API লাইব্রেরি খুলুন এবং API চালু করুন।
-
আপনার অ্যাপ্লিকেশন যদি এমন কোনও API পদ্ধতি ব্যবহার করে যার জন্য ব্যবহারকারীর অনুমোদনের প্রয়োজন হয়, তাহলে OAuth 2.0 অনুমোদন কীভাবে প্রয়োগ করতে হয় তা জানতে যাচাইকরণ নির্দেশিকা পড়ুন।
-
আপনার API প্রয়োগ করার প্রসেস সহজ করতে, একটি ক্লায়েন্ট লাইব্রেরি বেছে নিন।
-
JSON (জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন) ডেটা ফর্ম্যাটের মূল কনসেপ্ট সম্পর্কে জানুন। JSON হল একটি সাধারণ, ভাষা-নিরপেক্ষ ডেটা ফর্ম্যাট যা ইচ্ছামতো ডেটা স্ট্রাকচারের একটি সহজ টেক্সট উপস্থাপনা প্রদান করে। আরও তথ্যের জন্য, json.org দেখুন।
রিসোর্স ও রিসোর্সের ধরন
রিসোর্স হল অনন্য শনাক্তকারী সহ একটি স্বতন্ত্র ডেটা এন্টিটি। নিচের সারণীতে বিভিন্ন ধরনের রিসোর্স সম্পর্কে বর্ণনা করা হয়েছে যেগুলির সাথে আপনি API ব্যবহার করে ইন্টার্যাক্ট করতে পারবেন।
| রিসোর্স | |
|---|---|
activity |
YouTube সাইটে কোনও নির্দিষ্ট ব্যবহারকারীর নেওয়া অ্যাকশন সম্পর্কে তথ্য থাকে। অ্যাক্টিভিটি ফিডে রিপোর্ট করা ব্যবহারকারীর অ্যাকশনের মধ্যে ভিডিও রেটিং, ভিডিও শেয়ার, ভিডিওকে 'পছন্দের' হিসেবে চিহ্নিত করা এবং চ্যানেল বুলেটিন পোস্ট করা সহ আরও অনেক কিছু অন্তর্ভুক্ত। |
channel |
একটি YouTube চ্যানেল সম্পর্কে তথ্য থাকে। |
channelBanner |
কোনও চ্যানেলের জন্য নতুন আপলোড করা ছবিকে ব্যানার ছবি হিসেবে সেট করতে কোন URL ব্যবহার করতে হবে তা শনাক্ত করে। |
channelSection |
চ্যানেল ফিচার করার জন্য বেছে নিয়েছে এমন ভিডিওর সেট সম্পর্কে তথ্য থাকে। যেমন, কোনও বিভাগে চ্যানেলের লেটেস্ট আপলোড, সবচেয়ে জনপ্রিয় আপলোড বা এক বা একাধিক প্লেলিস্টের ভিডিও দেখানো হতে পারে। |
guideCategory |
এমন একটি বিভাগ শনাক্ত করে যা YouTube কন্টেন্ট বা অন্যান্য সূচক যেমন, জনপ্রিয়তার ভিত্তিতে চ্যানেলের সাথে যুক্ত করে। গাইড বিভাগগুলি চ্যানেলগুলিকে এমনভাবে সাজাতে চায় যাতে YouTube ব্যবহারকারীরা সহজেই তাদের পছন্দের কন্টেন্ট খুঁজে পান। চ্যানেল এক বা একাধিক গাইড বিভাগের সাথে যুক্ত থাকতে পারে, তবে সেগুলি কোনও গাইড বিভাগে থাকবেই এমন কোনও গ্যারেন্টি নেই। |
i18nLanguage |
YouTube ওয়েবসাইট কাজ করে এমন অ্যাপ্লিকেশনের ভাষা শনাক্ত করে। অ্যাপ্লিকেশনের ভাষাকে UI ভাষাও বলা যেতে পারে। |
i18nRegion |
ভৌগোলিক অঞ্চল শনাক্ত করে যা YouTube ব্যবহারকারী কন্টেন্ট দেখার জন্য পছন্দের অঞ্চল হিসেবে বেছে নিতে পারেন। কন্টেন্ট অঞ্চলকে কন্টেন্ট লোকেলও বলা যেতে পারে। |
playlist |
একটি YouTube প্লেলিস্টের প্রতিনিধিত্ব করে। প্লেলিস্ট হল একাধিক ভিডিওর একটি সংগ্রহ যা ক্রমানুসারে দেখা এবং অন্যান্য ব্যবহারকারীর সাথে শেয়ার করা যায়। |
playlistItem |
কোনও রিসোর্স শনাক্ত করে, যেমন কোনও ভিডিও, যা প্লেলিস্টের অংশ। playlistItem রিসোর্সে এমন বিবরণও থাকে যা ব্যাখ্যা করে যে কীভাবে অন্তর্ভুক্ত রিসোর্স প্লেলিস্টে ব্যবহার করা হয়। |
search result |
API অনুরোধে উল্লেখ করা সার্চ প্যারামিটারের সাথে মিলে যায় এমন YouTube ভিডিও, চ্যানেল বা প্লেলিস্ট সম্পর্কে তথ্য থাকে। কোনও সার্চ ফলাফল যখন কোনও অনন্যভাবে শনাক্তযোগ্য রিসোর্সের দিকে ইঙ্গিত করে, যেমন কোনও ভিডিও, তখন সেটির নিজস্ব স্থায়ী ডেটা থাকে না। |
subscription |
YouTube ব্যবহারকারীর সাবস্ক্রিপশন সংক্রান্ত তথ্য থাকে। কোনও চ্যানেলে নতুন ভিডিও যোগ করা হলে অথবা অন্য কোনও ব্যবহারকারী YouTube-এ কোনও অ্যাকশন নিলে, যেমন ভিডিও আপলোড করা, ভিডিওতে রেটিং দেওয়া বা ভিডিওতে কমেন্ট করা, সাবস্ক্রিপশন ব্যবহারকারীকে বিজ্ঞপ্তি পাঠায়। |
thumbnail |
কোনও রিসোর্সের সাথে যুক্ত থাম্বনেল ছবি শনাক্ত করে। |
video |
একটি YouTube ভিডিওকে বোঝায়। |
videoCategory |
আপলোড করা ভিডিওর সাথে যুক্ত বা যুক্ত হতে পারে এমন বিভাগ শনাক্ত করে। |
watermark |
নির্দিষ্ট চ্যানেলের ভিডিও প্লেব্যাকের সময় দেখানো ছবি শনাক্ত করে। এছাড়াও, চ্যানেল মালিক টার্গেট চ্যানেল নির্দিষ্ট করতে পারেন যেখানে ছবির লিঙ্ক এবং টাইমিংয়ের বিবরণ থাকে। এর মাধ্যমে ভিডিও প্লেব্যাকের সময় কখন ওয়াটারমার্ক দেখানো হবে এবং কতক্ষণ দেখানো হবে তা নির্ধারণ করা হয়। |
মনে রাখবেন, অনেক ক্ষেত্রে, একটি রিসোর্সে অন্যান্য রিসোর্সের রেফারেন্স থাকে। যেমন, playlistItem রিসোর্সের snippet.resourceId.videoId প্রপার্টি একটি ভিডিও রিসোর্স শনাক্ত করে, যা ভিডিও সম্পর্কে সম্পূর্ণ তথ্য ধারণ করে। অন্য একটি উদাহরণ হিসেবে, সার্চ ফলাফলে 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-এ দেখতে পাবেন।
যেসব প্রোজেক্ট YouTube Data API চালু করে, সেগুলির জন্য ডিফল্ট কোটা হিসেবে ১০০টি search.list কল, ১০০টি videos.insert কল এবং অন্যান্য সব এন্ডপয়েন্টের জন্য একসাথে প্রতিদিন ১০,০০০ ইউনিট বরাদ্দ করা হয়। ডিফল্ট কোটা, যা পরিবর্তন করা যেতে পারে, তা আমাদের কোটা অ্যালোকেশন অপ্টিমাইজ করতে এবং আমাদের ইনফ্রাস্ট্রাকচারকে এমনভাবে স্কেল করতে সাহায্য করে যা আমাদের API ব্যবহারকারীদের জন্য আরও অর্থপূর্ণ। API কনসোলে কোটা পৃষ্ঠায় আপনার কোটা ব্যবহার দেখতে পাবেন।
মনে রাখবেন: আপনি কোটার সীমায় পৌঁছে গেলে, YouTube API পরিষেবার জন্য কোটা এক্সটেনশন অনুরোধ ফর্ম পূরণ করে অতিরিক্ত কোটার অনুরোধ করতে পারবেন।
কোটা ব্যবহার গণনা করা হচ্ছে
Google প্রতিটি অনুরোধের জন্য একটি খরচ নির্ধারণ করে আপনার কোটা ব্যবহার গণনা করে। বিভিন্ন ধরনের অপারেশনের জন্য কোটার খরচ আলাদা আলাদা হয়। যেমন:
- একটি রিড অপারেশন যা রিসোর্সের একটি তালিকা -- চ্যানেল, ভিডিও, প্লেলিস্ট -- সাধারণত ১ ইউনিট খরচ করে।
- একটি রাইট অপারেশন যা একটি রিসোর্স তৈরি, আপডেট বা মুছে দেয় তার জন্য সাধারণত
50ইউনিট খরচ হয়। - একটি সার্চ কোয়েরির জন্য
1ইউনিট খরচ হয়। - ভিডিও আপলোড করতে
1ইউনিট খরচ হয়।
API অনুরোধের জন্য কোটা খরচ সারণী প্রতিটি API পদ্ধতির কোটা খরচ দেখায়। এইসব নিয়ম মাথায় রেখে, আপনার কোটা অতিক্রম না করে, আপনার অ্যাপ্লিকেশন প্রতিদিন কতগুলি অনুরোধ পাঠাতে পারে তার সংখ্যা আপনি অনুমান করতে পারবেন।
আংশিক রিসোর্স
API আংশিক রিসোর্স ফিরিয়ে আনার অনুমতি দেয় এবং আসলে এর প্রয়োজন হয়, যাতে অ্যাপ্লিকেশন অপ্রয়োজনীয় ডেটা ট্রান্সফার, পার্স ও স্টোর করা এড়াতে পারে। এই পদ্ধতি এটিও নিশ্চিত করে যে API নেটওয়ার্ক, CPU ও মেমরি রিসোর্স আরও দক্ষতার সাথে ব্যবহার করে।
API দুটি অনুরোধ প্যারামিটারকে সমর্থন করে, যা নিম্নলিখিত বিভাগে ব্যাখ্যা করা হয়েছে, যা আপনাকে রিসোর্স প্রপার্টি শনাক্ত করতে সক্ষম করে যা API রেসপন্সে অন্তর্ভুক্ত করা উচিত।
partপ্যারামিটারটি প্রপার্টির গ্রুপ শনাক্ত করে যা কোনও রিসোর্সের জন্য ফেরত দেওয়া উচিত।fieldsপ্যারামিটার API রেসপন্স ফিল্টার করে যাতে অনুরোধ করা রিসোর্স অংশের মধ্যে শুধুমাত্র নির্দিষ্ট প্রপার্টি ফেরত দেওয়া যায়।
part প্যারামিটার কীভাবে ব্যবহার করতে হয়
part প্যারামিটারটি যেকোনও API অনুরোধের জন্য একটি প্রয়োজনীয় প্যারামিটার যা কোনও রিসোর্স ফিরিয়ে আনে বা ফেরত দেয়। প্যারামিটারটি এক বা একাধিক টপ-লেভেল (নন-নেস্টেড) রিসোর্স প্রপার্টি শনাক্ত করে যা API রেসপন্সে অন্তর্ভুক্ত করা উচিত। যেমন, video রিসোর্সে নিম্নলিখিত অংশগুলি থাকে:
snippetcontentDetailsfileDetailsplayerprocessingDetailsrecordingDetailsstatisticsstatussuggestionstopicDetails
এইসব অংশ হল অবজেক্ট যেগুলিতে নেস্টেড প্রপার্টি থাকে এবং আপনি এইসব অবজেক্টকে মেটাডেটা ফিল্ডের গ্রুপ হিসেবে ভাবতে পারেন যা API সার্ভার পেতে (বা নাও পেতে) পারে। তাই, part প্যারামিটারের জন্য আপনাকে সেইসব রিসোর্স কম্পোনেন্ট বেছে নিতে হবে যা আপনার অ্যাপ্লিকেশন বাস্তবে ব্যবহার করে। এই প্রয়োজনীয়তা দুটি মূল উদ্দেশ্য পূরণ করে:
- আপনার অ্যাপ্লিকেশন ব্যবহার করে না এমন মেটাডেটা ফিল্ড ফিরিয়ে আনার জন্য API সার্ভারকে সময় ব্যয় করা থেকে বিরত রেখে এটি লেটেন্সি কমায়।
- আপনার অ্যাপ্লিকেশন যে পরিমাণ অপ্রয়োজনীয় ডেটা ফিরিয়ে আনতে পারে তা কমিয়ে (বা বাদ দিয়ে) এটি ব্যান্ডউইথের ব্যবহার কমায়।
সময়ের সাথে সাথে, রিসোর্স আরও পার্ট যোগ করলে, এইসব সুবিধা শুধু বাড়তেই থাকবে, কারণ আপনার অ্যাপ্লিকেশন নতুন করে যোগ করা প্রপার্টির জন্য অনুরোধ করবে না যা এটি সাপোর্ট করে না।
fields প্যারামিটার কীভাবে ব্যবহার করতে হয়
fields প্যারামিটার API উত্তর ফিল্টার করে, যাতে শুধুমাত্র part প্যারামিটার ভ্যালুতে শনাক্ত করা রিসোর্স পার্ট থাকে, ফলে উত্তরে শুধুমাত্র নির্দিষ্ট ফিল্ডের সেট থাকে। fields প্যারামিটার আপনাকে API উত্তর থেকে নেস্টেড প্রপার্টি সরিয়ে দিতে এবং এর ফলে আপনার ব্যান্ডউইথ ব্যবহার আরও কমাতে দেয়। (part প্যারামিটার ব্যবহার করে কোনও উত্তরের নেস্টেড প্রপার্টি ফিল্টার করা যায় না।)
নিম্নলিখিত নিয়মগুলি fields প্যারামিটার ভ্যালুর জন্য কাজ করে এমন সিনট্যাক্স ব্যাখ্যা করে, যা XPath সিনট্যাক্সের উপর ভিত্তি করে তৈরি:
- একাধিক ফিল্ড বেছে নিতে কমা দিয়ে আলাদা করা তালিকা (
fields=a,b) ব্যবহার করুন। - সব ফিল্ড শনাক্ত করতে ওয়াইল্ডকার্ড হিসেবে তারকাচিহ্ন (
fields=*) ব্যবহার করুন। - API রেসপন্সে অন্তর্ভুক্ত করা হবে এমন নেস্টেড প্রপার্টির গ্রুপ নির্দিষ্ট করতে বন্ধনী (
fields=a(b,c)) ব্যবহার করুন। - নেস্টেড প্রপার্টি শনাক্ত করতে ফরওয়ার্ড স্ল্যাশ (
fields=a/b) ব্যবহার করুন।
বাস্তবে, এই নিয়মগুলি প্রায়ই একই API রেসপন্স ফিরিয়ে আনার জন্য একাধিক আলাদা 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 প্যারামিটার ব্যবহার করে নিশ্চিত করতে পারবেন যে API-এর উত্তরে শুধুমাত্র সেই ডেটা অন্তর্ভুক্ত করা হয়েছে যা আপনার অ্যাপ্লিকেশন ব্যবহার করে:
- উদাহরণ ১-এ এমন একটি ভিডিও রিসোর্স রিটার্ন করা হয় যাতে চারটি অংশ এবং
kindওetagপ্রপার্টি অন্তর্ভুক্ত থাকে। - উদাহরণ ২-এ এমন একটি ভিডিও রিসোর্স রিটার্ন করা হয় যাতে দুটি অংশ এবং
kindওetagপ্রপার্টি থাকে। - উদাহরণ ৩-এ এমন একটি ভিডিও রিসোর্স দেখানো হয়েছে যাতে দুটি পার্ট আছে কিন্তু
kindওetagপ্রপার্টি নেই। - উদাহরণ ৪-এ এমন একটি ভিডিও রিসোর্স রিটার্ন করা হয় যাতে দুটি অংশ অন্তর্ভুক্ত থাকে কিন্তু
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" } } ] }
পারফর্ম্যান্স অপ্টিমাইজ করা
ETags ব্যবহার করা
ETags, যা HTTP প্রোটোকলের একটি স্ট্যান্ডার্ড অংশ, তা অ্যাপ্লিকেশনকে নির্দিষ্ট API রিসোর্সের নির্দিষ্ট ভার্সন রেফার করতে দেয়। রিসোর্সটি সম্পূর্ণ ফিড বা সেই ফিডের কোনও আইটেম হতে পারে। এই ফাংশনালিটি নিম্নলিখিত ব্যবহারের ক্ষেত্রে কাজ করে:
-
ক্যাশিং ও কন্ডিশনাল রিট্রিভাল – আপনার অ্যাপ্লিকেশন API রিসোর্স ও সেগুলির ETag ক্যাশে করতে পারে। তারপর, আপনার অ্যাপ্লিকেশন আবার কোনও সেভ করা রিসোর্সের জন্য অনুরোধ করলে, এটি সেই রিসোর্সের সাথে সম্পর্কিত ETag নির্দিষ্ট করে। রিসোর্স পরিবর্তন করা হলে, API পরিবর্তিত রিসোর্স এবং রিসোর্সের সেই ভার্সনের সাথে যুক্ত ETag ফিরিয়ে দেয়। রিসোর্স পরিবর্তন না হলে, API একটি HTTP 304 রেসপন্স (
Not Modified) পাঠায়, যা ইঙ্গিত করে যে রিসোর্স পরিবর্তন হয়নি। এইভাবে ক্যাশে করা রিসোর্স পরিবেশন করে আপনার অ্যাপ্লিকেশন লেটেন্সি ও ব্যান্ডউইথ ব্যবহার কমাতে পারে।Google API-এর জন্য ক্লায়েন্ট লাইব্রেরি, ETags-এর জন্য তাদের সহায়তার ক্ষেত্রে আলাদা হয়। যেমন, জাভাস্ক্রিপ্ট ক্লায়েন্ট লাইব্রেরি অনুমোদিত রিকোয়েস্ট হেডারের জন্য হোয়াইটলিস্টের মাধ্যমে ETag-কে সমর্থন করে, যার মধ্যে
If-MatchএবংIf-None-Matchঅন্তর্ভুক্ত। হোয়াইটলিস্টের মাধ্যমে সাধারণ ব্রাউজার ক্যাশিং করা যায়, যাতে কোনও রিসোর্সের ETag পরিবর্তন না হলে, রিসোর্সটি ব্রাউজার ক্যাশে থেকে পরিবেশন করা যায়। অন্যদিকে, Obj-C ক্লায়েন্ট ETag-এ কাজ করে না। -
পরিবর্তন ভুলবশত ওভাররাইট হওয়া থেকে রক্ষা করা – একাধিক API ক্লায়েন্ট যাতে ভুলবশত একে অপরের পরিবর্তন ওভাররাইট না করে দেয়, তা নিশ্চিত করতে ETags সাহায্য করে। কোনও রিসোর্স আপডেট বা মুছে ফেলার সময়, আপনার অ্যাপ্লিকেশন রিসোর্সের ETag নির্দিষ্ট করতে পারে। ETag যদি সেই রিসোর্সের সবচেয়ে সাম্প্রতিক ভার্সনের সাথে না মেলে, তাহলে API অনুরোধটি ব্যর্থ হয়।
আপনার অ্যাপ্লিকেশনে ETags ব্যবহার করলে অনেক সুবিধা পাওয়া যায়:
- API, ক্যাশে করা কিন্তু অপরিবর্তিত রিসোর্সের অনুরোধের উত্তর আরও দ্রুত দেয়, ফলে লেটেন্সি ও ব্যান্ডউইথের ব্যবহার কমে যায়।
- আপনার অ্যাপ্লিকেশন অন্য API ক্লায়েন্ট থেকে করা রিসোর্সের পরিবর্তনকে অসাবধানতাবশত ওভাররাইট করবে না।
Google APIs Client Library for JavaScript If-Match ও If-None-Match HTTP অনুরোধ হেডার কাজ করে, এর ফলে সাধারণ ব্রাউজার ক্যাশিংয়ের কনটেক্সটে ETags কাজ করতে পারে।
gzip ব্যবহার করা
এছাড়াও, gzip কম্প্রেশন চালু করে প্রতিটি API রেসপন্সের জন্য প্রয়োজনীয় ব্যান্ডউইথ কমাতে পারবেন। API রেসপন্স আনকম্প্রেস করার জন্য আপনার অ্যাপ্লিকেশনের অতিরিক্ত সিপিইউ টাইম প্রয়োজন হলেও, কম নেটওয়ার্ক রিসোর্স ব্যবহার করার সুবিধা সাধারণত সেই খরচকে ছাপিয়ে যায়।
gzip-এনকোড করা উত্তর পেতে আপনাকে অবশ্যই দুটি কাজ করতে হবে:
Accept-EncodingHTTP অনুরোধ হেডারgzip-এ সেট করুন।gzipস্ট্রিং অন্তর্ভুক্ত করতে আপনার ইউজার এজেন্ট পরিবর্তন করুন।
নিচে দেওয়া স্যাম্পেল HTTP হেডার থেকে gzip কম্প্রেশন চালু করার জন্য এইসব প্রয়োজনীয়তা সম্পর্কে ধারণা পাওয়া যায়:
Accept-Encoding: gzip User-Agent: my program (gzip)