Google ডেটা প্রোটোকলে ব্যাচ প্রসেসিং

ব্যাচ প্রক্রিয়াকরণ আপনাকে প্রতিটি অপারেশন পৃথকভাবে জমা দেওয়ার পরিবর্তে একটি অনুরোধে একাধিক অপারেশন চালানোর ক্ষমতা দেয়।

দ্রষ্টব্য : ব্যাচ অপারেশন করতে, আপনাকে আপনার Google Data API ক্লায়েন্ট লাইব্রেরির একটি সাম্প্রতিক সংস্করণ ব্যবহার করতে হবে। ব্যাচ অপারেশন জাভাস্ক্রিপ্ট ক্লায়েন্ট লাইব্রেরি দ্বারা সমর্থিত নয়।

শ্রোতা

এই ডকুমেন্টটি এমন প্রোগ্রামারদের জন্য যারা ব্যাচ প্রসেসিং ব্যবহার করে একক অনুরোধে একাধিক অপারেশন জমা দিতে চান।

এই নথিটি অনুমান করে যে আপনি GData Java ক্লায়েন্ট লাইব্রেরি ব্যবহার করার সাথে পরিচিত। এই নথির উদাহরণগুলি দেখায় কিভাবে ব্যাচ অপারেশন চালানোর জন্য জাভা ক্লায়েন্ট লাইব্রেরি ব্যবহার করতে হয়।

এই নথির উদাহরণগুলি Google Base Data API- এর জন্য নির্দিষ্ট৷ যাইহোক, অন্যান্য পরিষেবাগুলিও ব্যাচের ক্ষমতা প্রদান করতে পারে।

দ্রষ্টব্য: অন্যান্য ক্লায়েন্ট লাইব্রেরিগুলির জন্য প্রোটোকল এবং সাধারণ পদ্ধতিগুলি একই হবে তবে ব্যাচ অনুরোধগুলি সম্পাদন করার নির্দিষ্ট পদ্ধতিগুলি আলাদা হতে পারে। অনুগ্রহ করে ক্লায়েন্ট লাইব্রেরি নির্দিষ্ট ডকুমেন্টেশন পড়ুন।

ভূমিকা

একটি GData ব্যাচ ফিড ব্যবহার করে, আপনি একাধিক সন্নিবেশ, আপডেট, মুছে ফেলা এবং কোয়েরি ক্রিয়াকলাপ সংগ্রহ করতে পারেন এবং তারপরে একবারে জমা দিতে এবং চালাতে পারেন।

উদাহরণস্বরূপ, নিম্নলিখিত ফিডে চারটি অপারেশন রয়েছে:

<feed>
  <entry>
    <batch:operation type="insert"/>
    ... what to insert ...
  </entry> 
  <entry>
    <batch:operation type="update"/>
    ... what to update ...
  </entry>
  <entry>
    <batch:operation type="delete"/>
    ... what to delete ...
  </entry>
  <entry>
    <batch:operation type="query"/>
    ... what to query ...
  </entry>
</feed>

পরিষেবাটি যতটা সম্ভব অনুরোধ করা পরিবর্তনগুলি সম্পাদন করবে এবং স্থিতির তথ্য ফেরত দেবে যা আপনি প্রতিটি অপারেশনের সাফল্য বা ব্যর্থতার মূল্যায়ন করতে ব্যবহার করতে পারেন।

পরিষেবাটি একটি ব্যাচের মধ্যে প্রতিটি অপারেশন চালানোর চেষ্টা করে, এমনকি যদি ব্যাচের অন্তর্ভুক্ত কিছু অপারেশন সফল না হয়।

একটি ব্যাচ অনুরোধ জমা দেওয়া

একটি ব্যাচ অনুরোধ একটি ব্যাচ URL এ একটি HTTP POST হিসাবে পাঠানো উচিত. বিভিন্ন ফিড বিভিন্ন ব্যাচ অপারেশন সমর্থন করে. শুধুমাত্র-পঠন ফিড শুধুমাত্র সমর্থন প্রশ্ন.

একটি প্রদত্ত ফিড ব্যাচ অপারেশন সমর্থন করে কিনা তা আবিষ্কার করতে, আপনি ফিডটি জিজ্ঞাসা করতে পারেন৷ যদি ফিডে ফিড লেভেলে একটি "ব্যাচ" লিঙ্ক রিলেশন থাকে, তাহলে এটি ইঙ্গিত করে যে ফিড ব্যাচ ক্রিয়াকলাপকে সমর্থন করে।

একটি "ব্যাচ" লিঙ্ক সম্পর্ক হল একটি <link> উপাদান যার সাথে rel="http://schemas.google.com/g/2005#batch" । লিঙ্ক রিলেশনের href এট্রিবিউট ইউআরএলকে সংজ্ঞায়িত করে যেখানে ব্যাচ অপারেশনের জন্য ফিড ডকুমেন্ট পোস্ট করা যেতে পারে।

