প্রতিক্রিয়া অদৃশ্য হয়ে গেলে স্ট্রাইপ আপনার অনুরোধ মনে রাখে
সার্ভার অপারেশন সম্পূর্ণ করার পরেও একটি টাইমআউট চেকআউটকে অনিশ্চিত করে তুলতে পারে।
সার্ভার অপারেশন সম্পূর্ণ করার পরেও একটি টাইমআউট চেকআউটকে অনিশ্চিত করে তুলতে পারে। এই 'আন্ডার দ্য হুড' এক্সপ্লেনার স্ট্রাইপ এপিআই v1-এর ডকুমেন্ট করা আইডেম্পোটেন্সি চুক্তি ব্যবহার করে স্থিতিশীল অপারেশন কী, সংরক্ষিত-প্রতিক্রিয়া রিপ্লে, প্যারামিটার এবং সমসাময়িক সীমা, ধারণের সময়সীমা এবং ফলাফলের সমন্বয় দেখায়।
লিখিত সংস্করণ পড়ুন (ইংরেজি) ↗
এই ভিডিওতে যা আছে
- আইডেম্পোটেন্সি একটি অপারেশনের পুনরাবৃত্তি করার উদ্দেশ্যমূলক প্রভাব নিয়ে কাজ করে। স্ট্রাইপ এপিআই v1 একটি ডকুমেন্ট করা সংরক্ষিত-প্রতিক্রিয়া রিপ্লে চুক্তি যুক্ত করে।
- একই যৌক্তিক ক্রিয়ার পুনঃচেষ্টা একই কী এবং প্যারামিটার ব্যবহার করে। পৃথক এসডিকে কল বা অ্যাপ্লিকেশন রিস্টার্ট জুড়ে অপারেশন কীটি সংরক্ষণ করুন; একটি সম্পূর্ণ নতুন ক্রিয়ার জন্য তার নিজস্ব কী প্রয়োজন।
- এন্ডপয়েন্ট কার্যকর করা শুরু হওয়ার পরে, স্ট্রাইপ এপিআই v1 প্রথম অনুরোধের স্থিতি এবং বডি সংরক্ষণ করে, যার মধ্যে 500 ত্রুটিও রয়েছে এবং পুনঃচেষ্টার সময় সেই সংরক্ষিত প্রতিক্রিয়া ফিরিয়ে দেয়।
- একই কী সহ পরিবর্তিত প্যারামিটার একটি অমিল তৈরি করে। বৈধতা ব্যর্থতা এবং সমসাময়িক কার্যকরকরণ বিরোধগুলি সেই প্রচেষ্টার জন্য কোনও আইডেম্পোটেন্ট ফলাফল সংরক্ষণ করে না এবং পুনরায় চেষ্টা করা যেতে পারে।
- স্ট্রাইপ এপিআই v1 কীগুলি কমপক্ষে 24 ঘন্টা ধরে রাখে এবং এর পরে সেগুলি ছাঁটাই করতে পারে। অনিষ্পন্ন নেটওয়ার্ক পুনঃচেষ্টা প্রথম 24 ঘন্টার মধ্যে সীমাবদ্ধ রাখুন, তারপর অপারেশনটি পুনরাবৃত্তি করার আগে থামুন এবং সমন্বয় করুন।
- সংযোগ পুনরুদ্ধার হওয়ার পরেও একটি ক্যাশ করা 500 বারবার রিপ্লে হতে পারে। আসল অপারেশনের পার্শ্বপ্রতিক্রিয়া থাকতে পারে; এর ফলাফল নিশ্চিত করতে প্রাসঙ্গিক অবজেক্ট, ড্যাশবোর্ড অনুরোধ এবং ওয়েবহুক ব্যবহার করুন।
- এপিআই v2 ভিন্ন রিপ্লে সিম্যান্টিক ব্যবহার করে। একটি কী ইমেল, ইনভেন্টরি এবং প্রতিটি স্থানীয় ডেটাবেস অপারেশনের জন্য সর্বজনীনভাবে একবার ডেলিভারি নিশ্চিত করে না।
অনুবাদিত প্রতিলিপি
মূল ইংরেজি বর্ণনা থেকে অনূদিত। উপলব্ধ অডিও এবং ক্যাপশন YouTube দ্বারা নিয়ন্ত্রিত।
একটি টাইমআউট কি আপনার পেমেন্ট বাতিল করেছে?
0:00 আপনি মনে করেন একটি টাইমআউট মানে আপনার পেমেন্ট ব্যর্থ হয়েছে। সার্ভার কাজ শেষ করতে পারে যখন উত্তরটি হারিয়ে যায়, আপনার চেকআউটকে আত্মবিশ্বাসের সাথে একেবারে কিছুই না দেখানো অবস্থায় রেখে যায়। কেন একটি পুনঃচেষ্টা আবার চার্জ করতে পারে? স্ট্রাইপ কীভাবে একটি চেষ্টাকে মনে রাখে? কখন আপনার পুনঃচেষ্টা করা বন্ধ করা উচিত? এবং একটি বাজে বিস্তারিত মনে রাখবেন। একটি মনে রাখা ত্রুটি নেটওয়ার্ক সমস্যার চেয়ে বেশি দিন টিকে থাকতে পারে।
0:17 আমরা সেদিকে ফিরে আসব। এটি The Daily Diff, আন্ডার দ্য হুড।
একটি আইডেম্পোটেন্সি কী কী শনাক্ত করে?
0:21 আইডেম্পোটেন্সি মানে একটি অপারেশন পুনরাবৃত্তি করার একই উদ্দেশ্যমূলক প্রভাব রয়েছে একবার করার মতো। একটি আইডেম্পোটেন্সি কী একটি যৌক্তিক ক্রিয়াকে লেবেল করে। স্ট্রাইপের এপিআই সংস্করণ এক পুনঃচেষ্টার সময় সেই লেবেলটি সনাক্ত করে এবং একটি সংরক্ষিত প্রতিক্রিয়া রিপ্লে করে। একটি কফি কেনার কল্পনা করুন। স্ট্রাইপ আপনার পেমেন্ট অনুরোধ সম্পূর্ণ করে, এবং প্রতিক্রিয়াটি ফিরে আসার সময় হারিয়ে যায়। গ্রাহক একটি স্পিনার দেখেন। তাদের ব্যাঙ্কের আরও উত্তেজনাপূর্ণ ব্যাখ্যা থাকতে পারে। একটি অরক্ষিত তৈরির অনুরোধ পার্শ্বপ্রতিক্রিয়া পুনরাবৃত্তি করতে পারে।
একই কী কীভাবে একটি পুনঃচেষ্টাকে নিরাপদ করে তোলে?
0:45 প্রথম প্রচেষ্টার আগে একটি অনন্য কী সংযুক্ত করুন এবং পুনঃচেষ্টার জন্য এটি রাখুন। যদি আপনার অ্যাপ্লিকেশন পুনরায় শুরু হয়, আপনার রেকর্ডে অপারেশন সহ সেই কীটি সংরক্ষণ করুন। স্ট্রাইপের সংস্করণ এক এপিআই-এর জন্য, একবার এন্ডপয়েন্ট কার্যকর করা শুরু হলে, প্রথম অনুরোধের স্থিতি এবং বডি সংরক্ষণ করা হয়। একই কী এবং প্যারামিটার আবার পাঠান, এবং স্ট্রাইপ সংরক্ষিত প্রতিক্রিয়া ফিরিয়ে দেয়। কফিটি যেখানে ছিল সেখানেই থাকে যখন এর রসিদ আবার ভ্রমণ করে।
স্ট্রাইপ ঠিক কী সংরক্ষণ করে?
1:07 এখানে স্ট্রাইপের আসল শব্দবিন্যাস। একই কী সহ পুনঃচেষ্টাগুলি সংরক্ষিত প্রতিক্রিয়া ফিরিয়ে দেয়, পাঁচশ ত্রুটি সহ। ডকুমেন্টেশন আপনার আশাবাদী নামক পুনঃচেষ্টা সহায়কের চেয়ে বেশি কাজ করে। গ্রাহক আবার ট্যাপ করেন। আপনার অ্যাপ সিদ্ধান্ত নেয় যে এটি মুলতুবি থাকা কেনাকাটা পুনরায় শুরু করে নাকি অন্য একটি শুরু করে। একটি সম্পূর্ণ নতুন কফি একটি নতুন কী পায়। প্রতিটি নেটওয়ার্ক পুনঃচেষ্টার জন্য একটি নতুন কী সুরক্ষা ব্যর্থ করে দেয়।
1:27 একই কী সহ ভিন্ন প্যারামিটার একটি অমিল ট্রিগার করে।
অনুরোধ পরিবর্তন হলে কী ঘটে?
1:30 যদি প্যারামিটার বৈধতায় ব্যর্থ হয়, বা সেই কী সহ অন্য একটি অনুরোধ এখনও কার্যকর হচ্ছে, স্ট্রাইপ সেই প্রচেষ্টার জন্য কোনও আইডেম্পোটেন্ট ফলাফল সংরক্ষণ করে না। সেই অনুরোধগুলি পুনরায় চেষ্টা করা যেতে পারে। একটি রেসিং অনুরোধ একটি দ্বন্দ্ব পায়। এগুলি সংস্করণ এক এর নিয়ম। সংস্করণ দুই ভিন্নভাবে আচরণ করে। একটি হেডার আপনার সিস্টেম জুড়ে ঠিক একবার ডেলিভারির প্রতিশ্রুতি দিতে পারে না। ইমেল, ইনভেন্টরি এবং আপনার ডেটাবেসের প্রত্যেকের ব্যর্থতা হ্যান্ডলিং প্রয়োজন।
1:52 কীটি তার ডকুমেন্ট করা সীমার মধ্যে অপারেশনকে রক্ষা করে। স্ট্রাইপ সংস্করণ এক কীগুলি কমপক্ষে চব্বিশ ঘন্টা ধরে রাখে এবং এর পরে ছাঁটাই করতে পারে।
কতক্ষণ মনে রাখা ফলাফল পুনঃচেষ্টার জন্য নিরাপদ থাকে?
1:59 একটি ছাঁটাই করা কী একটি নতুন অনুরোধ কার্যকর করতে পারে। অনিষ্পন্ন পুনঃচেষ্টাগুলি প্রথম দিনের মধ্যে রাখুন। এর বাইরে, থামুন এবং আসল ফলাফল সমন্বয় করুন। সার্ভারকে শ্বাস নেওয়ার সুযোগ দিতে এক্সপোনেনশিয়াল ব্যাকঅফ এবং জিটার ব্যবহার করুন। অন্যথায় পুনঃচেষ্টাগুলি একটি জ্বলন্ত কফি শপের বাইরে একটি সারি তৈরি করে। স্ট্রাইপের লাইব্রেরিগুলি পুনঃচেষ্টাগুলি পরিচালনা করে, তবে আপনার লাইব্রেরির ডিফল্টগুলি পরীক্ষা করুন। সেই আঠালো ত্রুটিটি হল ক্যাচ।
কেন একটি মনে রাখা ত্রুটি বারবার ফিরে আসতে পারে?
2:20 একটি ক্যাশ করা পাঁচশ প্রতিক্রিয়া সংযোগ পুনরুদ্ধার হওয়ার পরেও বারবার রিপ্লে হতে থাকে। আসল অপারেশনের পার্শ্বপ্রতিক্রিয়া তৈরি হতে পারে। অবজেক্ট, ড্যাশবোর্ড এবং ওয়েবহুক ব্যবহার করে এর ফলাফল সমাধান করুন। একটি নতুন কী ক্রিয়াটি পুনরাবৃত্তি করতে পারে। আপনি যদি এটি আমার মুখে শুনতে না চান তবে আপনার ইনবক্সে প্রতিদিন সকালে বিনামূল্যে The Daily Diff পাবেন, dailydiff.dev এ, নিচে লিঙ্ক দেওয়া আছে।
আমি কি এই চুক্তি সহ একটি পুনঃচেষ্টা বোতাম পাঠাবো?
2:39 রায়, আন্ডার দ্য হুড। শিপ ইট। আমি স্থিতিশীল কীগুলি সীমাবদ্ধ পুনঃচেষ্টা এবং সমন্বয়ের সাথে শিপ করব, যাতে গ্রাহকরা আপনার বিতরণ করা সিস্টেমের শিক্ষায় অর্থায়ন না করে কফি পান। এবং এটিই আজকের জন্য diff। আমি Axrisi থেকে নিকো। দায়িত্বের সাথে মার্জ করুন।
উৎস
- Idempotent requestsStripe Docs
- Designing robust and predictable APIs with idempotencyStripe Engineering — Brandur Leach
- Advanced error handlingStripe Docs
- HTTP Semantics — RFC 9110 §9.2.2 Idempotent MethodsIETF / RFC Editor



