এই নথিতে এমন কিছু কৌশল রয়েছে যা আপনি আপনার অ্যাপ্লিকেশনের কর্মক্ষমতা উন্নত করতে ব্যবহার করতে পারেন। কিছু ক্ষেত্রে, উপস্থাপিত ধারণাগুলিকে চিত্রিত করতে অন্যান্য API বা জেনেরিক API-এর উদাহরণ ব্যবহার করা হয়। যাইহোক, একই ধারণাগুলি কাস্টম অনুসন্ধান JSON API-এর ক্ষেত্রে প্রযোজ্য।
জিজিপ ব্যবহার করে কম্প্রেশন
প্রতিটি অনুরোধের জন্য প্রয়োজনীয় ব্যান্ডউইথ কমানোর একটি সহজ এবং সুবিধাজনক উপায় হল জিজিপ কম্প্রেশন সক্ষম করা। যদিও ফলাফলগুলিকে কম্প্রেস করতে এর জন্য অতিরিক্ত CPU সময় প্রয়োজন, নেটওয়ার্ক খরচের সাথে ট্রেড-অফ সাধারণত এটিকে খুব সার্থক করে তোলে।
একটি gzip-এনকোড করা প্রতিক্রিয়া পাওয়ার জন্য আপনাকে দুটি জিনিস করতে হবে: একটি Accept-Encoding
শিরোনাম সেট করুন এবং স্ট্রিং gzip
ধারণ করতে আপনার ব্যবহারকারী এজেন্টকে পরিবর্তন করুন। এখানে gzip কম্প্রেশন সক্ষম করার জন্য সঠিকভাবে গঠিত HTTP হেডারগুলির একটি উদাহরণ রয়েছে:
Accept-Encoding: gzip User-Agent: my program (gzip)
আংশিক সম্পদ নিয়ে কাজ করা
আপনার API কলগুলির কর্মক্ষমতা উন্নত করার আরেকটি উপায় হল শুধুমাত্র আপনার আগ্রহের ডেটার অংশের জন্য অনুরোধ করা৷ এটি আপনার অ্যাপ্লিকেশনটিকে অপ্রয়োজনীয় ক্ষেত্রগুলি স্থানান্তর, পার্সিং এবং সংরক্ষণ এড়াতে দেয়, যাতে এটি নেটওয়ার্ক, CPU, সহ সংস্থানগুলি ব্যবহার করতে পারে৷ এবং মেমরি আরও দক্ষতার সাথে।
আংশিক প্রতিক্রিয়া
ডিফল্টরূপে, সার্ভার অনুরোধ প্রক্রিয়াকরণের পরে একটি সম্পদের সম্পূর্ণ উপস্থাপনা ফেরত পাঠায়। ভালো পারফরম্যান্সের জন্য, আপনি সার্ভারকে শুধুমাত্র আপনার প্রয়োজনীয় ক্ষেত্রগুলি পাঠাতে এবং পরিবর্তে একটি আংশিক প্রতিক্রিয়া পেতে বলতে পারেন।
একটি আংশিক প্রতিক্রিয়া অনুরোধ করতে, আপনি যে ক্ষেত্রগুলি ফেরত দিতে চান তা নির্দিষ্ট করতে fields
অনুরোধ প্যারামিটার ব্যবহার করুন৷ আপনি এই প্যারামিটারটি যেকোন অনুরোধের সাথে ব্যবহার করতে পারেন যা প্রতিক্রিয়া ডেটা প্রদান করে।
উদাহরণ
নিম্নলিখিত উদাহরণটি একটি জেনেরিক (কাল্পনিক) "ডেমো" API সহ 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)
আংশিক প্রতিক্রিয়া: উপরের অনুরোধের প্রতিক্রিয়া হিসাবে, সার্ভার একটি প্রতিক্রিয়া ফেরত পাঠায় যাতে একটি প্যারড-ডাউন আইটেম অ্যারের সাথে শুধুমাত্র এইচটিএমএল শিরোনাম এবং প্রতিটি আইটেমের দৈর্ঘ্য বৈশিষ্ট্যগত তথ্য অন্তর্ভুক্ত থাকে।
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: { ... }
,fields
স্পেসিফিকেশনে "data
" অন্তর্ভুক্ত করবেন না৷data/a/b
এর মতো ফিল্ড স্পেসিফিকেশন সহ ডেটা অবজেক্ট অন্তর্ভুক্ত করলে একটি ত্রুটি ঘটে। পরিবর্তে, শুধুa/b
এর মত একটিfields
স্পেসিফিকেশন ব্যবহার করুন। - "
( )
" বন্ধনীতে অভিব্যক্তি স্থাপন করে অ্যারে বা বস্তুর নির্দিষ্ট উপ-ক্ষেত্রগুলির একটি সেট অনুরোধ করতে একটি উপ-নির্বাচক ব্যবহার করুন।উদাহরণস্বরূপ:
fields=items(id,author/email)
আইটেম অ্যারের প্রতিটি উপাদানের জন্য শুধুমাত্র আইটেম আইডি এবং লেখকের ইমেল প্রদান করে। আপনি একটি একক উপ-ক্ষেত্রও নির্দিষ্ট করতে পারেন, যেখানেfields=items(id)
fields=items/id
এর সমতুল্য। - প্রয়োজনে ক্ষেত্র নির্বাচনে ওয়াইল্ডকার্ড ব্যবহার করুন।
উদাহরণস্বরূপ:
fields=items/pagemap/*
একটি পেজম্যাপে সমস্ত বস্তু নির্বাচন করে।
ক্ষেত্র প্যারামিটার ব্যবহার করার আরও উদাহরণ
নীচের উদাহরণগুলিতে fields
প্যারামিটার মান প্রতিক্রিয়াকে কীভাবে প্রভাবিত করে তার বর্ণনা অন্তর্ভুক্ত করে।
দ্রষ্টব্য: সমস্ত ক্যোয়ারী প্যারামিটার মানের মতো, fields
প্যারামিটার মান অবশ্যই URL এনকোড করা উচিত। ভাল পঠনযোগ্যতার জন্য, এই নথির উদাহরণগুলি এনকোডিং বাদ দেয়।
- আপনি যে ক্ষেত্রগুলি ফেরত দিতে চান তা চিহ্নিত করুন বা ক্ষেত্র নির্বাচন করুন।
-
fields
অনুরোধ পরামিতি মান হল একটি কমা দ্বারা পৃথক করা ক্ষেত্রগুলির তালিকা, এবং প্রতিটি ক্ষেত্র প্রতিক্রিয়ার মূলের সাপেক্ষে নির্দিষ্ট করা হয়। এইভাবে, যদি আপনি একটি তালিকা অপারেশন সম্পাদন করছেন, প্রতিক্রিয়া একটি সংগ্রহ, এবং এটি সাধারণত সম্পদের একটি অ্যারে অন্তর্ভুক্ত করে। আপনি যদি একটি অপারেশন করছেন যা একটি একক সংস্থান প্রদান করে, ক্ষেত্রগুলি সেই সংস্থানের সাথে সম্পর্কিত নির্দিষ্ট করা হয়। যদি আপনি যে ক্ষেত্রটি নির্বাচন করেন সেটি একটি অ্যারের (বা অংশ) হয়, সার্ভারটি অ্যারের সমস্ত উপাদানের নির্বাচিত অংশ প্রদান করে।
এখানে কিছু সংগ্রহ-স্তরের উদাহরণ রয়েছে:উদাহরণ প্রভাব items
প্রতিটি উপাদানের সমস্ত ক্ষেত্র সহ আইটেম অ্যারের সমস্ত উপাদান প্রদান করে, কিন্তু অন্য কোনো ক্ষেত্র নেই। etag,items
etag
ক্ষেত্র এবং আইটেম অ্যারের সমস্ত উপাদান উভয়ই প্রদান করে।items/title
আইটেম অ্যারের সমস্ত উপাদানের জন্য শুধুমাত্র title
ক্ষেত্র প্রদান করে।
যখনই একটি নেস্টেড ক্ষেত্র ফেরত দেওয়া হয়, তখন প্রতিক্রিয়ার মধ্যে বদ্ধ মূল বস্তু অন্তর্ভুক্ত থাকে। অভিভাবক ক্ষেত্রগুলি অন্য কোনও শিশু ক্ষেত্র অন্তর্ভুক্ত করে না যদি না সেগুলিও স্পষ্টভাবে নির্বাচিত হয়৷context/facets/label
facets
অ্যারের সমস্ত সদস্যের জন্য শুধুমাত্রlabel
ক্ষেত্রটি ফেরত দেয়, যা নিজেইcontext
অবজেক্টের অধীনে নেস্টেড।items/pagemap/*/title
আইটেম অ্যারের প্রতিটি উপাদানের জন্য, pagemap
শিশু সমস্ত বস্তুর শুধুমাত্রtitle
ক্ষেত্র (যদি উপস্থিত থাকে) প্রদান করে।
এখানে কিছু সম্পদ-স্তরের উদাহরণ রয়েছে:উদাহরণ প্রভাব title
অনুরোধ করা সম্পদের title
ক্ষেত্র ফেরত দেয়।author/uri
অনুরোধ করা সম্পদে author
অবজেক্টেরuri
সাব-ফিল্ড ফেরত দেয়।links/*/href
links
সন্তান যে সমস্ত বস্তুরhref
ক্ষেত্র দেখায়। - উপ-নির্বাচন ব্যবহার করে শুধুমাত্র নির্দিষ্ট ক্ষেত্রের অংশগুলির জন্য অনুরোধ করুন।
- ডিফল্টরূপে, যদি আপনার অনুরোধ নির্দিষ্ট ক্ষেত্র নির্দিষ্ট করে, সার্ভার তাদের সম্পূর্ণরূপে বস্তু বা অ্যারে উপাদান প্রদান করে। আপনি একটি প্রতিক্রিয়া নির্দিষ্ট করতে পারেন যাতে শুধুমাত্র কিছু উপ-ক্ষেত্র অন্তর্ভুক্ত থাকে। আপনি "
( )
" উপ-নির্বাচন সিনট্যাক্স ব্যবহার করে এটি করেন, যেমন নীচের উদাহরণে।উদাহরণ প্রভাব items(title,author/uri)
আইটেম অ্যারের প্রতিটি উপাদানের জন্য শুধুমাত্র 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
, উদাহরণস্বরূপ), প্রতিটি কোয়েরির ফলাফলগুলিকে একটি পরিচালনাযোগ্য আকারে কমাতে সেই প্যারামিটারগুলি ব্যবহার করুন৷ অন্যথায়, আংশিক প্রতিক্রিয়ার সাথে পারফরম্যান্সের লাভগুলি উপলব্ধি করা যাবে না।