উদাহরণস্বরূপ, যদি আপনি সম্পাদন করেন: GET http://www.google.com/base/feeds/items , আপনি নিম্নলিখিত প্রতিক্রিয়া পেতে পারেন:

<feed xmlns=...
  <id>http://www.google.com/base/feeds/items</id>
  <link rel="http://schemas.google.com/g/2005#feed"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items"/>
  <link rel="http://schemas.google.com/g/2005#post"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items"/>
  <link rel="http://schemas.google.com/g/2005#batch"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items/batch"/>
  ...
</feed> 

এই উদাহরণে, ব্যাচ URL হল http://www.google.com/base/feeds/items/batch

একটি ব্যাচ অপারেশন ফিড লেখা

একটি অপারেশন ফিডে সন্নিবেশ, আপডেট, মুছে ফেলা বা অনুসন্ধানের জন্য এন্ট্রিগুলির একটি তালিকা রয়েছে৷ প্রতিটি অপারেশন একটি <batch:operation type="insert|update|delete|query"/> উপাদান দ্বারা সংজ্ঞায়িত করা হয়।

এই উপাদানটি একটি <feed> উপাদানের সরাসরি সন্তান, ফিডের যেকোনো এন্ট্রির একটি সরাসরি শিশু বা উভয়ই হতে পারে। একটি এন্ট্রিতে অন্তর্ভুক্ত করা হলে, এটি সেই নির্দিষ্ট এন্ট্রির জন্য চালানোর জন্য অপারেশন নির্দিষ্ট করে। যখন ফিডে অন্তর্ভুক্ত করা হয়, এই উপাদানটি <batch:operation/> উপাদান নেই এমন যেকোনো এন্ট্রিতে চালানোর জন্য ডিফল্ট অপারেশন নির্দিষ্ট করে।

যখন এন্ট্রি বা ফিড উভয়ই একটি অপারেশন নির্দিষ্ট করে না, তখন ডিফল্ট অপারেশনটি insert হয়।

একক ব্যাচ ফিডে একই এন্ট্রিতে একাধিক ক্রিয়াকলাপ প্রয়োগ করা উচিত নয়। আপনি একই এন্ট্রির জন্য একাধিক ক্রিয়াকলাপ নির্দিষ্ট করলে ফলাফলগুলি অনিশ্চিত।

কর্মক্ষমতা উন্নত করতে, ক্রিয়াকলাপগুলি যে ক্রমে তাদের অনুরোধ করা হয়েছিল সে অনুসারে প্রক্রিয়া করা নাও হতে পারে৷ যাইহোক, চূড়ান্ত ফলাফল সবসময় একই হয় যদি এন্ট্রিগুলি ক্রমানুসারে প্রক্রিয়া করা হয়।

আপনি সার্ভারে যে XML পাঠান তার সংখ্যা 1 MB (1,048,576 বাইট) এর বেশি নাও হতে পারে৷ সাধারণভাবে, মোট বাইটের আকার 1 MB-এর বেশি না হওয়া পর্যন্ত আপনি কতগুলি অপারেশনের অনুরোধ করতে পারেন তার কোনও সীমা নেই৷ যাইহোক, কিছু পরিষেবা অতিরিক্ত সীমাবদ্ধতা স্থাপন করতে পারে।

ব্যাচ অপারেশন ব্যবহার করার জন্য, আপনাকে অবশ্যই <f eed> উপাদানটিতে একটি বৈশিষ্ট্য হিসাবে ব্যাচ নামস্থান ঘোষণা যোগ করতে হবে:

<feed 
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
  ...
  xmlns:batch="http://schemas.google.com/gdata/batch">

অপারেশন সন্নিবেশ করান

একটি সন্নিবেশ অপারেশন নিম্নলিখিত হিসাবে চিহ্নিত করা হয়:

<batch:operation type="insert">

একটি সন্নিবেশ অপারেশন এন্ট্রি পোস্ট করার সমতুল্য। অপারেশন সফল হলে, একটি আপডেট করা নথি <id> উপাদান এবং একটি <batch:status code="201"/> উপাদান সহ সম্পূর্ণ এন্ট্রি বিষয়বস্তু ফেরত দেওয়া হয়।

এখানে একটি সফল সন্নিবেশ অনুরোধের একটি উদাহরণ:

<entry>
  <title type="text">...</title>
  <content type="html">...</content>
  <batch:id>itemA</batch:id>
  <batch:operation type="insert"/>
  <g:item_type>recipes</g:item_type>
  ... 
</entry>

এখানে একটি সফল সন্নিবেশ অনুরোধের প্রতিক্রিয়ার একটি উদাহরণ রয়েছে:

