এই ডকুমেন্টে এমন কিছু কৌশল আলোচনা করা হয়েছে যা ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করতে পারেন। কিছু ক্ষেত্রে, উপস্থাপিত ধারণাগুলো ব্যাখ্যা করার জন্য অন্যান্য এপিআই বা জেনেরিক এপিআই থেকে উদাহরণ ব্যবহার করা হয়েছে। তবে, একই ধারণাগুলো গুগল ক্লাসরুম এপিআই-এর ক্ষেত্রেও প্রযোজ্য।
gzip ব্যবহার করে কম্প্রেশন
প্রতিটি অনুরোধের জন্য প্রয়োজনীয় ব্যান্ডউইথ কমানোর একটি সহজ ও সুবিধাজনক উপায় হলো gzip কম্প্রেশন চালু করা। যদিও এর জন্য ফলাফল আনকমপ্রেস করতে অতিরিক্ত সিপিইউ সময়ের প্রয়োজন হয়, তবে নেটওয়ার্ক খরচের তুলনায় এটি সাধারণত খুবই লাভজনক।
gzip-এনকোডেড রেসপন্স পেতে হলে আপনাকে দুটি কাজ করতে হবে: একটি Accept-Encoding হেডার সেট করতে হবে, এবং আপনার ইউজার এজেন্টকে পরিবর্তন করে তাতে gzip স্ট্রিংটি অন্তর্ভুক্ত করতে হবে। gzip কম্প্রেশন চালু করার জন্য সঠিকভাবে গঠিত HTTP হেডারের একটি উদাহরণ নিচে দেওয়া হলো:
Accept-Encoding: gzip User-Agent: my program (gzip)
আংশিক সম্পদ নিয়ে কাজ করা
আপনার এপিআই কলের পারফরম্যান্স উন্নত করার আরেকটি উপায় হলো, ডেটার শুধুমাত্র সেই অংশটির জন্য অনুরোধ করা যেটিতে আপনার আগ্রহ আছে। এর ফলে আপনার অ্যাপ্লিকেশন অপ্রয়োজনীয় ফিল্ড স্থানান্তর, পার্সিং এবং সংরক্ষণ করা এড়াতে পারে, যার ফলে এটি নেটওয়ার্ক, সিপিইউ এবং মেমরির মতো রিসোর্সগুলো আরও দক্ষতার সাথে ব্যবহার করতে পারে।
আংশিক প্রতিক্রিয়া
ডিফল্টরূপে, সার্ভার অনুরোধগুলি প্রক্রিয়া করার পরে একটি রিসোর্সের সম্পূর্ণ রূপ ফেরত পাঠায়। আরও ভালো পারফরম্যান্সের জন্য, আপনি সার্ভারকে শুধুমাত্র আপনার প্রয়োজনীয় ফিল্ডগুলি পাঠাতে বলতে পারেন এবং তার পরিবর্তে একটি আংশিক প্রতিক্রিয়া পেতে পারেন।
আংশিক প্রতিক্রিয়া অনুরোধ করতে, আপনি যে ফিল্ডগুলো ফেরত পেতে চান তা নির্দিষ্ট করার জন্য fields রিকোয়েস্ট প্যারামিটারটি ব্যবহার করুন। প্রতিক্রিয়া ডেটা ফেরত দেয় এমন যেকোনো অনুরোধের সাথে আপনি এই প্যারামিটারটি ব্যবহার করতে পারেন।
উদাহরণ
নিম্নলিখিত উদাহরণটি একটি জেনেরিক (কাল্পনিক) "ডেমো" এপিআই-এর সাথে fields প্যারামিটারের ব্যবহার দেখায়।
সরল অনুরোধ: এই HTTP GET অনুরোধটি fields প্যারামিটারটি বাদ দেয় এবং সম্পূর্ণ রিসোর্সটি ফেরত দেয়।
https://www.googleapis.com/demo/v1
সম্পূর্ণ রিসোর্স প্রতিক্রিয়া: সম্পূর্ণ রিসোর্স ডেটাতে নিম্নলিখিত ফিল্ডগুলো অন্তর্ভুক্ত রয়েছে, এছাড়াও আরও অনেক ফিল্ড আছে যা সংক্ষেপের জন্য বাদ দেওয়া হয়েছে।
{
"kind": "demo",
...
"items": [
{
"title": "First title",
"comment": "First comment.",
"characteristics": {
"length": "short",
"accuracy": "high",
"followers": ["Jo", "Will"],
},
"status": "active",
...
},
{
"title": "Second title",
"comment": "Second comment.",
"characteristics": {
"length": "long",
"accuracy": "medium"
"followers": [ ],
},
"status": "pending",
...
},
...
]
} আংশিক প্রতিক্রিয়ার জন্য অনুরোধ: এই একই রিসোর্সের জন্য নিম্নলিখিত অনুরোধটি ফেরত আসা ডেটার পরিমাণ উল্লেখযোগ্যভাবে কমাতে fields প্যারামিটার ব্যবহার করে।
https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)
আংশিক প্রতিক্রিয়া: উপরের অনুরোধের জবাবে, সার্ভার এমন একটি প্রতিক্রিয়া ফেরত পাঠায় যাতে শুধুমাত্র প্রকারের তথ্যের সাথে একটি সংক্ষিপ্ত আইটেম অ্যারে থাকে, যার প্রতিটি আইটেমে কেবল HTML শিরোনাম এবং দৈর্ঘ্যের বৈশিষ্ট্যগত তথ্য অন্তর্ভুক্ত থাকে।
200 OK
{
"kind": "demo",
"items": [{
"title": "First title",
"characteristics": {
"length": "short"
}
}, {
"title": "Second title",
"characteristics": {
"length": "long"
}
},
...
]
}উল্লেখ্য যে, প্রতিক্রিয়াটি একটি JSON অবজেক্ট, যাতে শুধুমাত্র নির্বাচিত ফিল্ডগুলো এবং তাদের পরিবেষ্টনকারী প্যারেন্ট অবজেক্টগুলো অন্তর্ভুক্ত থাকে।
এরপর fields প্যারামিটারটি কীভাবে ফরম্যাট করতে হয় তার বিশদ বিবরণ দেওয়া হয়েছে, এবং তারপরে রেসপন্সে ঠিক কী ফেরত আসে সে সম্পর্কে আরও বিস্তারিত আলোচনা করা হয়েছে।
ফিল্ড প্যারামিটার সিনট্যাক্স সারাংশ
fields রিকোয়েস্ট প্যারামিটার ভ্যালুর ফরম্যাটটি মূলত XPath সিনট্যাক্সের উপর ভিত্তি করে তৈরি। সমর্থিত সিনট্যাক্সটি নিচে সংক্ষেপে বর্ণনা করা হলো এবং পরবর্তী অংশে অতিরিক্ত উদাহরণ দেওয়া হয়েছে।
- একাধিক ফিল্ড নির্বাচন করতে কমা দিয়ে আলাদা করা তালিকা ব্যবহার করুন।
- ফিল্ড
aএর মধ্যে অবস্থিত ফিল্ডbনির্বাচন করতেa/bব্যবহার করুন;bএর মধ্যে অবস্থিত ফিল্ডcনির্বাচন করতেa/b/cব্যবহার করুন।ব্যতিক্রম: যেসব API রেসপন্সে "data" র্যাপার ব্যবহৃত হয় এবং রেসপন্সটি
data: { ... }মতো দেখতে একটিdataঅবজেক্টের মধ্যে নেস্টেড থাকে, সেগুলোরfieldsস্পেসিফিকেশনে "data" অন্তর্ভুক্ত করবেন না।data/a/bমতো fields স্পেসিফিকেশন সহ data অবজেক্টটি অন্তর্ভুক্ত করলে একটি এরর দেখা দেয়। এর পরিবর্তে, শুধুa/bমতো একটিfieldsস্পেসিফিকেশন ব্যবহার করুন। - অ্যারে বা অবজেক্টের নির্দিষ্ট কিছু সাব-ফিল্ডের সেট অনুরোধ করতে, এক্সপ্রেশনগুলিকে বন্ধনীতে "
( )" রেখে একটি সাব-সিলেক্টর ব্যবহার করুন।উদাহরণস্বরূপ:
fields=items(id,author/email)items` অ্যারের প্রতিটি উপাদানের জন্য শুধুমাত্র আইটেম আইডি এবং লেখকের ইমেল ফেরত দেয়। আপনি একটি একক সাব-ফিল্ডও নির্দিষ্ট করতে পারেন, যেখানেfields=items(id)হলোfields=items/idএর সমতুল্য। - প্রয়োজনে ফিল্ড নির্বাচনে ওয়াইল্ডকার্ড ব্যবহার করুন।
উদাহরণস্বরূপ:
fields=items/pagemap/*একটি পেজম্যাপের সমস্ত অবজেক্ট নির্বাচন করে।
fields প্যারামিটার ব্যবহারের আরও উদাহরণ
নিচের উদাহরণগুলোতে বর্ণনা করা হয়েছে কিভাবে ' fields প্যারামিটারের মান প্রতিক্রিয়াকে প্রভাবিত করে।
দ্রষ্টব্য: সকল কোয়েরি প্যারামিটার মানের মতোই, fields প্যারামিটার মানটিও অবশ্যই URL এনকোড করা থাকতে হবে। পাঠযোগ্যতা বাড়ানোর জন্য, এই নথির উদাহরণগুলিতে এনকোডিং বাদ দেওয়া হয়েছে।
- যে ফিল্ডগুলো ফেরত পেতে চান, সেগুলো চিহ্নিত করুন, অথবা ফিল্ড নির্বাচন করুন।
-
fieldsরিকোয়েস্ট প্যারামিটারের ভ্যালুটি হলো ফিল্ডগুলোর একটি কমা-দ্বারা-বিভক্ত তালিকা, এবং প্রতিটি ফিল্ড রেসপন্সের রুটের সাপেক্ষে নির্দিষ্ট করা হয়। সুতরাং, আপনি যদি কোনো লিস্ট অপারেশন সম্পাদন করেন, তাহলে রেসপন্সটি একটি কালেকশন হয়, এবং এতে সাধারণত রিসোর্সের একটি অ্যারে অন্তর্ভুক্ত থাকে। আপনি যদি এমন কোনো অপারেশন সম্পাদন করেন যা একটিমাত্র রিসোর্স রিটার্ন করে, তাহলে ফিল্ডগুলো সেই রিসোর্সের সাপেক্ষে নির্দিষ্ট করা হয়। আপনার নির্বাচিত ফিল্ডটি যদি একটি অ্যারে হয় (বা অ্যারের অংশ হয়), তাহলে সার্ভার অ্যারের সমস্ত উপাদানের নির্বাচিত অংশটি রিটার্ন করে।
এখানে সংগ্রহ-স্তরের কিছু উদাহরণ দেওয়া হলো:উদাহরণ প্রভাব itemsitems অ্যারের সমস্ত উপাদান ফেরত দেয়, যার মধ্যে প্রতিটি উপাদানের সমস্ত ফিল্ড অন্তর্ভুক্ত থাকে, কিন্তু অন্য কোনো ফিল্ড ফেরত দেয় না। etag,itemsetagফিল্ড এবং items অ্যারের সমস্ত উপাদান উভয়ই ফেরত দেয়।items/titleitems অ্যারের সমস্ত উপাদানের জন্য শুধুমাত্র titleফিল্ডটি ফেরত দেয়।
যখনই কোনো নেস্টেড ফিল্ড রিটার্ন করা হয়, রেসপন্সে তার পরিবেষ্টনকারী প্যারেন্ট অবজেক্টগুলো অন্তর্ভুক্ত থাকে। প্যারেন্ট ফিল্ডগুলোতে অন্য কোনো চাইল্ড ফিল্ড অন্তর্ভুক্ত থাকে না, যদি না সেগুলোও স্পষ্টভাবে নির্বাচন করা হয়।context/facets/labelfacetsঅ্যারের সকল সদস্যের জন্য শুধুমাত্রlabelফিল্ডটি ফেরত দেয়, যা নিজেইcontextঅবজেক্টের অধীনে নেস্টেড থাকে।items/pagemap/*/titleitems অ্যারের প্রতিটি উপাদানের জন্য, pagemapএর চাইল্ড হিসেবে থাকা সমস্ত অবজেক্টের শুধুমাত্রtitleফিল্ডটি (যদি থাকে) রিটার্ন করে।
এখানে সম্পদ-স্তরের কিছু উদাহরণ দেওয়া হলো:উদাহরণ প্রভাব titleঅনুরোধকৃত রিসোর্সের titleক্ষেত্রটি ফেরত দেয়।author/uriঅনুরোধকৃত রিসোর্সের authorঅবজেক্টেরuriসাব-ফিল্ডটি ফেরত দেয়।links/*/hreflinksএর চাইল্ড হিসেবে থাকা সমস্ত অবজেক্টেরhrefফিল্ডটি রিটার্ন করে। - উপ-নির্বাচন ব্যবহার করে নির্দিষ্ট ফিল্ডের শুধু অংশবিশেষের জন্য অনুরোধ করুন।
- ডিফল্টরূপে, আপনার অনুরোধে নির্দিষ্ট ফিল্ড উল্লেখ করা থাকলে, সার্ভার অবজেক্ট বা অ্যারের উপাদানগুলো সম্পূর্ণভাবে ফেরত দেয়। আপনি এমন একটি প্রতিক্রিয়া নির্দিষ্ট করতে পারেন যাতে কেবল নির্দিষ্ট কিছু সাব-ফিল্ড অন্তর্ভুক্ত থাকে। নিচের উদাহরণের মতো "
( )" সাব-সিলেকশন সিনট্যাক্স ব্যবহার করে আপনি এটি করতে পারেন।উদাহরণ প্রভাব items(title,author/uri)items অ্যারের প্রতিটি উপাদানের জন্য শুধুমাত্র titleএবং লেখকেরuri-এর মান ফেরত দেয়।
আংশিক প্রতিক্রিয়া পরিচালনা করা
সার্ভার যখন fields কোয়েরি প্যারামিটারসহ একটি বৈধ অনুরোধ প্রসেস করে, তখন এটি অনুরোধ করা ডেটার সাথে একটি HTTP 200 OK স্ট্যাটাস কোড ফেরত পাঠায়। যদি ' fields কোয়েরি প্যারামিটারে কোনো ত্রুটি থাকে বা এটি অন্য কোনো কারণে অবৈধ হয়, তবে সার্ভার একটি HTTP 400 Bad Request স্ট্যাটাস কোড ফেরত পাঠায় এবং এর সাথে একটি ত্রুটি বার্তাও দেয়, যা ব্যবহারকারীকে তার ফিল্ড নির্বাচনে কী ভুল ছিল তা জানিয়ে দেয় (উদাহরণস্বরূপ, "Invalid field selection a/b" )।
উপরে ভূমিকা অংশে দেখানো আংশিক প্রতিক্রিয়ার উদাহরণটি এখানে দেওয়া হলো। কোন কোন ফিল্ড ফেরত দেওয়া হবে তা নির্দিষ্ট করার জন্য অনুরোধটিতে fields প্যারামিটারটি ব্যবহার করা হয়েছে।
https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)
আংশিক প্রতিক্রিয়াটি দেখতে এইরকম:
200 OK
{
"kind": "demo",
"items": [{
"title": "First title",
"characteristics": {
"length": "short"
}
}, {
"title": "Second title",
"characteristics": {
"length": "long"
}
},
...
]
} দ্রষ্টব্য: যে API-গুলো ডেটা পেজিনেশনের জন্য কোয়েরি প্যারামিটার সমর্থন করে (যেমন maxResults এবং nextPageToken ), সেগুলোর ক্ষেত্রে প্রতিটি কোয়েরির ফলাফলকে একটি সহনীয় আকারে কমিয়ে আনতে সেই প্যারামিটারগুলো ব্যবহার করুন। অন্যথায়, আংশিক প্রতিক্রিয়ার মাধ্যমে যে পারফরম্যান্স সুবিধা পাওয়া সম্ভব, তা হয়তো পাওয়া যাবে না।