এই পৃষ্ঠাটি বর্ণনা করে যে আপনি কীভাবে একটি পরিষেবা বাস্তবায়ন করতে পারেন যা চার্ট টুলস ডেটাসোর্স প্রোটোকল সমর্থন করে কোয়েরি ক্লাস ব্যবহার করে চার্টে ডেটা প্রকাশ করতে।
বিষয়বস্তু
শ্রোতা
এই পৃষ্ঠাটি মূলত ডেভেলপারদের জন্য যারা চার্ট টুলস ডেটাসোর্স লাইব্রেরির সাহায্য ছাড়াই তাদের নিজস্ব ডেটা উৎস তৈরি করবে। আপনি যদি এটি বা অন্য কোন সাহায্যকারী লাইব্রেরি ব্যবহার করেন তবে প্রথমে আপনার লাইব্রেরির ডকুমেন্টেশন পড়ুন।
ক্লায়েন্ট ভিজ্যুয়ালাইজেশন এবং ডেটা উৎসের মধ্যে যোগাযোগের জন্য ব্যবহৃত ওয়্যার প্রোটোকল বুঝতে আগ্রহী পাঠকদের জন্যও এই পৃষ্ঠাটি তৈরি করা হয়েছে।
আপনি যদি একটি ভিজ্যুয়ালাইজেশন তৈরি করেন বা ব্যবহার করেন তবে আপনাকে এই পৃষ্ঠাটি পড়ার দরকার নেই৷
এই নথিটি পড়ার জন্য, আপনার মৌলিক JSON এবং HTTP অনুরোধ সিনট্যাক্স বোঝা উচিত। ব্যবহারকারীর দৃষ্টিকোণ থেকে চার্ট কীভাবে কাজ করে তাও আপনাকে বুঝতে হবে।
ওভারভিউ
আপনার নিজের চার্ট বা অন্যান্য চার্টের জন্য ডেটা উৎস প্রদানকারী হওয়ার জন্য আপনি চার্ট টুলস ডেটাসোর্স প্রোটোকল বাস্তবায়ন করতে পারেন। একটি চার্ট টুলস ডেটাসোর্স একটি URL প্রকাশ করে, যাকে ডেটাসোর্স URL বলা হয়, যেখানে একটি চার্ট HTTP GET অনুরোধ পাঠাতে পারে। প্রতিক্রিয়া হিসাবে, ডেটা উত্স সঠিকভাবে ফর্ম্যাট করা ডেটা ফেরত দেয় যা চার্টটি পৃষ্ঠায় গ্রাফিক রেন্ডার করতে ব্যবহার করতে পারে। এই অনুরোধ-প্রতিক্রিয়া প্রোটোকলটি Google ভিজ্যুয়ালাইজেশন API ওয়্যার প্রোটোকল নামে পরিচিত।
একটি ডেটা উত্স দ্বারা পরিবেশিত ডেটা বিভিন্ন সংস্থান থেকে বের করা যেতে পারে, যেমন একটি ফাইল বা ডাটাবেস। একমাত্র সীমাবদ্ধতা হল যে আপনি টাইপ করা কলাম সহ একটি দ্বিমাত্রিক টেবিল হিসাবে ডেটা ফর্ম্যাট করতে পারেন।
একটি চার্ট টুলস ডেটাসোর্স হিসাবে, আপনাকে অবশ্যই একটি নির্দিষ্ট বিন্যাসে একটি অনুরোধ পার্স করতে হবে এবং একটি নির্দিষ্ট বিন্যাসে একটি প্রতিক্রিয়া ফেরত দিতে হবে। আপনি দুটি সাধারণ উপায়ে এটি করতে পারেন:
- অনুরোধ এবং প্রতিক্রিয়া পরিচালনা করতে নিম্নলিখিত সহায়ক লাইব্রেরিগুলির মধ্যে একটি ব্যবহার করুন এবং ফিরে আসার জন্য ডেটা টেবিল তৈরি করুন। আপনি যদি এই লাইব্রেরিগুলির মধ্যে একটি ব্যবহার করেন, তাহলে আপনাকে একটি টেবিলের আকারে লাইব্রেরিতে আপনার ডেটা উপলব্ধ করার জন্য প্রয়োজনীয় কোডটি লিখতে হবে।
- জাভা ডেটাসোর্স লাইব্রেরি - অনুরোধ এবং প্রতিক্রিয়া পরিচালনা করে, আপনার দেওয়া ডেটা থেকে প্রতিক্রিয়া সারণী তৈরি করে এবং Google চার্ট টুল SQL ক্যোয়ারী ভাষা প্রয়োগ করে।
- পাইথন ডেটাসোর্স লাইব্রেরি - একটি প্রতিক্রিয়া টেবিল তৈরি করে প্রতিক্রিয়া সিনট্যাক্স তৈরি করে। অনুরোধ পার্সিং বা Google চার্ট টুল SQL ক্যোয়ারী ভাষা বাস্তবায়ন পরিচালনা করে না ।
বা
- অনুরোধটি পরিচালনা করে, একটি ডেটা টেবিল তৈরি করে এবং প্রতিক্রিয়া পাঠিয়ে স্ক্র্যাচ থেকে আপনার নিজস্ব ডেটা উত্স লিখুন ।
কিভাবে এটা কাজ করে:
- ডেটা উৎস একটি URL প্রকাশ করে, যাকে ডেটাসোর্স URL বলা হয়, যেখানে চার্ট একটি HTTP GET অনুরোধ পাঠায়।
- ক্লায়েন্ট পরামিতি সহ একটি HTTP GET অনুরোধ করে যা ফেরত ডেটা, একটি ঐচ্ছিক ক্যোয়ারী স্ট্রিং এবং ঐচ্ছিক কাস্টম প্যারামিটারগুলির জন্য কোন ফর্ম্যাট ব্যবহার করতে হবে তা বর্ণনা করে৷
- ডেটাসোর্স অনুরোধটি গ্রহণ করে এবং পার্স করে, যেমনটি অনুরোধ বিন্যাসে বর্ণিত হয়েছে।
- ডেটাসোর্স অনুরোধ করা বিন্যাসে ডেটা প্রস্তুত করে; সাধারণত, এটি একটি JSON টেবিল। রেসপন্স ফরম্যাট রেসপন্স ফরম্যাট বিভাগে কভার করা হয়েছে। ডেটাসোর্স ঐচ্ছিকভাবে ভিজ্যুয়ালাইজেশন API ক্যোয়ারী ভাষাকে সমর্থন করতে পারে যা ফিল্টারিং, বাছাই এবং অন্যান্য ডেটা ম্যানিপুলেশন নির্দিষ্ট করে।
- ডেটাসোর্স একটি HTTP প্রতিক্রিয়া তৈরি করে যাতে ক্রমিক ডেটা এবং অন্যান্য প্রতিক্রিয়া পরামিতি অন্তর্ভুক্ত থাকে এবং প্রতিক্রিয়া বিন্যাসে বর্ণিত হিসাবে এটি ক্লায়েন্টের কাছে ফেরত পাঠায়
দ্রষ্টব্য: অনুরোধ এবং প্রতিক্রিয়াগুলির জন্য এই নথিতে তালিকাভুক্ত সমস্ত প্যারামিটার এবং স্ট্রিং ধ্রুবক মান (যেমন responseHandler
এবং "ওকে") ছোট হাতের এবং কেস-সংবেদনশীল।
সর্বনিম্ন প্রয়োজনীয়তা
চার্ট টুলস ডেটাসোর্স হিসাবে পরিবেশন করার জন্য এইগুলি সর্বনিম্ন প্রয়োজনীয়তা:
- তথ্য উৎস HTTP GET অনুরোধ গ্রহণ করা উচিত, এবং আপনার ক্লায়েন্টদের জন্য উপলব্ধ করা উচিত.
- প্রোটোকল একটি সংস্করণ স্কিম পরিবর্তন করতে এবং সমর্থন করতে পারে (বর্তমান সংস্করণটি 0.6), তাই আপনার ডেটা উত্সটি পূর্ববর্তী সংস্করণগুলির পাশাপাশি বর্তমান সংস্করণগুলি ব্যবহার করে অনুরোধগুলিকে সমর্থন করবে৷ দ্রুত নতুন সংস্করণে আপগ্রেড করা কোনো ক্লায়েন্টকে ভাঙতে না দেওয়ার জন্য আপনার নতুন সংস্করণ প্রকাশের সাথে সাথে সমর্থন করার চেষ্টা করা উচিত।
- অনুরোধের অংশ হিসাবে অজানা বৈশিষ্ট্য পাঠানো হলে ব্যর্থ হবেন না। এর কারণ হল নতুন সংস্করণগুলি নতুন বৈশিষ্ট্যগুলি প্রবর্তন করতে পারে যা আপনি জানেন না।
- আপনি প্রত্যাশিত শুধুমাত্র বৈশিষ্ট্য পার্স. যদিও নতুন সংস্করণ নতুন বৈশিষ্ট্য প্রবর্তন করতে পারে, অন্ধভাবে গ্রহণ করবেন না এবং পুরো অনুরোধ স্ট্রিং ব্যবহার করবেন না। দূষিত আক্রমণ থেকে নিজেকে রক্ষা করতে, সাবধানে পার্স করুন এবং শুধুমাত্র আপনার প্রত্যাশার বৈশিষ্ট্যগুলি ব্যবহার করুন৷
- আপনি যদি নিজে ক্লায়েন্ট চার্ট কোডিং না করেন তবে আপনার ডেটা উত্সের প্রয়োজনীয়তাগুলি সাবধানে নথিভুক্ত করুন ৷ এর মধ্যে নিম্নলিখিত তথ্য নথিভুক্ত করা রয়েছে:
- যে কোনো কাস্টম প্যারামিটার যা আপনি গ্রহণ করেন,
- আপনি Google Visualization API ক্যোয়ারী ভাষা পার্স করতে পারেন কি না, এবং
- আপনি কি ধরণের ডেটা ফেরত দেন এবং সেই ডেটার গঠন (সারি এবং কলামগুলি কী প্রতিনিধিত্ব করে এবং যে কোনও লেবেলিং)।
- অজানা ক্লায়েন্টদের কাছ থেকে অনুরোধ গ্রহণ করে এমন একটি সাইটের জন্য সমস্ত মানক নিরাপত্তা সতর্কতা অবলম্বন করুন ৷ আপনি যুক্তিসঙ্গতভাবে আপনার প্যারামিটারে MD5, হ্যাশিং, এবং অন্যান্য নিরাপত্তা ব্যবস্থা সমর্থন করতে পারেন অনুরোধগুলি প্রমাণীকরণ করতে বা দূষিত আক্রমণ থেকে সুরক্ষিত করতে সাহায্য করতে পারেন, এবং আশা করেন ক্লায়েন্টরা আপনার প্রয়োজনীয়তা সম্পর্কে সচেতন থাকবে এবং তাদের প্রতিক্রিয়া জানাবে। যাইহোক, আপনার সমস্ত প্রয়োজনীয়তা ভালভাবে নথিভুক্ত করতে ভুলবেন না, যদি আপনি নিজে চার্ট কোডিং না করেন। নীচে নিরাপত্তা বিবেচনা দেখুন.
- সমস্ত অনুরোধ এবং প্রতিক্রিয়া স্ট্রিং UTF-8 এনকোড করা উচিত।
- সবচেয়ে গুরুত্বপূর্ণ প্রতিক্রিয়া বিন্যাস JSON. প্রথমে JSON প্রয়োগ করতে ভুলবেন না, যেহেতু এটি বেশিরভাগ চার্ট দ্বারা ব্যবহৃত ফর্ম্যাট। পরে অন্যান্য প্রতিক্রিয়া প্রকার যোগ করুন।
- আপনাকে ভিজ্যুয়ালাইজেশন API ক্যোয়ারী ভাষা সমর্থন করার প্রয়োজন নেই, তবে এটি আপনার ডেটা উৎসকে গ্রাহকদের জন্য আরও উপযোগী করে তোলে।
- আপনাকে যেকোনো এবং সব ধরনের চার্ট থেকে অনুরোধ সমর্থন করার প্রয়োজন নেই এবং আপনি কাস্টম চার্টের জন্য কাস্টম প্যারামিটার সমর্থন করতে পারেন। কিন্তু নিচে বর্ণিত স্ট্যান্ডার্ড ফরম্যাটে আপনার প্রতিক্রিয়া ফেরত দেওয়া উচিত।
নিরাপত্তা বিবেচনা
আপনার ডেটা উত্স ডিজাইন করার সময়, আপনাকে বিবেচনা করতে হবে যে আপনার ডেটা কতটা নিরাপদ হওয়া উচিত। আপনি আপনার সাইটের জন্য বিভিন্ন ধরনের নিরাপত্তা স্কিম ব্যবহার করতে পারেন, সহজ পাসওয়ার্ড অ্যাক্সেস থেকে নিরাপদ কুকি প্রমাণীকরণ পর্যন্ত।
XSSI (ক্রস-সাইট স্ক্রিপ্ট অন্তর্ভুক্তি) আক্রমণ চার্টের সাথে একটি ঝুঁকি। একজন ব্যবহারকারী এমন একটি পৃষ্ঠায় নেভিগেট করতে পারে যেখানে একটি দূষিত স্ক্রিপ্ট রয়েছে যা তারপরে বর্তমান ব্যবহারকারীর শংসাপত্র ব্যবহার করে ডেটা উৎস URL-এ প্রশ্ন করার চেষ্টা শুরু করে। ব্যবহারকারী যদি কোনো সাইট থেকে লগ আউট না করে থাকেন, তাহলে স্ক্রিপ্টটি বর্তমান ব্যবহারকারী হিসেবে প্রমাণীকৃত হবে এবং সেই সাইটের অনুমতি থাকবে। একটি <script src> ট্যাগ ব্যবহার করে ক্ষতিকারক স্ক্রিপ্ট JSONP-এর মতো ডেটা উৎস অন্তর্ভুক্ত করতে সক্ষম হতে পারে।
নিরাপত্তার একটি অতিরিক্ত স্তর হিসাবে, আপনি আপনার ডেটা উত্স হিসাবে একই ডোমেন থেকে আসা অনুরোধগুলিকে সীমাবদ্ধ করার কথা বিবেচনা করতে পারেন৷ এটি আপনার ডেটা উত্সের দৃশ্যমানতাকে যথেষ্ট সীমাবদ্ধ করবে, তবে আপনার যদি খুব সংবেদনশীল ডেটা থাকে যা আপনার ডোমেনের বাইরে থেকে অ্যাক্সেস করা উচিত নয়, তাহলে আপনার এটি বিবেচনা করা উচিত। একটি ডেটা উত্স যা শুধুমাত্র একই ডোমেনের অনুরোধগুলিকে অনুমতি দেয় তাকে একটি সীমাবদ্ধ ডেটা উত্স বলা হয়, একটি সীমাবদ্ধ ডেটা উত্সের বিপরীতে, যা যে কোনও ডোমেন থেকে প্রশ্নগুলি গ্রহণ করবে৷ একটি সীমাবদ্ধ ডেটা উত্স কীভাবে প্রয়োগ করতে হয় সে সম্পর্কে এখানে কিছু বিবরণ রয়েছে:
নিশ্চিত করার জন্য যে একটি অনুরোধ সত্যিই আপনার ডোমেনের মধ্যে থেকে আসছে , এবং বাইরের ডোমেন থেকে নয় (বা ডোমেনের ভিতরের একটি ব্রাউজার যা XSRF আক্রমণের অধীনে রয়েছে):
- অনুরোধে একটি "X-DataSource-Auth" শিরোনামের উপস্থিতি যাচাই করুন৷ এই হেডারটি Google Visualization API দ্বারা সংজ্ঞায়িত করা হয়েছে; আপনাকে এই শিরোনামের বিষয়বস্তু পরীক্ষা করার দরকার নেই, শুধুমাত্র যাচাই করুন যে এটি সেখানে আছে। আপনি যদি Google চার্ট টুলস ডেটাসোর্স লাইব্রেরি ব্যবহার করেন, তাহলে আপনার জন্য লাইব্রেরি এটি পরিচালনা করতে পারে।
- ক্লায়েন্টকে প্রমাণীকরণ করতে কুকি প্রমাণীকরণ ব্যবহার করুন। এখনও প্রমাণীকরণ কুকিজ রেখে ক্রস-ডোমেন অনুরোধে কাস্টম শিরোনাম ইনজেক্ট করার কোন পরিচিত উপায় নেই।
- একটি <script src> ট্যাগের সাথে অন্তর্ভুক্ত করা হলে JavaScript কার্যকর করার সম্ভাবনা নেই। এটি করার জন্য, আপনার JSON প্রতিক্রিয়ার উপসর্গ )]}' দিয়ে একটি নতুন লাইন অনুসরণ করুন। আপনার ক্লায়েন্ট ফালা প্রতিক্রিয়া থেকে উপসর্গ. XmlHttpRequest এর জন্য এটি শুধুমাত্র তখনই সম্ভব যখন অনুরোধটি একই ডোমেন থেকে আসে।
বিন্যাস অনুরোধ
একটি ক্লায়েন্ট কাস্টম উপাদান, একটি ঐচ্ছিক ক্যোয়ারী স্ট্রিং, স্বাক্ষর এবং অন্যান্য উপাদান সহ বেশ কয়েকটি প্যারামিটার সহ একটি HTTP GET অনুরোধ পাঠায়। আপনি শুধুমাত্র এই বিভাগে বর্ণিত প্যারামিটারগুলি পার্স করার জন্য দায়ী, এবং দূষিত আক্রমণ এড়াতে অন্যদের পরিচালনা না করার বিষয়ে সতর্ক হওয়া উচিত।
ঐচ্ছিক প্যারামিটারের জন্য ডিফল্ট মান থাকতে ভুলবেন না (উভয় স্ট্যান্ডার্ড এবং কাস্টম), এবং আপনার সাইটের ডকুমেন্টেশনে আপনার সমস্ত ডিফল্ট নথিভুক্ত করুন।
এখানে কয়েকটি নমুনা অনুরোধ রয়েছে (আপনি উদাহরণে এই নথির শেষে আরও অনুরোধ এবং প্রতিক্রিয়ার নমুনা দেখতে পারেন):
দ্রষ্টব্য : নিম্নলিখিত অনুরোধের স্ট্রিংগুলি, এবং যেগুলি উদাহরণ বিভাগে দেখানো হয়েছে, পাঠানোর আগে url-এস্কেপ করা উচিত৷
Basic request, no parameters: http://www.example.com/mydatasource Request with the tqx parameter that contains two properties: http://www.example.com/mydatasource?tqx=reqId:0;sig:4641982796834063168 Request with a query string: http://www.example.com/mydatasource?tq=limit 1
অনুরোধ স্ট্রিং-এর সমস্ত স্ট্যান্ডার্ড প্যারামিটারের তালিকা এখানে রয়েছে। মনে রাখবেন যে উভয় প্যারামিটারের নাম (যেমন "সংস্করণ") এবং ধ্রুবক স্ট্রিং মান (যেমন "ঠিক আছে", "সতর্কতা" এবং "না_পরিবর্তিত") কেস-সংবেদনশীল। সারণীটিও বর্ণনা করে যে প্যারামিটারটি পাঠানোর প্রয়োজন আছে কিনা এবং যদি পাঠানো হয়, আপনাকে এটি পরিচালনা করতে হবে কিনা।
প্যারামিটার | অনুরোধে প্রয়োজন? | ডাটা সোর্স হ্যান্ডেল করতে হবে? | বর্ণনা |
---|---|---|---|
tq | না | না | Google ভিজ্যুয়ালাইজেশন API ক্যোয়ারী ভাষায় লেখা একটি ক্যোয়ারী, প্রত্যাবর্তিত ডেটা কীভাবে ফিল্টার, বাছাই বা অন্যথায় ম্যানিপুলেট করা যায় তা উল্লেখ করে। স্ট্রিংটি উদ্ধৃত করার প্রয়োজন নেই। উদাহরণ: |
tqx | না | হ্যাঁ | স্ট্যান্ডার্ড বা কাস্টম প্যারামিটারের জন্য কোলন-ডিলিমিটেড কী/মান জোড়ার একটি সেট। জোড়া সেমিকোলন দ্বারা পৃথক করা হয়. এখানে ভিজ্যুয়ালাইজেশন প্রোটোকল দ্বারা সংজ্ঞায়িত স্ট্যান্ডার্ড প্যারামিটারগুলির একটি তালিকা রয়েছে:
উদাহরণ: |
tqrt | না | না | সংরক্ষিত: এই পরামিতি উপেক্ষা করুন. প্রশ্ন পাঠানোর জন্য যে পদ্ধতি ব্যবহার করা হয়েছিল। |
প্রতিক্রিয়া বিন্যাস
প্রতিক্রিয়ার বিন্যাস অনুরোধের out
প্যারামিটারের উপর নির্ভর করে, যা প্রত্যাশিত প্রতিক্রিয়ার ধরন নির্দিষ্ট করে। প্রতিটি অনুরোধের প্রকারে কীভাবে প্রতিক্রিয়া জানাতে হয় তা জানতে নিম্নলিখিত বিভাগগুলি দেখুন:
- JSON - একটি JSON প্রতিক্রিয়া প্রদান করে যা একটি জাভাস্ক্রিপ্ট অবজেক্টের ডেটা অন্তর্ভুক্ত করে যা সরাসরি একটি
DataTable
কনস্ট্রাক্টরে পাঠানো যেতে পারে। এটি এখন পর্যন্ত সবচেয়ে সাধারণ অনুরোধের ধরন, এবং সঠিকভাবে প্রয়োগ করা সবচেয়ে গুরুত্বপূর্ণ। - CSV - ব্রাউজার দ্বারা পরিচালনা করার জন্য একটি সমতল কমা-বিচ্ছিন্ন মান তালিকা প্রদান করে।
- TSV - একটি ট্যাব-বিচ্ছিন্ন মান তালিকা প্রদান করে, যা ব্রাউজার দ্বারা পরিচালনা করা হবে।
- HTML - ব্রাউজার দ্বারা রেন্ডার করার জন্য একটি HTML টেবিল প্রদান করে।
আপনার জন্য এই আউটপুট ফর্ম্যাটগুলি তৈরি করতে আপনি Google ভিজ্যুয়ালাইজেশন ডেটা সোর্স লাইব্রেরি (জাভা) বা ভিজ্যুয়ালাইজেশন পাইথন লাইব্রেরি ব্যবহার করতে পারেন।
JSON প্রতিক্রিয়া বিন্যাস
ডিফল্ট প্রতিক্রিয়া বিন্যাস হল JSON যদি অনুরোধে একটি "X-DataSource-Auth" শিরোনাম থাকে এবং অন্যথায় JSONP । মনে রাখবেন যে Google চার্ট ক্লায়েন্ট আসলে JSON এবং JSONP-এর পরিবর্তিত সংস্করণ সমর্থন করে; আপনি যদি জাভা বা পাইথন হেল্পার লাইব্রেরি ব্যবহার করেন, তাহলে তারা আপনার জন্য সঠিক কোড দেবে; আপনি যদি হাত দিয়ে প্রতিক্রিয়া পার্স করছেন, নীচে JSON পরিবর্তনগুলি দেখুন৷
আপনি যদি একই-ডোমেন অনুরোধগুলি প্রয়োগ করেন, তাহলে আপনাকে অনুরোধে "X-DataSource-Auth" শিরোনামের উপস্থিতি যাচাই করতে হবে এবং অনুমোদন কুকি ব্যবহার করতে হবে।
এটি Google ভিজ্যুয়ালাইজেশন API পদ্ধতি google.visualization.Query.send()
দ্বারা নির্দিষ্ট করা একমাত্র প্রতিক্রিয়া বিন্যাস। আপনি উদাহরণে এই পৃষ্ঠার শেষে JSON অনুরোধ এবং প্রতিক্রিয়াগুলির কিছু উদাহরণ দেখতে পারেন। আপনার জন্য এই প্রতিক্রিয়া স্ট্রিং তৈরি করতে আপনি Java বা Python সহায়ক লাইব্রেরি ব্যবহার করতে পারেন।
এই প্রতিক্রিয়া বিন্যাসটি হল একটি UTF-8 এনকোড করা JSON অবজেক্ট (একটি অবজেক্ট যা ধনুর্বন্ধনী { } দ্বারা মোড়ানো প্রতিটি সম্পত্তি একটি কমা দ্বারা পৃথক করা হয়েছে) যা নীচের টেবিলের বৈশিষ্ট্যগুলিকে অন্তর্ভুক্ত করে (ডেটাটি table
বৈশিষ্ট্যে বরাদ্দ করা হয়েছে)৷ এই JSON অবজেক্টটি অনুরোধ থেকে responseHandler
প্যারামিটার মানের ভিতরে আবৃত করা উচিত। তাই, যদি অনুরোধের responseHandler
মান "মাইহ্যান্ডলার" হয়, তাহলে আপনাকে এইরকম একটি স্ট্রিং ফেরত দিতে হবে (সংক্ষিপ্ততার জন্য শুধুমাত্র একটি সম্পত্তি দেখানো হয়েছে):
"myHandler({status:ok, ...})"
রিকোয়েস্টে responseHandler
মান না থাকলে, ডিফল্ট মান হল "google.visualization.Query.setResponse", তাই আপনাকে এইরকম একটি স্ট্রিং ফেরত দেওয়া উচিত (সংক্ষিপ্ততার জন্য শুধুমাত্র একটি প্রপার্টি দেখানো হয়েছে):
"google.visualization.Query.setResponse({status:ok, ...})"
এখানে উপলব্ধ প্রতিক্রিয়া বস্তু সদস্য আছে:
সম্পত্তি | প্রয়োজন? | বর্ণনা |
---|---|---|
সংস্করণ | না | একটি স্ট্রিং নম্বর যা Google ভিজ্যুয়ালাইজেশন ওয়্যার প্রোটোকল সংস্করণ নম্বর দেয়। যদি নির্দিষ্ট না করা হয়, ক্লায়েন্ট সর্বশেষ সংস্করণ ধরে নেয়। উদাহরণ: |
reqId | হ্যাঁ* | একটি স্ট্রিং নম্বর এই ক্লায়েন্টের জন্য এই অনুরোধের আইডি নির্দেশ করে৷ এটি অনুরোধে থাকলে, একই মান ফেরত দিন। আরো বিস্তারিত জানার জন্য অনুরোধ বিভাগে reqId বিবরণ দেখুন।* যদি এই প্যারামিটারটি অনুরোধে নির্দিষ্ট করা না থাকে, তাহলে আপনাকে প্রতিক্রিয়াতে এটি সেট করতে হবে না। |
অবস্থা | হ্যাঁ | এই অপারেশনের সাফল্য বা ব্যর্থতা বর্ণনাকারী একটি স্ট্রিং। নিম্নলিখিত মানগুলির মধ্যে একটি এবং শুধুমাত্র একটি হতে হবে:
উদাহরণ: |
সতর্কতা | শুধুমাত্র যদি status=warning | এক বা একাধিক বস্তুর একটি অ্যারে, প্রতিটি একটি অ-মারাত্মক সমস্যা বর্ণনা করে। প্রয়োজন হলে
উদাহরণ: |
ত্রুটি | status=error হলে প্রয়োজন | এক বা একাধিক বস্তুর একটি অ্যারে, প্রতিটি একটি ত্রুটি বর্ণনা করে। অ্যারেতে নিম্নলিখিত স্ট্রিং সদস্য রয়েছে (প্রতিটি সদস্যের জন্য শুধুমাত্র একটি মান ফেরত দিন):
উদাহরণ: |
স্বাক্ষর | না | টেবিল অবজেক্টের একটি হ্যাশড মান। ক্লায়েন্ট এবং ডেটা উত্সের মধ্যে ডেটা স্থানান্তর অপ্টিমাইজ করার জন্য দরকারী। আপনি যে কোনো হ্যাশ অ্যালগরিদম বেছে নিতে পারেন। আপনি যদি এই সম্পত্তিটিকে সমর্থন করেন, তাহলে আপনার ক্লায়েন্টের দ্বারা পাস করা মানটি ফেরত দেওয়া উচিত যদি কোনও ডেটা ফেরত না দেওয়া হয়, বা নতুন ডেটা ফেরত দিলে একটি নতুন হ্যাশ ফেরত দেওয়া উচিত। উদাহরণ: |
টেবিল | না | আপনার ডেটা সহ জাভাস্ক্রিপ্ট আক্ষরিক স্বরলিপিতে একটি {cols:[{id:'Col1',label:'',type:'number'}], rows:[{c:[{v:1.0,f:'1'}]}, {c:[{v:2.0,f:'2'}]}, {c:[{v:3.0,f:'3'}]}, {c:[{v:1.0,f:'1'}]} ] } উদাহরণ: নীচের উদাহরণ দেখুন। |
Google-এর হেল্পার লাইব্রেরি, এবং Google-এ পাঠানো সমস্ত প্রশ্ন, কঠোর JSON/JSONP ফেরত দেয়। আপনি যদি প্রত্যাবর্তিত কোডটি নিজে পার্স না করেন তবে এটি আপনার কাছে কোন ব্যাপার না। যদি আপনি হন, তাহলে আপনি JSON.parse() ব্যবহার করে JSON স্ট্রিংকে জাভাস্ক্রিপ্ট অবজেক্টে রূপান্তর করতে পারেন। API দ্বারা JSON কীভাবে প্রক্রিয়া করা হয় তার মধ্যে একটি পার্থক্য হল, যদিও JSON জাভাস্ক্রিপ্ট তারিখের মান সমর্থন করে না (উদাহরণস্বরূপ, "নতুন তারিখ(2008,1,28,0,31,26)"; API একটি বৈধ JSON সমর্থন করে নিম্নলিখিত বিন্যাসে একটি স্ট্রিং হিসাবে তারিখের উপস্থাপনা: Date(year, month, day[,hour, minute, second[, millisecond]])
যেখানে দিনের পরের সবকিছু ঐচ্ছিক, এবং মাসগুলি শূন্য-ভিত্তিক ।
JSON প্রতিক্রিয়া অপ্টিমাইজ করা
যদি কোনো ক্লায়েন্ট দুটি অনুরোধ করে, এবং অনুরোধের মধ্যে ডেটা পরিবর্তন না হয়, তাহলে ডেটা পুনরায় না পাঠানোর অর্থ হয়; এটা করলে ব্যান্ডউইথ নষ্ট হবে। অনুরোধগুলিকে আরও দক্ষ করার জন্য, প্রোটোকলটি ক্লায়েন্টের ডেটা ক্যাশে করা এবং শেষ অনুরোধের পর থেকে ডেটা পরিবর্তন না হলে প্রতিক্রিয়াতে একটি সংকেত পাঠাতে সহায়তা করে। এটি কিভাবে কাজ করে তা এখানে:
- ক্লায়েন্ট ডেটা উৎসে একটি অনুরোধ পাঠায়।
- ডেটা উৎস একটি
DataTable
এবং সেইসাথেDataTable
অবজেক্টের একটি হ্যাশ তৈরি করে এবং এর প্রতিক্রিয়াতে উভয়ই রিটার্ন করে (হ্যাশটিtqx.
sig
প্যারামিটারে ফেরত দেওয়া হয়)। গুগল ভিজ্যুয়ালাইজেশন এপিআই ক্লায়েন্টDataTable
এবংsig
মান ক্যাশে করে। - ক্লায়েন্ট ক্যাশে করা
tqx.sig
মান সহ ডেটার জন্য আরেকটি অনুরোধ পাঠায়। - ডেটা উত্স দুটি উপায়ে প্রতিক্রিয়া জানাতে পারে:
- পূর্ববর্তী অনুরোধ থেকে ডেটা পরিবর্তিত হলে, ডেটা উত্সটি নতুন
DataTable
এবং নতুনsig
মান হ্যাশ ফেরত পাঠায়। - যদি পূর্ববর্তী অনুরোধ থেকে ডেটা পরিবর্তিত না হয়, ডেটা উৎস ফেরত পাঠায়
status=error
,reason=not_modified
,sig= old_sig_value
।
- পূর্ববর্তী অনুরোধ থেকে ডেটা পরিবর্তিত হলে, ডেটা উত্সটি নতুন
- উভয় ক্ষেত্রেই, চার্ট হোস্ট করা পৃষ্ঠাটি একটি সফল প্রতিক্রিয়া পায়, এবং
QueryResponse.getDataTable()
এ কল করেDataTable
পুনরুদ্ধার করতে পারে। যদি ডেটা একই হয় তবে এটি টেবিলের ক্যাশে করা সংস্করণ হবে।
মনে রাখবেন যে এটি শুধুমাত্র Google ভিজ্যুয়ালাইজেশন API-এ নির্মিত চার্ট থেকে JSON অনুরোধের জন্য কাজ করে।
CSV রেসপন্স ফরম্যাট
যদি অনুরোধটি নির্দিষ্ট করে out:csv
, প্রতিক্রিয়াটিতে কোনও মেটাডেটা থাকে না, তবে কেবল ডেটার একটি CSV উপস্থাপনা। একটি CSV টেবিল সাধারণত একটি কমা-বিচ্ছিন্ন তালিকা, যেখানে ডেটার প্রতিটি সারি একটি কমা-বিচ্ছিন্ন মানের তালিকা, যা একটি UNIX নিউলাইন অক্ষর (\n) দিয়ে শেষ হয়। প্রতিটি কলামের জন্য ঘরের মান একই ধরনের হওয়া উচিত। প্রথম সারিটি কলাম লেবেল। এখানে একটি তিন-সারি, তিন-কলাম টেবিলের একটি উদাহরণ:
A, B, C 1.0, "yes", true 2.0, "no", false 3.0, "maybe", true
CSV বিন্যাস এই প্রোটোকল দ্বারা নির্দিষ্ট করা হয় না; ডেটা উৎস তার CSV বিন্যাস সংজ্ঞায়িত করার জন্য দায়ী। যাইহোক, একটি সাধারণ বিন্যাস হল কমা দ্বারা পৃথক করা মানগুলির একটি সেট (কোন মধ্যস্থ স্পেস ছাড়াই), এবং প্রতিটি সারির শেষে একটি নতুন লাইন (\n)। যখন একটি ব্রাউজার একটি CSV স্ট্রিং উত্তর পায়, তখন এটি ব্যবহারকারীকে জিজ্ঞাসা করতে পারে যে স্ট্রিংটি খুলতে কোন অ্যাপ্লিকেশন ব্যবহার করতে হবে বা এটিকে স্ক্রিনে রেন্ডার করতে পারে। জাভা এবং পাইথন ওপেন সোর্স লাইব্রেরিগুলি একটি ডেটা টেবিলকে একটি CSV স্ট্রিংয়ে রূপান্তর করার একটি পদ্ধতি প্রদান করে।
যদি অনুরোধে tqx
প্যারামিটারের একটি outFileName
সদস্য অন্তর্ভুক্ত থাকে, তাহলে আপনার প্রতিক্রিয়া শিরোনামে নির্দিষ্ট ফাইলের নাম অন্তর্ভুক্ত করার চেষ্টা করা উচিত।
google.visualization.Query
অবজেক্ট একটি CSV প্রতিক্রিয়ার অনুরোধ সমর্থন করে না। যদি কোনো ক্লায়েন্ট CSV-এর অনুরোধ করতে চায়, তাহলে আপনি আপনার পৃষ্ঠায় একটি ভিজ্যুয়ালাইজেশন টুলবার গ্যাজেট এম্বেড করতে পারেন, অথবা তারা অনুরোধ তৈরি করতে কাস্টম কোড ব্যবহার করতে পারে, অথবা আপনি একটি লিঙ্ক সরবরাহ করতে পারেন যা tqx
এর out:csv
সম্পত্তি স্পষ্টভাবে সেট করে, যেমনটি দেখানো হয়েছে নিম্নলিখিত অনুরোধ URL:
অনুরোধ
http://www.example.com/mydatasource?tqx=reqId:1;out:csv
প্রতিক্রিয়া
Label 1,Label2\n1,a\n2,b\n3,c\n4,d
TSV রেসপন্স ফরম্যাট
যদি অনুরোধটি নির্দিষ্ট করে out:tsv-excel
, প্রতিক্রিয়াটিতে কোনও মেটাডেটা থাকে না, তবে কেবলমাত্র ডেটার একটি ট্যাব-বিচ্ছিন্ন উপস্থাপনা, utf-16 এনকোডেড । যদি অনুরোধে tqx
প্যারামিটারের একটি outFileName
সদস্য অন্তর্ভুক্ত থাকে, তাহলে আপনার প্রতিক্রিয়া শিরোনামে নির্দিষ্ট ফাইলের নাম অন্তর্ভুক্ত করার চেষ্টা করা উচিত।
এইচটিএমএল রেসপন্স ফরম্যাট
যদি অনুরোধটি নির্দিষ্ট করে out:html
, প্রতিক্রিয়াটি একটি HTML পৃষ্ঠা হওয়া উচিত যা ডেটা সহ একটি HTML টেবিল সংজ্ঞায়িত করে৷ এটি আপনার কোড ডিবাগ করার জন্য উপযোগী, কারণ ব্রাউজার আপনার ফলাফলকে একটি পঠনযোগ্য বিন্যাসে সরাসরি রেন্ডার করতে পারে। আপনি google.visualization.Query
অবজেক্ট ব্যবহার করে একটি HTML প্রতিক্রিয়ার জন্য একটি প্রশ্ন পাঠাতে পারবেন না। আপনাকে অবশ্যই কাস্টম কোড ব্যবহার করে একটি HTML প্রতিক্রিয়ার জন্য একটি ক্যোয়ারী করতে হবে, অথবা আপনার ব্রাউজারে এটির অনুরূপ একটি URL টাইপ করে:
অনুরোধ
http://www.example.com/mydatasource?tqx=reqId:1;out:html
প্রতিক্রিয়া
<html><body><table border='1' cellpadding='2' cellspacing='0'><tr style='font-weight: bold; background-color: #aaa;'><td>label 1</td><td>label 2</td></tr><tr bgcolor='#f0f0f0'><td align='right'>1</td><td>a</td></tr><tr bgcolor='#ffffff'><td align='right'>2</td><td>b</td></tr><tr bgcolor='#f0f0f0'><td align='right'>3</td><td>c</td></tr><tr bgcolor='#ffffff'><td align='right'>4</td><td>d</td></tr></table></body></html>
উদাহরণ
এখানে কিছু উদাহরণ অনুরোধ এবং প্রতিক্রিয়া আছে. নোট করুন যে অনুরোধগুলি url-এস্কেপ করা হয়নি; যেটি সাধারণত ব্রাউজার বা google.visualization.Query
অবজেক্ট দ্বারা করা হয়।
সহজ অনুরোধ : তিনটি কলাম, চার সারি টেবিল সহ মৌলিক তথ্য প্রদান করে।
Request: http://www.example.com/mydatasource Response google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'ok',sig:'5982206968295329967',table:{cols:[{id:'Col1',label:'',type:'number'},{id:'Col2',label:'',type:'number'},{id:'Col3',label:'',type:'number'}],rows:[{c:[{v:1.0,f:'1'},{v:2.0,f:'2'},{v:3.0,f:'3'}]},{c:[{v:2.0,f:'2'},{v:3.0,f:'3'},{v:4.0,f:'4'}]},{c:[{v:3.0,f:'3'},{v:4.0,f:'4'},{v:5.0,f:'5'}]},{c:[{v:1.0,f:'1'},{v:2.0,f:'2'},{v:3.0,f:'3'}]}]}});
একটি প্রতিক্রিয়া হ্যান্ডলারের সাথে সহজ অনুরোধ: একটি তিনটি কলাম, বিভিন্ন ডেটা প্রকার সহ তিনটি সারি সারণী প্রদান করে৷
Request: http://www.example.com/mydatasource?tqx=responseHandler:myHandlerFunction Response myHandlerFunction({version:'0.6',reqId:'0',status:'ok',sig:'4641982796834063168',table:{cols:[{id:'A',label:'NEW A',type:'string'},{id:'B',label:'B-label',type:'number'},{id:'C',label:'C-label',type:'datetime'}],rows:[{c:[{v:'a'},{v:1.0,f:'1'},{v:new Date(2008,1,28,0,31,26),f:'2/28/08 12:31 AM'}]},{c:[{v:'b'},{v:2.0,f:'2'},{v:new Date(2008,2,30,0,31,26),f:'3/30/08 12:31 AM'}]},{c:[{v:'c'},{v:3.0,f:'3'},{v:new Date(2008,3,30,0,31,26),f:'4/30/08 12:31 AM'}]}]}});
একটি সাধারণ ক্যোয়ারী স্ট্রিং সহ ক্যোয়ারী: একটি একক কলামের জন্য অনুরোধ, চারটি সারি সহ একটি একক কলাম প্রদান করে৷
Request: http://www.example.com/mydatasource?tq=select Col1 Response: google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'ok',sig:'6099996038638149313',table:{cols:[{id:'Col1',label:'',type:'number'}],rows:[{c:[{v:1.0,f:'1'}]},{c:[{v:2.0,f:'2'}]},{c:[{v:3.0,f:'3'}]},{c:[{v:1.0,f:'1'}]}]}});
ডেটা পরিবর্তিত হয়নি ত্রুটি: একটি not_modified
ত্রুটির উদাহরণ।
Request: http://www.example.com/mydatasource?tqx=reqId:0;sig:4641982796834063168 Response: google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'error',errors:[{reason:'not_modified',message:'Data not modified'}]});
ডেটা ট্রাঙ্কেটেড সতর্কতা: একটি data_truncated
সতর্কতার উদাহরণ। লক্ষ্য করুন যে অনুরোধটি এখনও ডেটা প্রদান করে।
Request: http://www.example.com/mydatasource?tq=limit 1 Response: google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'warning',warnings:[{reason:'data_truncated',message:'Retrieved data was truncated'}],sig:'1928724788649668508',table:{cols:[{id:'A',label:'NEW A',type:'string'},{id:'B',label:'B-label',type:'number'},{id:'C',label:'C-label',type:'datetime'}],rows:[{c:[{v:'a'},{v:1.0,f:'1'},{v:new Date(2008,1,28,0,31,26),f:'2/28/08 12:31 AM'}]}]}});
অ্যাক্সেস অস্বীকার ত্রুটি: একটি access_denied
ত্রুটির উদাহরণ।
Request: http://www.example.com/mydatasource Response: google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'error',errors:[{reason:'access_denied',message:'Access denied',detailed_message:'Access Denied'}]});
অবৈধ ক্যোয়ারী স্ট্রিং: একটি অবৈধ ক্যোয়ারী স্ট্রিং সহ একটি অনুরোধের উদাহরণ৷ মনে রাখবেন যে বিস্তারিত বার্তাটি প্রকৃত ত্রুটি বার্তার পরিবর্তে একটি সাধারণ বার্তা।
Request: http://www.example.com/mydatasource?tq=select A Response: google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'error',errors:[{reason:'invalid_query',message:'Invalid query',detailed_message:'Bad query string.'}]});
ডেভেলপমেন্ট টুলস
- জাভা ডেটাসোর্স লাইব্রেরি (গুগল থেকে) - অনুরোধ এবং প্রতিক্রিয়া পরিচালনা করে, আপনার দেওয়া ডেটা থেকে প্রতিক্রিয়া সারণী তৈরি করে এবং Google চার্ট টুল SQL ক্যোয়ারী ভাষা প্রয়োগ করে।
- পাইথন ডেটাসোর্স লাইব্রেরি (গুগল থেকে) - একটি প্রতিক্রিয়া টেবিল তৈরি করে প্রতিক্রিয়া সিনট্যাক্স তৈরি করে। অনুরোধ পার্সিং বা Google চার্ট টুল SQL ক্যোয়ারী ভাষা বাস্তবায়ন পরিচালনা করে না ।
- MC-Google_Visualization (থার্ড-পার্টি) - এটি একটি PHP সার্ভার-সাইড লাইব্রেরি যা আপনি PDO ব্যবহার করে MySQL, SQLite, এবং PostgreSQL ডাটাবেস ইঞ্জিনগুলির জন্য একটি চার্ট টুলস ডেটাসোর্স বাস্তবায়ন করতে ব্যবহার করতে পারেন।
- bortosky-google-visualization (থার্ড-পার্টি) - এটি .NET ব্যবহারকারীদের জন্য একটি Google ভিজ্যুয়ালাইজেশন API ডেটাটেবল তৈরি করার জন্য একটি সহায়ক লাইব্রেরি।
- জিভি স্ট্রীমার (থার্ড-পার্টি) - জিভি স্ট্রীমার হল একটি সার্ভার-সাইড টুল যা বিভিন্ন উৎস থেকে ডেটাকে Google চার্টে বৈধ ক্যোয়ারী রেসপন্সে রূপান্তর করতে পারে। জিভি স্ট্রীমার বেশ কয়েকটি ভাষা (উদাহরণস্বরূপ, পিএইচপি, জাভা, .নেট) এবং বেশ কয়েকটি কাঁচা ডেটা উত্স (উদাহরণস্বরূপ, মাইএসকিউএল) সমর্থন করে।
- TracGViz (তৃতীয়-পক্ষ) - TracGViz হল একটি বিনামূল্যের এবং ওপেন সোর্স টুল যা উপাদানগুলি প্রদান করে যাতে Trac চার্ট গ্যাজেটগুলি ব্যবহার করতে সক্ষম হবে এবং সেইসাথে Google চার্ট টুলস ডেটাসোর্স উৎস হিসাবে Trac দ্বারা পরিচালিত ডেটা প্রয়োগ করতে সক্ষম হবে৷
- ভিস-টেবিল (তৃতীয়-পক্ষ) - একটি লাইব্রেরি যা পিএইচপি-তে Google চার্ট টুলস ডেটাসোর্স বাস্তবায়ন করে। এর তিনটি প্রধান অংশ রয়েছে। ডেটাটেবল বাস্তবায়ন নিজেই, ক্যোয়ারী ভাষা পার্সার, এবং ফর্ম্যাটার্স।
- Oracle PL/SQL (থার্ড-পার্টি)-এ Google ডেটাসোর্স ইমপ্লিমেন্টেশন - একটি Oracle PL/SQL প্যাকেজ যা ডাটাবেস থেকে সরাসরি ডেটা সোর্স সার্ভারে ওরাকলকে সক্ষম করে। তাই মূলত আপনি Google চার্ট টুলস ডেটাসোর্স হিসাবে যেকোন ওরাকল কোয়েরি ব্যবহার করতে পারেন (প্যাকেজটি ডেটা সহ একটি JSON ফাইল ফিরিয়ে দেবে)। এটি গুগল কোয়েরি ভাষার জন্য প্রায় সম্পূর্ণ সমর্থন করে।