<entry>
  <batch:status code="201"/>
  <batch:id>itemA</batch:id>
  <batch:operation type="insert"/>
  <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
  <link rel="self" type="application/atom+xml"
    href="http://www.google.com/base/feeds/items/17437536661927313949"/>
  <title type="text">...</title>
  <content type="html">...</content>
  <g:item_type>recipes</g:item_type>
  ... 
</entry>

অপারেশন আপডেট করুন

<batch:operation type="update">

একটি আপডেট অপারেশন এন্ট্রির <id> উপাদান দ্বারা উল্লেখ করা URL-এ একটি PUT চালানোর সমতুল্য। অপারেশন সফল হলে, সম্পূর্ণ এন্ট্রি বিষয়বস্তু একটি <batch:status code="200"/> উপাদান দিয়ে ফেরত দেওয়া হয়।

দ্রষ্টব্য: নির্দিষ্ট ফিডের সাথে, আপনাকে ব্যাচ আপডেট অনুরোধের সাথে এন্ট্রির rel="edit" লিঙ্কটিও উল্লেখ করতে হবে। এর মধ্যে সেই ফিডগুলি অন্তর্ভুক্ত রয়েছে যেগুলি Google ডেটা প্রোটোকলের v1-স্টাইলের আশাবাদী সমঝোতা সমর্থন করে, এবং সেইসব ফিডগুলির মধ্যে আইডি নেই যেগুলি ইউআরএল।

এখানে একটি আপডেট অনুরোধের একটি উদাহরণ:

<entry>
  <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
  <batch:operation type="update"/>
  ...
</entry>

এখানে একটি সফল প্রতিক্রিয়ার একটি উদাহরণ:

<entry>
  <batch:status code="200"/>
  <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
  <batch:operation type="update"/>
  ... 
</entry>

দ্রষ্টব্য: কিছু ফিড আপনাকে অনিচ্ছাকৃতভাবে অন্য ব্যক্তির পরিবর্তনগুলি পরিবর্তন করা থেকে বিরত রাখতে শক্তিশালী ETags ব্যবহার করে। এই ফিডগুলির মধ্যে একটিতে একটি এন্ট্রির জন্য একটি ব্যাচ আপডেটের অনুরোধ করার সময়, আপনাকে অবশ্যই এন্ট্রির gd:etag বৈশিষ্ট্যে ETag মান প্রদান করতে হবে৷ উদাহরণস্বরূপ, <entry gd:etag="'F08NQAxFdip7IWA6WhVR'">...<batch:operation type="update"/>...

আংশিক আপডেট অপারেশন

আংশিক আপডেট সমর্থন করে এমন ফিডগুলির জন্য, আপনি ব্যাচের অনুরোধেও সেগুলি ব্যবহার করতে পারেন৷ একটি আংশিক আপডেট অপারেশন এন্ট্রির <id> উপাদান দ্বারা উল্লেখ করা URL-এ একটি PATCH চালানোর সমতুল্য। অপারেশন সফল হলে, সম্পূর্ণ এন্ট্রি বিষয়বস্তু একটি <batch:status code="200"/> উপাদান দিয়ে ফেরত দেওয়া হয়।

দ্রষ্টব্য: নির্দিষ্ট ফিডের সাথে, আপনাকে ব্যাচ আপডেট অনুরোধের সাথে এন্ট্রির rel="edit" লিঙ্কটিও উল্লেখ করতে হবে। এর মধ্যে সেই ফিডগুলি অন্তর্ভুক্ত রয়েছে যেগুলি Google ডেটা প্রোটোকলের v1-স্টাইলের আশাবাদী সমঝোতা সমর্থন করে, এবং সেইসব ফিডগুলির মধ্যে আইডি নেই যেগুলি ইউআরএল।

<batch:operation type="patch"/>

এখানে একটি আংশিক আপডেট অনুরোধের একটি উদাহরণ:

<entry gd:fields="content" gd:etag="FE8LQQJJeSp7IWA6WhVa">
  <id>http://www.google.com/calendar/feeds/jo@gmail.com/private/full/entryID</id>
  <batch:operation type="patch"/>
  <title>New title</title>
</entry>

এখানে একটি সফল প্রতিক্রিয়ার উদাহরণ রয়েছে:

<entry gd:etag="FE8LQQJJeSp7IWA6WhVa">
  <batch:status code="200"/>
  <id>http://www.google.com/calendar/feeds/jo@gmail.com/private/full/entryID</id>
  <batch:operation type="patch"/>
  <title>New title</title>
  <content></content>
  ...rest of the entry...
</entry>

অপারেশন মুছুন

<batch:operation type="delete">

