ভূমিকা
এই ডকুমেন্টটি এমন ডেভেলপারদের জন্য তৈরি যারা YouTube-এর সাথে ইন্টারঅ্যাক্ট করে এমন অ্যাপ্লিকেশন লিখতে চান। এটি YouTube এবং API-এর মৌলিক ধারণাগুলি ব্যাখ্যা করে। এটি API-এর বিভিন্ন কার্যকারিতার একটি সারসংক্ষেপও প্রদান করে যা সমর্থন করে।
শুরু করার আগে
গুগল এপিআই কনসোল অ্যাক্সেস করতে, একটি এপিআই কী অনুরোধ করতে এবং আপনার আবেদন নিবন্ধন করতে আপনার একটি গুগল অ্যাকাউন্ট প্রয়োজন।
গুগল ডেভেলপারস কনসোলে একটি প্রকল্প তৈরি করুন এবং অনুমোদনের শংসাপত্রগুলি পান যাতে আপনার অ্যাপ্লিকেশনটি API অনুরোধ জমা দিতে পারে।
আপনার প্রকল্প তৈরি করার পরে, নিশ্চিত করুন যে YouTube ডেটা API আপনার অ্যাপ্লিকেশনটি ব্যবহারের জন্য নিবন্ধিত পরিষেবাগুলির মধ্যে একটি:
- API কনসোলে যান এবং আপনার নিবন্ধিত প্রকল্পটি নির্বাচন করুন।
- Enabled APIs পৃষ্ঠাটি দেখুন। API গুলির তালিকায়, YouTube Data API v3 এর জন্য স্ট্যাটাসটি ON আছে কিনা তা নিশ্চিত করুন।
যদি আপনার অ্যাপ্লিকেশনটি এমন কোনও 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 | একটি রিসোর্স, যেমন একটি ভিডিও, যা একটি প্লেলিস্টের অংশ, তা শনাক্ত করে। প্লেলিস্টআইটেম রিসোর্সে এমন বিশদ বিবরণও থাকে যা প্লেলিস্টে অন্তর্ভুক্ত রিসোর্সটি কীভাবে ব্যবহার করা হয় তা ব্যাখ্যা করে। |
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 সক্ষম করা হয়, তাদের প্রতিদিন ডিফল্ট কোটা বরাদ্দ থাকে ১০,০০০ ইউনিট, যা আমাদের API ব্যবহারকারীদের অধিকাংশের জন্য যথেষ্ট। ডিফল্ট কোটা, যা পরিবর্তন সাপেক্ষে, আমাদের কোটা বরাদ্দ অপ্টিমাইজ করতে এবং আমাদের পরিকাঠামোকে এমনভাবে স্কেল করতে সাহায্য করে যা আমাদের API ব্যবহারকারীদের জন্য আরও অর্থবহ। আপনি API কনসোলের কোটা পৃষ্ঠায় আপনার কোটার ব্যবহার দেখতে পারেন।
দ্রষ্টব্য: যদি আপনি কোটার সীমায় পৌঁছে যান, তাহলে আপনি YouTube API পরিষেবার জন্য কোটা এক্সটেনশন অনুরোধ ফর্ম পূরণ করে অতিরিক্ত কোটার জন্য অনুরোধ করতে পারেন।
কোটা ব্যবহারের হিসাব করা হচ্ছে
প্রতিটি অনুরোধের জন্য একটি খরচ নির্ধারণ করে Google আপনার কোটা ব্যবহারের হিসাব করে। বিভিন্ন ধরণের ক্রিয়াকলাপের জন্য বিভিন্ন কোটা খরচ থাকে। উদাহরণস্বরূপ:
- একটি রিড অপারেশন যা রিসোর্সের তালিকা - চ্যানেল, ভিডিও, প্লেলিস্ট - উদ্ধার করে, সাধারণত ১ ইউনিট খরচ হয়।
- একটি লেখার কাজ যা একটি রিসোর্স তৈরি, আপডেট বা মুছে ফেলতে সাধারণত
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=*) ব্যবহার করুন। - API প্রতিক্রিয়াতে অন্তর্ভুক্ত করা হবে এমন নেস্টেড বৈশিষ্ট্যের একটি গ্রুপ নির্দিষ্ট করতে বন্ধনী (
fields=a(b,c)) ব্যবহার করুন। - একটি নেস্টেড প্রপার্টি সনাক্ত করতে একটি ফরোয়ার্ড স্ল্যাশ (
fields=a/b) ব্যবহার করুন।
বাস্তবে, এই নিয়মগুলি প্রায়শই একই API প্রতিক্রিয়া পুনরুদ্ধার করতে বিভিন্ন fields প্যারামিটার মানগুলিকে অনুমতি দেয়। উদাহরণস্বরূপ, যদি আপনি একটি প্লেলিস্টের প্রতিটি আইটেমের জন্য প্লেলিস্ট আইটেম আইডি, শিরোনাম এবং অবস্থান পুনরুদ্ধার করতে চান, তাহলে আপনি নিম্নলিখিত মানগুলির যেকোনো একটি ব্যবহার করতে পারেন:
-
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 প্রতিক্রিয়াগুলিতে কেবল আপনার অ্যাপ্লিকেশন ব্যবহার করে এমন ডেটা অন্তর্ভুক্ত রয়েছে:
- উদাহরণ ১ এমন একটি ভিডিও রিসোর্স প্রদান করে যাতে চারটি অংশের পাশাপাশি
kindএবংetagবৈশিষ্ট্য অন্তর্ভুক্ত থাকে। - উদাহরণ ২ এমন একটি ভিডিও রিসোর্স প্রদান করে যাতে দুটি অংশের পাশাপাশি
kindএবংetagবৈশিষ্ট্য অন্তর্ভুক্ত থাকে। - উদাহরণ ৩ এমন একটি ভিডিও রিসোর্স প্রদান করে যাতে দুটি অংশ থাকে কিন্তু
kindএবংetagবৈশিষ্ট্য বাদ দেয়। - উদাহরণ ৪ এমন একটি ভিডিও রিসোর্স প্রদান করে যাতে দুটি অংশ থাকে কিন্তু রিসোর্সের
snippetঅবজেক্টের কিছু নেস্টেড প্রোপার্টি ছাড়াওkindএবংetagবাদ দেওয়া হয়।
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 ব্যবহার করা
HTTP প্রোটোকলের একটি স্ট্যান্ডার্ড অংশ, ETags , অ্যাপ্লিকেশনগুলিকে একটি নির্দিষ্ট API রিসোর্সের একটি নির্দিষ্ট সংস্করণ উল্লেখ করার অনুমতি দেয়। রিসোর্সটি একটি সম্পূর্ণ ফিড বা সেই ফিডে থাকা একটি আইটেম হতে পারে। এই কার্যকারিতা নিম্নলিখিত ব্যবহারের ক্ষেত্রে সমর্থন করে:
ক্যাশিং এবং কন্ডিশনাল রিট্রিভাল - আপনার অ্যাপ্লিকেশন API রিসোর্স এবং তাদের ETags ক্যাশ করতে পারে। তারপর, যখন আপনার অ্যাপ্লিকেশনটি আবার একটি সঞ্চিত রিসোর্সের অনুরোধ করে, তখন এটি সেই রিসোর্সের সাথে সম্পর্কিত ETag নির্দিষ্ট করে। যদি রিসোর্সটি পরিবর্তিত হয়ে থাকে, তাহলে API পরিবর্তিত রিসোর্স এবং রিসোর্সের সেই সংস্করণের সাথে সম্পর্কিত ETag ফেরত দেয়। যদি রিসোর্সটি পরিবর্তিত না হয়, তাহলে API একটি HTTP 304 প্রতিক্রিয়া (
Not Modified) ফেরত দেয়, যা নির্দেশ করে যে রিসোর্সটি পরিবর্তিত হয়নি। এই পদ্ধতিতে ক্যাশেড রিসোর্স পরিবেশন করে আপনার অ্যাপ্লিকেশন ল্যাটেন্সি এবং ব্যান্ডউইথ ব্যবহার কমাতে পারে।গুগল এপিআই-এর ক্লায়েন্ট লাইব্রেরিগুলি ETags সমর্থনের ক্ষেত্রে ভিন্ন। উদাহরণস্বরূপ, জাভাস্ক্রিপ্ট ক্লায়েন্ট লাইব্রেরি ETags সমর্থন করে একটি whitelist এর মাধ্যমে allowed request headers এর জন্য যার মধ্যে
If-MatchএবংIf-None-Matchঅন্তর্ভুক্ত। whitelist স্বাভাবিক ব্রাউজার ক্যাশিং ঘটতে দেয় যাতে যদি কোনও রিসোর্সের ETag পরিবর্তন না হয়, তাহলে ব্রাউজার ক্যাশ থেকে রিসোর্সটি পরিবেশন করা যেতে পারে। অন্যদিকে, Obj-C ক্লায়েন্ট ETags সমর্থন করে না।পরিবর্তনের অসাবধানতাবশত ওভাররাইট থেকে রক্ষা করা - ETags নিশ্চিত করতে সাহায্য করে যে একাধিক API ক্লায়েন্ট একে অপরের পরিবর্তনগুলি অসাবধানতাবশত ওভাররাইট না করে। কোনও রিসোর্স আপডেট বা মুছে ফেলার সময়, আপনার অ্যাপ্লিকেশন রিসোর্সের ETag নির্দিষ্ট করতে পারে। যদি ETag সেই রিসোর্সের সাম্প্রতিকতম সংস্করণের সাথে মেলে না, তাহলে API অনুরোধ ব্যর্থ হয়।
আপনার অ্যাপ্লিকেশনে ETags ব্যবহার করলে বেশ কিছু সুবিধা পাওয়া যায়:
- এপিআই ক্যাশে করা কিন্তু অপরিবর্তিত রিসোর্সের অনুরোধে আরও দ্রুত সাড়া দেয়, যার ফলে ল্যাটেন্সি কম হয় এবং ব্যান্ডউইথ ব্যবহার কম হয়।
- আপনার অ্যাপ্লিকেশনটি অন্য API ক্লায়েন্ট থেকে তৈরি কোনও রিসোর্সে করা পরিবর্তনগুলিকে অসাবধানতাবশত ওভাররাইট করবে না।
Google APIs Client Library for JavaScript If-Match এবং If-None-Match HTTP অনুরোধ হেডারগুলিকে সমর্থন করে, যার ফলে ETags সাধারণ ব্রাউজার ক্যাশিংয়ের প্রেক্ষাপটে কাজ করতে সক্ষম হয়।
gzip ব্যবহার করা হচ্ছে
আপনি gzip কম্প্রেশন সক্ষম করে প্রতিটি API প্রতিক্রিয়ার জন্য প্রয়োজনীয় ব্যান্ডউইথও কমাতে পারেন। যদিও আপনার অ্যাপ্লিকেশনের API প্রতিক্রিয়াগুলিকে আনকম্প্রেস করতে অতিরিক্ত CPU সময় লাগবে, কম নেটওয়ার্ক রিসোর্স গ্রহণের সুবিধা সাধারণত সেই খরচের চেয়ে বেশি।
gzip-এনকোডেড প্রতিক্রিয়া পেতে আপনাকে দুটি জিনিস করতে হবে:
-
Accept-EncodingHTTP অনুরোধের হেডারটিgzipএ সেট করুন। - আপনার ব্যবহারকারী এজেন্টকে
gzipস্ট্রিং ধারণ করার জন্য পরিবর্তন করুন।
নীচের নমুনা HTTP হেডারগুলি gzip কম্প্রেশন সক্ষম করার জন্য এই প্রয়োজনীয়তাগুলি প্রদর্শন করে:
Accept-Encoding: gzip User-Agent: my program (gzip)