ভূমিকা
এই দস্তাবেজটি এমন ডেভেলপারদের জন্য যারা YouTube এর সাথে ইন্টারঅ্যাক্ট করে এমন অ্যাপ্লিকেশন লিখতে চান। এটি ইউটিউব এবং API এর মৌলিক ধারণাগুলি ব্যাখ্যা করে। এটি API সমর্থন করে এমন বিভিন্ন ফাংশনগুলির একটি ওভারভিউ প্রদান করে।
আপনি শুরু করার আগে
Google API কনসোল অ্যাক্সেস করতে, একটি API কী অনুরোধ করতে এবং আপনার অ্যাপ্লিকেশন নিবন্ধন করতে আপনার একটি Google অ্যাকাউন্ট প্রয়োজন৷
Google বিকাশকারী কনসোলে একটি প্রকল্প তৈরি করুন এবং অনুমোদনের শংসাপত্রগুলি পান যাতে আপনার অ্যাপ্লিকেশন API অনুরোধগুলি জমা দিতে পারে৷
আপনার প্রোজেক্ট তৈরি করার পরে, নিশ্চিত করুন যে YouTube ডেটা API হল সেই পরিষেবাগুলির মধ্যে একটি যেগুলি ব্যবহার করার জন্য আপনার অ্যাপ্লিকেশন নিবন্ধিত হয়েছে:
- API কনসোলে যান এবং আপনি এইমাত্র নিবন্ধিত প্রকল্পটি নির্বাচন করুন।
- সক্রিয় APIs পৃষ্ঠায় যান। API-এর তালিকায়, YouTube Data API v3- এর জন্য স্ট্যাটাস চালু আছে কিনা তা নিশ্চিত করুন।
আপনার অ্যাপ্লিকেশন যদি এমন কোনো 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 | একটি YouTube ভিডিও, চ্যানেল বা প্লেলিস্ট সম্পর্কে তথ্য রয়েছে যা একটি API অনুরোধে নির্দিষ্ট করা অনুসন্ধান পরামিতিগুলির সাথে মেলে৷ যদিও একটি অনুসন্ধান ফলাফল একটি ভিডিওর মতো একটি অনন্যভাবে শনাক্তযোগ্য সম্পদের দিকে নির্দেশ করে, এটির নিজস্ব স্থায়ী ডেটা নেই৷ |
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 ডেটা API সক্ষম করে তাদের প্রতি দিনে 10,000 ইউনিটের একটি ডিফল্ট কোটা বরাদ্দ থাকে, যা আমাদের সিংহভাগ API ব্যবহারকারীদের জন্য যথেষ্ট। ডিফল্ট কোটা, যা পরিবর্তন সাপেক্ষে, আমাদের কোটা বরাদ্দ অপ্টিমাইজ করতে এবং আমাদের পরিকাঠামোকে এমনভাবে স্কেল করতে সাহায্য করে যা আমাদের API ব্যবহারকারীদের জন্য আরও অর্থবহ৷ আপনি API কনসোলের কোটা পৃষ্ঠায় আপনার কোটা ব্যবহার দেখতে পারেন।
দ্রষ্টব্য: আপনি যদি কোটার সীমায় পৌঁছে যান, আপনি YouTube API পরিষেবাগুলির জন্য কোটা এক্সটেনশন অনুরোধ ফর্মটি পূরণ করে অতিরিক্ত কোটার অনুরোধ করতে পারেন৷
কোটা ব্যবহার গণনা করা হচ্ছে
Google প্রতিটি অনুরোধের জন্য একটি খরচ নির্ধারণ করে আপনার কোটা ব্যবহারের হিসাব করে। বিভিন্ন ধরনের অপারেশনের বিভিন্ন কোটা খরচ আছে। যেমন:
- একটি পঠিত ক্রিয়াকলাপ যা সংস্থানগুলির একটি তালিকা পুনরুদ্ধার করে -- চ্যানেল, ভিডিও, প্লেলিস্ট -- সাধারণত 1 ইউনিট খরচ করে৷
- একটি লেখার ক্রিয়াকলাপ যা একটি সংস্থান তৈরি করে, আপডেট করে বা মুছে দেয় তার জন্য সাধারণত
50
ইউনিট খরচ হয়। - একটি অনুসন্ধান অনুরোধ
100
ইউনিট খরচ. - একটি ভিডিও আপলোডের দাম
1600
ইউনিট।
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 প্রতিক্রিয়াগুলিতে শুধুমাত্র আপনার অ্যাপ্লিকেশন ব্যবহার করা ডেটা অন্তর্ভুক্ত করে:
- উদাহরণ 1 একটি ভিডিও রিসোর্স প্রদান করে যাতে চারটি অংশের পাশাপাশি
kind
এবংetag
বৈশিষ্ট্য অন্তর্ভুক্ত থাকে। - উদাহরণ 2 একটি ভিডিও সংস্থান প্রদান করে যাতে দুটি অংশের পাশাপাশি
kind
এবংetag
বৈশিষ্ট্য অন্তর্ভুক্ত থাকে। - উদাহরণ 3 একটি ভিডিও সংস্থান প্রদান করে যা দুটি অংশ অন্তর্ভুক্ত করে কিন্তু
kind
এবংetag
বৈশিষ্ট্যগুলি বাদ দেয়। - উদাহরণ 4 একটি ভিডিও রিসোর্স প্রদান করে যা দুটি অংশ অন্তর্ভুক্ত করে কিন্তু রিসোর্সের
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 avideo
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 thepart
parameter value so that thecontentDetails
andstatus
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 thefields
parameter to remove allkind
andetag
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 thefields
parameter from example 3 so that in the API response, each video resource'ssnippet
object only includes thechannelId
,title
, andcategoryId
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 সংস্থানের একটি নির্দিষ্ট সংস্করণ উল্লেখ করার অনুমতি দেয়। সম্পদ একটি সম্পূর্ণ ফিড বা সেই ফিডের একটি আইটেম হতে পারে। এই কার্যকারিতা নিম্নলিখিত ব্যবহারের ক্ষেত্রে সমর্থন করে:
ক্যাশিং এবং শর্তসাপেক্ষ পুনরুদ্ধার - আপনার অ্যাপ্লিকেশন API সম্পদ এবং তাদের ETags ক্যাশে করতে পারে। তারপর, যখন আপনার অ্যাপ্লিকেশন আবার একটি সঞ্চিত সম্পদের জন্য অনুরোধ করে, তখন এটি সেই সম্পদের সাথে যুক্ত ETag নির্দিষ্ট করে। রিসোর্স পরিবর্তিত হলে, API পরিবর্তিত রিসোর্স এবং রিসোর্সের সেই সংস্করণের সাথে যুক্ত ETag ফেরত দেয়। রিসোর্স পরিবর্তিত না হলে, API একটি HTTP 304 রেসপন্স প্রদান করে (
Not Modified
), যা নির্দেশ করে যে রিসোর্সটি পরিবর্তিত হয়নি। আপনার অ্যাপ্লিকেশন এই পদ্ধতিতে ক্যাশ করা সংস্থানগুলি পরিবেশন করে লেটেন্সি এবং ব্যান্ডউইথের ব্যবহার কমাতে পারে৷Google API-এর জন্য ক্লায়েন্ট লাইব্রেরি ETags-এর সমর্থনে ভিন্ন। উদাহরণস্বরূপ, জাভাস্ক্রিপ্ট ক্লায়েন্ট লাইব্রেরি অনুমোদিত অনুরোধ শিরোনামগুলির জন্য একটি সাদা তালিকার মাধ্যমে ETags সমর্থন করে যার মধ্যে
If-Match
এবংIf-None-Match
অন্তর্ভুক্ত রয়েছে। হোয়াইটলিস্ট সাধারণ ব্রাউজার ক্যাশিং ঘটতে দেয় যাতে কোনো রিসোর্সের ETag পরিবর্তিত না হলে, রিসোর্সটি ব্রাউজার ক্যাশে থেকে পরিবেশন করা যায়। অন্যদিকে Obj-C ক্লায়েন্ট ETags সমর্থন করে না।পরিবর্তনের অনিচ্ছাকৃত ওভাররাইট থেকে রক্ষা করা - ETags নিশ্চিত করতে সাহায্য করে যে একাধিক API ক্লায়েন্ট অসাবধানতাবশত একে অপরের পরিবর্তনগুলিকে ওভাররাইট করে না। একটি সংস্থান আপডেট বা মুছে ফেলার সময়, আপনার অ্যাপ্লিকেশনটি সংস্থানের ETag নির্দিষ্ট করতে পারে৷ যদি ETag সেই সংস্থানের সাম্প্রতিক সংস্করণের সাথে মেলে না, তাহলে API অনুরোধ ব্যর্থ হয়।
আপনার অ্যাপ্লিকেশনে ETags ব্যবহার করা বিভিন্ন সুবিধা প্রদান করে:
- এপিআই ক্যাশে করা কিন্তু অপরিবর্তিত সম্পদের অনুরোধে আরও দ্রুত সাড়া দেয়, কম লেটেন্সি এবং কম ব্যান্ডউইথ ব্যবহার করে।
- আপনার অ্যাপ্লিকেশন অসাবধানতাবশত অন্য এপিআই ক্লায়েন্ট থেকে করা একটি সংস্থানে পরিবর্তনগুলি ওভাররাইট করবে না।
Google APIs Client Library for JavaScript If-Match
এবং If-None-Match
HTTP অনুরোধ শিরোনাম সমর্থন করে, যার ফলে সাধারণ ব্রাউজার ক্যাশিংয়ের প্রেক্ষাপটে ETags কাজ করতে সক্ষম হয়।
জিজিপ ব্যবহার করে
আপনি gzip কম্প্রেশন সক্ষম করে প্রতিটি API প্রতিক্রিয়ার জন্য প্রয়োজনীয় ব্যান্ডউইথ কমাতে পারেন। যদিও আপনার অ্যাপ্লিকেশানের API প্রতিক্রিয়াগুলিকে কম্প্রেস করতে অতিরিক্ত CPU সময়ের প্রয়োজন হবে, কম নেটওয়ার্ক সংস্থানগুলি ব্যবহার করার সুবিধা সাধারণত সেই খরচের চেয়ে বেশি।
একটি জিজিপ-এনকোডেড প্রতিক্রিয়া পেতে আপনাকে দুটি জিনিস করতে হবে:
-
Accept-Encoding
HTTP অনুরোধ শিরোনামটিকেgzip
এ সেট করুন। - স্ট্রিং
gzip
ধারণ করতে আপনার ব্যবহারকারী এজেন্ট পরিবর্তন করুন।
নীচের নমুনা HTTP শিরোনামগুলি gzip কম্প্রেশন সক্ষম করার জন্য এই প্রয়োজনীয়তাগুলি প্রদর্শন করে:
Accept-Encoding: gzip User-Agent: my program (gzip)