একটি মুছে ফেলার ক্রিয়াকলাপটি এন্ট্রির <id> উপাদান দ্বারা উল্লেখ করা URL-এ একটি DELETE চালানোর সমতুল্য। একটি ডিলিট অপারেশনের জন্য, এন্ট্রিটি মুছে ফেলার জন্য আপনাকে শুধুমাত্র একটি <id> উপাদান পাঠাতে হবে। batch: নামস্থান উপেক্ষা করা হবে। অপারেশন সফল হলে, একই ID সহ একটি এন্ট্রি একটি <batch:status code="200"/> উপাদানের সাথে ফেরত দেওয়া হবে৷

দ্রষ্টব্য: নির্দিষ্ট ফিডের সাথে, আপনাকে একটি ব্যাচ মুছে ফেলার অনুরোধের সাথে এন্ট্রির rel="edit" লিঙ্কটিও নির্দিষ্ট করতে হবে। এর মধ্যে সেই ফিডগুলি অন্তর্ভুক্ত রয়েছে যেগুলি Google ডেটা প্রোটোকলের v1-স্টাইলের আশাবাদী সমঝোতা সমর্থন করে, এবং সেইসব ফিডগুলির মধ্যে আইডি নেই যেগুলি ইউআরএল।

এখানে একটি মুছে ফেলার অনুরোধের একটি উদাহরণ:

<entry>
  <batch:operation type="delete"/>
  <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
</entry>

এখানে একটি সফল প্রতিক্রিয়ার একটি উদাহরণ:

<entry>
  <batch:operation type="delete"/>
  <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
  <batch:status code="200" reason="Success"/>
</entry>

দ্রষ্টব্য: কিছু ফিড আপনাকে অনিচ্ছাকৃতভাবে অন্য ব্যক্তির পরিবর্তনগুলি পরিবর্তন করা থেকে বিরত রাখতে শক্তিশালী ETags ব্যবহার করে। এই ফিডগুলির একটিতে একটি এন্ট্রির জন্য একটি ব্যাচ মুছে ফেলার অনুরোধ করার সময়, আপনাকে অবশ্যই এন্ট্রির gd:etag বৈশিষ্ট্যে ETag মান প্রদান করতে হবে৷ উদাহরণস্বরূপ, <entry gd:etag="'F08NQAxFdip7IWA6WhVR'">...<batch:operation type="delete"/>...

কোয়েরি অপারেশন

<batch:operation type="query">

একটি ক্যোয়ারী অপারেশন এন্ট্রির <id> উপাদান দ্বারা উল্লেখ করা URL-এ একটি GET কার্যকর করার সমতুল্য। অপারেশন সফল হলে, সম্পূর্ণ এন্ট্রি বিষয়বস্তু ফেরত দেওয়া হয়।

দ্রষ্টব্য: নির্দিষ্ট ফিডের সাথে, আপনাকে ব্যাচ ক্যোয়ারী অনুরোধের সাথে এন্ট্রির rel="self" লিঙ্কও নির্দিষ্ট করতে হবে। এর মধ্যে সেই ফিডগুলি অন্তর্ভুক্ত রয়েছে যেগুলির আইডি নেই যা ইউআরএল।

এখানে একটি ক্যোয়ারী অনুরোধের একটি উদাহরণ:

<entry>
  <id>http://www.google.com/base/feeds/items/1743753666192313949</id>
  <batch:operation type="query"/>
</entry>

এখানে একটি সফল প্রতিক্রিয়ার একটি উদাহরণ:

<entry>
  <id>http://www.google.com/base/feeds/items/1743753666192313949</id>
  <batch:operation type="query"/>
  <batch:status code="200" reason="Success"/>
   ...
</entry>

ট্র্যাকিং অপারেশন

GData এন্ট্রি ফলাফল অনুরোধের মতো একই ক্রমে ফেরত দেওয়া হয় না। আপনি একটি শনাক্তকারী ব্যবহার করে তার জীবনকাল ধরে একটি অপারেশন ট্র্যাক করতে পারেন।

আপডেট, ডিলিট এবং কোয়েরি অপারেশনের জন্য, আপনি অপারেশন ট্র্যাক করতে এন্ট্রির আইডি ব্যবহার করতে পারেন।

সন্নিবেশ অপারেশনের জন্য, যেহেতু এখনও কোনো আইডি নেই, আপনি একটি অপারেশন শনাক্তকারীতে পাস করতে পারেন। এই শনাক্তকারীটি অনুরোধ এন্ট্রির সাথে ফলাফল এন্ট্রি লিঙ্ক করতে ব্যবহার করা যেতে পারে। অপারেশন শনাক্তকারী <batch:id> উপাদানে পাস করা হয়।

প্রতিটি অপারেশনের জন্য, GData একটি প্রতিক্রিয়া প্রদান করে যা বলে যে অপারেশন সফল হয়েছে নাকি ব্যর্থ হয়েছে। প্রতিটি প্রতিক্রিয়া সম্পর্কিত এন্ট্রি সনাক্ত করে। একটি আপডেট, মুছে ফেলা, বা ক্যোয়ারী অপারেশন, বা একটি সফল সন্নিবেশ অপারেশনের জন্য, এন্ট্রি আইডি সর্বদা ফেরত দেওয়া হয়৷ আপনি যদি একটি ব্যাচ আইডি নির্দিষ্ট করে থাকেন তবে এটিও ফেরত দেওয়া হয়। যেহেতু অসফল সন্নিবেশ অপারেশনের কোনো সংশ্লিষ্ট এন্ট্রি আইডি নেই, শুধুমাত্র ব্যাচ আইডি ফেরত দেওয়া হয়।

প্রতিটি অপারেশনের শনাক্তকারী ব্যবহার করে, আপনি অপারেশনের সম্পূর্ণ ব্যাচ পুনরায় জমা দেওয়ার পরিবর্তে শুধুমাত্র ব্যর্থ হওয়া অপারেশনগুলি পুনরায় চেষ্টা করতে পারেন।

<batch:id> এর বিষয়বস্তু হল একটি স্ট্রিং মান যা ক্লায়েন্ট-সংজ্ঞায়িত এবং সংশ্লিষ্ট প্রতিক্রিয়া এন্ট্রিতে আবার প্রতিধ্বনিত হবে। আপনি যে কোনও মান নির্দিষ্ট করতে পারেন যা ক্লায়েন্টকে মূল অনুরোধের এন্ট্রির সাথে প্রতিক্রিয়ার সাথে সম্পর্কযুক্ত করতে সহায়তা করবে। এই উপাদানটি সংশ্লিষ্ট এন্ট্রির মতোই প্রতিধ্বনিত হবে, এমনকি যদি অপারেশন ব্যর্থ হয়। GData কখনই এই ব্যাচ আইডির বিষয়বস্তু সঞ্চয় বা ব্যাখ্যা করে না।

নিম্নলিখিত উদাহরণ একটি ব্যাচ অপারেশন ফিড দেখায়. লক্ষ্য করুন যে <batch:id> উপাদানটি এই অপারেশনটিকে itemB হিসাবে লেবেল করে।

<entry>
  <title type="text">...</title>
  <content type="html">...</content>
  <batch:id>itemB</batch:id>
  <batch:operation type="insert"/>
  <g:item_type>recipes</g:item_type>
</entry>

নিম্নলিখিত উদাহরণটি এই অপারেশনের প্রতিক্রিয়া হিসাবে ফিরে আসা ব্যাচ স্ট্যাটাস এন্ট্রি দেখায়।

<entry>
  <id>http://www.google.com/base/feeds/items/2173859253842813008</id>
  <published>2006-07-11T14:51:43.560Z</published>
  <updated>2006-07-11T14:51: 43.560Z</updated>
  <title type="text">...</title>
  <content type="html">...</content>
  <link rel="self" 
    type="application/atom+xml" 
    href="http://www.google.com/base/feeds/items/2173859253842813008"/>
  <link rel="edit" 
    type="application/atom+xml" 
    href="http://www.google.com/base/feeds/items/2173859253842813008"/>
  <g:item_type>recipes</g:item_type>
  <batch:operation type="insert"/>
  <batch:id>itemB</batch:id>
  <batch:status code="201" reason="Created"/>
</entry>

স্থিতি কোড পরিচালনা করা

স্ট্যাটাস কোড নিম্নলিখিত উপাদান দ্বারা প্রকাশ করা হয়:

<batch:status code="200|201|404|500|..." reason="reason" [content-type="type"]/>

প্রতিক্রিয়া ফিডে প্রতিটি এন্ট্রিতে একটি <batch:status> উপাদান থাকে। এই উপাদানটি বর্ণনা করে যে অপারেশনটি চালানোর সময় কী ঘটেছিল। এটি HTTP প্রতিক্রিয়ার অনুকরণ করে যা ব্যাচ ফিডের অংশ হিসাবে না হয়ে অপারেশনটি পৃথকভাবে পাঠানো হলে পাঠানো হত।

সংশ্লিষ্ট ক্রিয়াকলাপটি সফলভাবে প্রক্রিয়া করা হয়েছে কিনা তা জানার জন্য আপনাকে প্রতিক্রিয়াতে প্রতিটি এন্ট্রির <batch:status> উপাদানটি পরীক্ষা করতে হবে। code="n" অ্যাট্রিবিউটে একটি GData স্ট্যাটাস কোড থাকে।

স্থিতি বিবরণ

<batch:status> উপাদানটির reason="reason" অ্যাট্রিবিউটে অপারেশনের স্থিতির আরও ভারবোস ব্যাখ্যা রয়েছে।

বিষয়বস্তুর প্রকার

<batch:status> উপাদানটির content-type="type" বৈশিষ্ট্যে <batch:status> উপাদানে থাকা ডেটার MIME প্রকার রয়েছে। এটি একটি HTTP স্থিতি প্রতিক্রিয়ার Content-Type শিরোনামের সাথে মিলে যায়৷ এই বৈশিষ্ট্য ঐচ্ছিক.

বিষয়বস্তুর ধরন সেট করা হলে, <batch:status> উপাদানটির মূল অংশ বর্ণনা করে যে এন্ট্রি প্রক্রিয়া করার সময় কী ভুল হয়েছে।

বিঘ্নিত অপারেশন সনাক্তকরণ

একটি বিঘ্নিত অপারেশনের প্রতিক্রিয়াতে নিম্নলিখিত উপাদানটি অন্তর্ভুক্ত করা হয়েছে:

<batch:interrupted reason="reason" success="N" failures="N" parsed="N">

এই উপাদানটির অর্থ হল ব্যাচ প্রক্রিয়াকরণ বাধাগ্রস্ত হয়েছিল এবং বাধার কারণ পুনরুদ্ধারের সমস্ত প্রচেষ্টা ব্যর্থ হয়েছে৷ কিছু এন্ট্রি হয়ত ইতিমধ্যেই সফলভাবে প্রক্রিয়া করা হয়েছে৷ এই পয়েন্টের আগে সফল হয়েছে বলে রিপোর্ট করা হয়নি এমন সমস্ত এন্ট্রি পরিত্যাগ করা হয়েছে।

এই উপাদানটি খুবই অস্বাভাবিক এবং সাধারণত সংকেত দেয় যে অনুরোধের মূল অংশে পাঠানো ফিডটি সঠিক XML বিন্যাসে ছিল না।

<batch:status> উপাদানের মতো, reason বৈশিষ্ট্যে একটি ছোট স্ট্যাটাস কোড পাওয়া যাবে। একটি দীর্ঘ প্রতিক্রিয়া উপাদান ভিতরে পাওয়া যেতে পারে.

উদাহরণ ব্যাচ অপারেশন এবং স্থিতি ফিড

এখানে একটি ব্যাচ অপারেশন ফিড যা সার্ভারে পাঠানো যেতে পারে। এই ফিড অনুরোধ করে যে সার্ভার দুটি এন্ট্রি মুছে ফেলবে এবং দুটি নতুন এন্ট্রি যোগ করবে। মনে রাখবেন যে <feed> উপাদানটিতে ব্যাচের জন্য একটি নামস্থানের বিবরণ অন্তর্ভুক্ত করতে হবে, যেমনটি নীচের উদাহরণে হাইলাইট করা হয়েছে।

POST : http://www.google.com/base/feeds/items/batch
<?xml version="1.0" encoding="UTF-8"?>
<feed
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
  xmlns:g="http://base.google.com/ns/1.0"
  xmlns:batch="http://schemas.google.com/gdata/batch">
  <title type="text">My Batch Feed</title>
  <entry>
    <id>http://www.google.com/base/feeds/items/13308004346459454600</id>
    <batch:operation type="delete"/>
  </entry>
  <entry>
    <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
    <batch:operation type="delete"/>
  </entry>
  <entry>
    <title type="text">...</title>
    <content type="html">...</content>
    <batch:id>itemA</batch:id>
    <batch:operation type="insert"/>
    <g:item_type>recipes</g:item_type>
  </entry>
  <entry>
    <title type="text">...</title>
    <content type="html">...</content>
    <batch:id>itemB</batch:id>
    <batch:operation type="insert"/>
    <g:item_type>recipes</g:item_type>
  </entry>
</feed>

ধরা যাক যে দুটি সন্নিবেশ কাজ করেছে, কিন্তু দুটি মুছে ফেলার একটি ব্যর্থ হয়েছে। এই ক্ষেত্রে, ব্যাচ স্ট্যাটাস ফিড নিম্নলিখিত মত দেখতে পারে. লক্ষ্য করুন যে ব্যাচ অপারেশন ফিডের তুলনায় এন্ট্রিগুলি পুনরায় সাজানো হয়েছে।

<?xml version="1.0" encoding="UTF-8"?>
<feed
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
  xmlns:g="http://base.google.com/ns/1.0"
  xmlns:batch="http://schemas.google.com/gdata/batch">
  <id>http://www.google.com/base/feeds/items</id>
  <updated>2006-07-11T14:51:42.894Z</updated>
  <title type="text">My Batch</title>
  <link rel="http://schemas.google.com/g/2005#feed"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items"/>
  <link rel="http://schemas.google.com/g/2005#post"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items"/>
  <link rel=" http://schemas.google.com/g/2005#batch"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items/batch"/>
  <entry>
    <id>http://www.google.com/base/feeds/items/2173859253842813008</id>
    <published>2006-07-11T14:51:43.560Z</published>
    <updated>2006-07-11T14:51: 43.560Z</updated>
    <title type="text">...</title>
    <content type="html">...</content>
    <link rel="self"
      type="application/atom+xml"
      href="http://www.google.com/base/feeds/items/2173859253842813008"/>
    <link rel="edit"
      type="application/atom+xml"
      href="http://www.google.com/base/feeds/items/2173859253842813008"/>
    <g:item_type>recipes</g:item_type>
    <batch:operation type="insert"/>
    <batch:id>itemB</batch:id>
    <batch:status code="201" reason="Created"/>
  </entry>
  <entry>
    <id>http://www.google.com/base/feeds/items/11974645606383737963</id>
    <published>2006-07-11T14:51:43.247Z</published>
    <updated>2006-07-11T14:51: 43.247Z</updated>
    <title type="text">...</title>
    <content type="html">...</content>
    <link rel="self"
      type="application/atom+xml"
      href="http://www.google.com/base/feeds/items/11974645606383737963"/>
    <link rel="edit"
      type="application/atom+xml"
      href="http://www.google.com/base/feeds/items/11974645606383737963"/>
    <g:item_type>recipes</g:item_type>
    <batch:operation type="insert"/>
    <batch:id>itemA</batch:id>
    <batch:status code="201" reason="Created"/>
  </entry>
  <entry>
    <id>http://www.google.com/base/feeds/items/13308004346459454600</id>
    <updated>2006-07-11T14:51:42.894Z</updated>
    <title type="text">Error</title>
    <content type="text">Bad request</content>
    <batch:status code="404"
      reason="Bad request"
      content-type="application/xml">
      <errors>
        <error type="request" reason="Cannot find item"/>
      </errors>
    </batch:status>
  </entry>
  <entry>
    <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
    <updated>2006-07-11T14:51:43.246Z</updated>
    <content type="text">Deleted</content>
    <batch:operation type="delete"/>
    <batch:status code="200" reason="Success"/>
  </entry>
</feed>

GData Java ক্লায়েন্ট লাইব্রেরির ব্যাচ কার্যকারিতা ব্যবহার করে

এই বিভাগটি ব্যাখ্যা করে যে কিভাবে GData Java ক্লায়েন্ট লাইব্রেরির ব্যাচ কার্যকারিতা ব্যবহার করে একটি গ্রুপ সন্নিবেশ, আপডেট এবং/অথবা মুছে ফেলার অনুরোধ জমা দিতে হয়।

এই বিভাগে দেওয়া উদাহরণগুলি Google বেস API ব্যবহার করে।

স্ট্যান্ডার্ড GData এবং Google Base ক্লাসগুলি ছাড়াও প্রথমে আপনার প্রয়োজনীয় ক্লাসগুলি আমদানি করুন:

import com.google.gdata.data.batch.*;
import com.google.api.gbase.client.*;

একটি ব্যাচ অনুরোধ জমা দিতে, আপনাকে একটি ফিড থেকে ব্যাচ URL পেতে হবে। নিম্নলিখিত কোড স্নিপেটটি ব্যাখ্যা করে কিভাবে এটি করতে হয়, ধরে নিই যে feed একটি GoogleBaseFeed অবজেক্ট যাতে একটি ফিড সম্পর্কে তথ্য রয়েছে:

Link batchLink = feed.getLink(Link.Rel.FEED_BATCH, Link.Type.ATOM);
if (batchLink != null) {
  URL batchUrl = new URL(batchLink.getHref());
  ... // batch handling
} else {
  // batching is not supported for this feed
}

নিম্নলিখিত কোড স্নিপেট একটি ফিড প্রস্তুত করে যা একটি অপারেশনে দুটি এন্ট্রি সন্নিবেশ করবে:

GoogleBaseEntry entry1 = new GoogleBaseEntry();
...   // initialize entry 1 content
BatchUtils.setBatchId(entry1, "A"); // A is the local batch ID for this entry
feed.addEntry(entry1);
GoogleBaseEntry entry2 = new GoogleBaseEntry();
... // initialize entry 2 content
BatchUtils.setBatchId(entry2, "B"); // B is the local batch ID for this entry
feed.addEntry(entry2);

এই উদাহরণের কোডটি কখনই স্পষ্টভাবে বলে না যে এই এন্ট্রিগুলির জন্য যে অপারেশনটি করা হবে তা হল insert । আপনাকে এটি স্পষ্টভাবে উল্লেখ করার দরকার নেই, কারণ সন্নিবেশ হল ডিফল্ট অপারেশন।

ব্যাচ ফিড পাঠাতে এবং ফলাফল পেতে, Service.batch পদ্ধতিতে কল করুন।

Service.insert এর মত, Service.batch নতুন <atom:id> মান সেট সহ সন্নিবেশিত এন্ট্রি ফেরত দেয়। প্রত্যাবর্তিত এন্ট্রিগুলি একটি GoogleBaseFeed অবজেক্টে রয়েছে৷

আপনি যদি অন্য দুটি এন্ট্রি সন্নিবেশ করার সাথে সাথে একটি তৃতীয় এন্ট্রি (যা আপনি ইতিমধ্যেই এনেছেন এবং entry3 তে সংরক্ষণ করেছেন) মুছতে চান, তাহলে আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন:

GoogleBaseEntry toDelete = new GoogleBaseEntry();


toDelete.setId(entry3.getId());
BatchUtils.setBatchOperationType(toDelete, BatchOperationType.DELETE);

feed.addEntry(toDelete);


GoogleBaseFeed result = service.batch(batchUrl, feed);

এখানে, service হল com.google.gdata.client.Service এর একটি উদাহরণ।

আপনি যদি একটি এন্ট্রি আপডেট করতে চান, OperationType.UPDATE উল্লেখ করুন, এবং এন্ট্রিটিকে বেশিরভাগ ফাঁকা না রেখে কাঙ্খিত পরিবর্তনগুলি দিয়ে শুরু করুন৷

এই উদাহরণগুলি Google বেস ডেটা API ব্যবহার করে। আপনি যদি অন্য ধরনের GData পরিষেবার সাথে service.batch ব্যবহার করেন, তাহলে GoogleBaseFeed , GoogleBaseEntry , এবং GoogleBaseService ক্লাসগুলিকে উপযুক্ত ফিড, এন্ট্রি এবং পরিষেবা ক্লাস দিয়ে প্রতিস্থাপন করুন৷

একটি ব্যাচ অপারেশনের ফলাফল অগত্যা তাদের অনুরোধ করা হয়েছে যে ক্রমে ফেরত দেওয়া হয় না. উপরের উদাহরণে, ফলাফলের ফিডে entry2 এর পরে entry1 থাকতে পারে। আপনার কখনই অনুমান করা উচিত নয় যে কোনও নির্দিষ্ট ক্রমে এন্ট্রিগুলি ফেরত দেওয়া হয়।

আপনার ব্যাচ অপারেশন ফিড প্রতিটি সন্নিবেশ অপারেশনের জন্য একটি অনন্য ব্যাচ আইডি বরাদ্দ করা উচিত, যেমনটি ট্র্যাকিং অপারেশনে ব্যাখ্যা করা হয়েছে। উপরের উদাহরণে, ব্যাচ আইডিগুলি হল A এবং B অতএব, অনুরোধকৃত ক্রিয়াকলাপের স্থিতি খুঁজে পেতে, আপনাকে ফিরে আসা ব্যাচ ফিডে এন্ট্রিগুলির উপর পুনরাবৃত্তি করতে হবে এবং তাদের ব্যাচ আইডি বা এন্ট্রি আইডি তুলনা করতে হবে, নিম্নরূপ:

for (GoogleBaseEntry entry : result.getEntries()) {
  String batchId = BatchUtils.getBatchId(entry);      
  if (BatchUtils.isSuccess(entry)) {     
    if ("A".equals(batchId)) {       
      entry1 = entry;     } 
    else if ("B".equals(batchId)) {       
      entry2 = entry;     } 
    else if (BatchUtils.getBatchOperationType(entry) 
      == BatchOperationType.DELETE) {       
      System.out.println("Entry " + entry.getId() +
      " has been deleted successfully.");     
    }      
  } else {     
    BatchStatus status = BatchUtils.getBatchStatus(entry);     
    System.err.println(batchId + " failed (" +                
      status.getReason() + ") " +  status.getContent());      
    }    
  } 

প্রত্যাবর্তিত ফিডে আপনি যে প্রতিটি এন্ট্রি পাবেন তার একটি সংশ্লিষ্ট BatchStatus অবজেক্ট থাকবে। BatchStatus অবজেক্টে একটি HTTP রিটার্ন কোড এবং একটি প্রতিক্রিয়া রয়েছে যা বর্ণনা করে যে এন্ট্রি প্রক্রিয়া করার সময় কী ভুল হয়েছে৷ অপারেশন সফল হয়েছে কিনা তা জানাতে আপনাকে প্রতিটি এন্ট্রির HTTP রিটার্ন কোড পরীক্ষা করতে হবে।

BatchUtils.isSuccess সুবিধার পদ্ধতি দ্বারা উপরের উদাহরণে চেক করা হয়েছে। এই ক্ষেত্রে, এটি এর সমতুল্য: BatchUtils.getBatchStatus(entry) < 300

স্ট্যাটাস কোড এবং প্রতিক্রিয়াগুলি হ্যান্ডলিং স্ট্যাটাস কোডগুলিতে আরও ব্যাখ্যা করা হয়েছে।

উপরে ফিরে যাও