একটি এপিআই চালানো, যদি আমি কোনও বিষয়বস্তু-টাইপ শিরোনাম সংশোধন করি তা কি গ্রাহকদের জন্য জিনিসগুলি ভেঙে দেবে?


14

আমরা বেশ কয়েকটি লোক এটি ব্যবহার করে একটি এপিআই চালাচ্ছি। আমার পক্ষ থেকে কিছু উত্তরাধিকারের বিশৃঙ্খলার কারণে, শেষের পয়েন্টগুলির মধ্যে একটি ভুল কন্টেন্ট-টাইপ শিরোনামটি ফিরিয়ে দিচ্ছে , jsযখন এটি হওয়া উচিত json। আমার প্রশ্নটি হ'ল, আমরা যদি সঠিক মানটি ফেরত দিতে অদলবদল করে এটি ঠিক করি তবে এটি আমাদের বিদ্যমান গ্রাহকদের জন্য কীভাবে খারাপভাবে গণ্ডগোল করতে পারে? বা অন্যভাবে বলতে গেলে, আপনি কি এইরকম পরিবর্তন দেখলে অনেকগুলি এইচটিটিপি ক্লায়েন্ট লাইব্রেরি মারাত্মক ত্রুটি ছুঁড়ে ফেলার আশা করবেন?

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

এটি কী ধরণের বিভিন্ন এইচটিটিপি ক্লায়েন্ট ব্যবহার করছে তার উপর কিছুটা নির্ভর করে, তাই আমি ব্যবহারকারী এজেন্টদের এক নজরে দেখেছি। উত্তর: বিভিন্ন অনেক! শীর্ষস্থানীয়দের কয়েকটি এখানে:

"ওখট্টপ / ৩.২.০", "পাইথন-অনুরোধ / ২.১০.০", "রুবি", "পাইথন-অনুরোধ / ২.7.০", "মজিলা / ৫.০", "জাভা / ১.৮.০_91", "পাইথন-অনুরোধসমূহ / ২.৪.৩ "," ওখট্টপ / ৩.৩.০ "," লুসি "," ডালভিক / ২.১.০ "," গুগল-এইচটিপি-জাভা-ক্লায়েন্ট / ১.২০.০ "," পিএইচপি_অ্যাপনাম "," নেটিভহস্ট "," জাভা /1.7.0_67 "," অ্যাপাচি-এইচটিপিপিলেট / ইউএনএভায়বল "," ডালভিক / ১. 1..০ "," ওয়েব-স্নিফার / ১.১.০ "," আনইরেস্ট-অবজেক্ট / ১.১ "

বিভিন্ন বিভিন্ন মোবাইল এবং সার্ভার সাইড ল্যাঙ্গুয়েজ। বেশিরভাগ ব্রাউজার জাভাস্ক্রিপ্ট চলমান না, তবে তাদের মধ্যে কিছুও রয়েছে।

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


4
আমি ধরে নেব যে ক্লায়েন্টগুলি যে কোনও ভুল সামগ্রী-টাইপ শিরোলেখ দ্বারা সঠিকভাবে কাজ করে আপনি একবার সঠিকটি সেট করার পরে, কাজ বন্ধ করবেন না, তবে অনুমান সম্পর্কে তারা কী বলে তা আপনি জানেন। সুতরাং পরীক্ষা করুন, আপনার ব্যবহারকারীর বেসে আপনার পরিবর্তনগুলি আগাম যোগাযোগ করুন এবং / অথবা কিছু অতিরিক্ত যুক্তিতে নির্মিত যে কোনও নির্দিষ্ট ক্লায়েন্ট যদি ভেঙে যায় তবে আপনি সেই নির্দিষ্ট ক্লায়েন্টটি সনাক্ত করতে পারেন এবং ভুল সামগ্রী-টাইপ শিরোনাম ফিরিয়ে রাখতে পারেন (অথবা বিপরীত করুন, ফিরে যান) সেই ক্লায়েন্টগুলির জন্য সঠিক একটি যা সমর্থনের টিকিট তৈরি করে এবং বর্তমান ব্যবহারকারী / ব্যবহারকারী-এজেন্টদের জন্য সবকিছুকে একই রাখে)।
এইচবিউইজন

5
বাধ্যতামূলক xkcd: xkcd.com/1172
njzk2

আপনি কি আপনার এপিআই এর সংস্করণ দিচ্ছেন না?
মাইকেল হ্যাম্পটন

পুরো এপিআইয়ের জন্য আমাদের কাছে কেবলমাত্র একটি প্রধান সংস্করণ নম্বর রয়েছে যা আমরা কয়েক বছরের মধ্যে কেবলমাত্র কিছুটা বড় পুনর্গঠন করার সময় দেখতে পাকতাম to এই মুহুর্তে আমরা অবশ্যই এই সমস্যাটি সমাধান করব, তবে ... মনে হয় আমরা কখনই এটি করতে পারি না। এটি সেই সংস্করণ সংখ্যাগুলির মধ্যে একটি।
হ্যারি উড

উত্তর:


30

এটি আমাদের বিদ্যমান গ্রাহকদের জন্য খারাপভাবে খারাপ জিনিসগুলি কীভাবে ফেলতে পারে?

যদি তারা লিখিত কোড লিখে থাকে যা এই লিখিত বিষয়বস্তুর উপর নির্ভর করে তবে এটি সম্পূর্ণভাবে তাদের যুদ্ধজাহাজ ডুবে যেতে পারে ।

আমি গ্রন্থাগারগুলিতে ত্রুটি ছুঁড়ে ফেলার আশা করব না, তবে আমি প্রত্যাশা করি যে কিছু ক্ষেত্রে কঠোর লাইব্রেরিগুলি ভুল এমআইএমআই টাইপ পরিচালনা করতে তাদের আচরণকে অগ্রাহ্য করেছে।

যদি আপনার এপিআই-র কোনও অনুরোধ ক্ষেত্রের কোথাও কোনও সংস্করণ / সংশোধন মান থাকে, তবে এটি উত্থাপন করুন এবং নতুন সংস্করণে সঠিক প্রকারটি ফেরত দিন তবে পুরানো সংস্করণগুলিতে ভুল প্রকারটি ফিরে যেতে অবিরত করুন। আপনার যদি অনুরোধের ক্ষেত্রটি না থাকে তবে এখন একটি যুক্ত করার ভাল সময় time


6
ইতিমধ্যে একটি ভাল হাইপারবোলের জন্য +1
এইচবি ব্রাইজন

4
প্রায়শই আপনার পছন্দ হয় না। একটি "আপডেট বা ছুটি" দেওয়া গ্রাহকরা নীতিগতভাবে ভাল, অনুশীলনে খারাপ, তার পরে সিদ্ধান্ত নিতে পারেন। পুরানো সংস্করণ সময়ের সাথে সাথে অবসর নেওয়া যেতে পারে।
alzee

3
অনুরোধগুলির সংস্করণ করা +1 করুন, যদিও আপনি আরও তথ্যের জন্য en.wikedia.org/wiki/Software_versioning পরীক্ষা করতে চাইতে পারেন ।
এসবস

7
@ উইনস্টোনওয়ার্ট: অবশ্যই এটি সার্থক। লোকেরা কোন এপিআই সংস্করণটি ব্যবহার করতে চায় তা নির্দিষ্ট করে, তারপরে আপনি তাদের এপিআই আপডেট করার সময় এবং তাদের প্রোগ্রামটি আপডেট করার মধ্যে তাদের প্রোগ্রামটি স্বতঃস্ফূর্তভাবে সংযোজন করে না। আপনি যদি এটি না করেন, আপনি নিজের ইন্টারফেস পরিবর্তন করার সময় আপনি নিজের ক্লায়েন্টের কোডের প্রতিটি বর্তমান এবং historicalতিহাসিক প্রকাশটি স্বয়ংক্রিয়ভাবে ভেঙে ফেলবেন । এবং এটি একটি পরিষেবা চালানোর জন্য একটি ভয়ঙ্কর উপায়।
মনিকার সাথে লাইটনেস রেস

1
এটি উপায় দ্বারা খুব ভাল পয়েন্টের মতো বলে মনে হচ্ছে: "আমি প্রত্যাশা করি যে কিছু ক্ষেত্রে কঠোর গ্রন্থাগারগুলি ভুল মাইম-টাইপ পরিচালনা করার জন্য তাদের আচরণকে অগ্রাহ্য করেছে" আমার হানচ (পুরো প্রশ্নের উত্তর হিসাবে) যে ক্লায়েন্টের বিশাল সংখ্যাগরিষ্ঠ গ্রন্থাগারগুলি এটি দিয়ে ঠিক থাকবে তবে এটি উদ্বেগের বিষয়। কিছু গ্রাহক হয়ত এর আশেপাশে সক্রিয়ভাবে কাজ করেছেন এবং অদলবদলটি তাদের জন্য এটি ভেঙে দেবে। আমি ভাবছি যে এর কতটা ঘটনা ঘটেছে।
হ্যারি উড

11

এই জাতীয় পরিবর্তন দেখলে আপনি কি অনেক বিভিন্ন এইচটিটিপি ক্লায়েন্ট লাইব্রেরি মারাত্মক ত্রুটি ছুঁড়ে ফেলার আশা করবেন?

না। প্রতিটি HTTP ক্লায়েন্ট লাইব্রেরি আমি পরিচিত যার সাথে প্রোগ্রামার নির্দিষ্টভাবে সেই শিরোনামটি না পড়ে এবং এর সাথে কিছু না করে কন্টেন্ট-টাইপ শিরোনামটিকে উপেক্ষা করবে। আমি এমন একটি লাইব্রেরি কল্পনা করতে পারি যেখানে বিষয়বস্তুর ধরণ: অ্যাপ্লিকেশন / জেসসন স্বয়ংক্রিয়ভাবে একটি জেসন পার্সারকে জড়িত করে তোলে তবে বাস্তবে এমনটি ঘটেছিল এমন কোনও ক্ষেত্রে আমি জানি না।

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

তারা কীভাবে ভুল শিরোনাম লক্ষ্য করেছে? এটি দেখার মতো হতে পারে, কারণ যদি ভুল শিরোনামটি আসলে তাদের সমস্যা তৈরি করত তবে তারা স্পষ্টতই এটিকে উপেক্ষা করছিল না এবং এটি ঠিক করা থাকলে তাদের সমস্যা হতে পারে।



যদি আপনি jQuery ব্যবহার করেন $.ajaxএবং dataType:বিকল্পটি নির্দিষ্ট না করেন তবে এটি Content-typeশিরোনাম থেকে প্রতিক্রিয়া প্রকারটি অনুভব করে । সুতরাং যদি এটি হয় তবে এটি application/jsonকলারের কাছে যাওয়ার আগে এটি স্বয়ংক্রিয়ভাবে পার্স করবে।
বার্মার

6

আপনার সমস্ত ক্লায়েন্টের কাছ থেকে সাইন-অফ না পেয়ে বলা খুব শক্ত। আপনার API কে v.Next এ আপগ্রেড করতে আমি নিম্নলিখিত দুটি পদ্ধতির একটি গ্রহণ করার পরামর্শ দেব।

  1. বিদ্যমান এপিআই প্রসারিত করুন। আপনার API এ একটি ক্যোয়ারী স্ট্রিং বা কিছু অন্যান্য ভেরিয়েবল যুক্ত করুন যা v.Next ব্যবহারের লক্ষণীয়। সেই পরিবর্তনশীলটি ব্যবহার করে সমস্ত অনুরোধের জন্য, আপডেট হওয়া সামগ্রী-প্রকারটি ব্যবহার করুন।
  2. আপনার বর্তমান এপিআই এর সমান্তরালে আপনার এপিআই এর একটি মঞ্চ বা প্রাক-উত্পাদন দৌড়ুন। এটি উত্পাদন প্রায় অনুরূপ হওয়া উচিত। এমনকি একই ব্যাক-এন্ড ব্যবহার করে। যদিও এটির v.Next এর প্রস্তাবিত পরিবর্তনগুলি থাকবে।

যে কোনও দৃশ্যে, আপনার ক্লায়েন্টদের আপনি যে পরিবর্তনগুলি করতে চান তা এবং লক্ষ্য কাটওভারের তারিখ / সময়কে জানান communicate পরিষেবা যাতে কোনও বিঘ্ন না ঘটে তা নিশ্চিত করতে লক্ষ্য তারিখের আগে ভাল পরীক্ষা করার জন্য তাদেরকে উত্সাহিত করুন।

V.Next এ করা পরিবর্তনগুলি বিশদ সহ আপনার একটি উত্সর্গীকৃত পৃষ্ঠা রয়েছে তা নিশ্চিত করুন। এটি আপনার ক্লায়েন্টদের পাঠানো যোগাযোগের মধ্যে অন্তর্ভুক্ত করা উচিত। আপনি যদি বিদ্যমান ক্লায়েন্টদের সাথে কোনও ফিক্স নিয়ে আলোচনা করেছেন তবে এই পৃষ্ঠায় সেগুলি অন্তর্ভুক্ত করুন।

অবশেষে, আপনার গ্রাহকদের সাথে অতিরিক্ত যোগাযোগ এবং তাদের স্প্যাম করার মধ্যে লাইনটি অনুসরণ করুন। আরও তাত্ক্ষণিক / জরুরি অগ্রাধিকারগুলি আসার সাথে সাথে এই বিজ্ঞপ্তিগুলি সহজেই উপেক্ষা করা যায়।

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


ধন্যবাদ। আমি যে উত্তরটি শুনতে চেয়েছিলাম তা এটি নয় তবে সম্ভবত আপনি ঠিক বলেছেন। আমাদের কেবল খুব সতর্কতার সাথে পরিবর্তনটি চালু করা দরকার। যদিও এটি "বলা খুব কঠিন"? আমার ধারণা আমি আশা করছি যে কিছু লোকের এই ধরণের বিষয়বস্তুর ধরণের শিরোনাম পরিবর্তনের সম্ভাব্য প্রভাব রয়েছে (সতর্কতার সাথে সংস্করণটির আরও সাধারণ বিষয়গুলি বাদ দিয়ে)
হ্যারি উড

5

এখানে একটি লাইব্রেরির উদাহরণ রয়েছে (ভাল, একক কমান্ড) যা এটি ভেঙে দেবে:

দ্য cmdlet Invoke-RestMethodJSON সঙ্গে ভিন্নভাবে কাজ করে। যদি অনুরোধের ফলাফলটি JSON, XML, বা এটিএম / আরএসএস হয় (এবং আমি মনে করি এটি শিরোনামের উপর ভিত্তি করে), এটি পার্স / ডিসায়ারাইজ করে এবং দেশীয় বস্তুগুলি ফিরিয়ে দেয়, অন্যথায় এটি কাঁচা তথ্য ফেরত দেয়।

সুতরাং বিদ্যমান কোডটি একটি স্ট্রিং মোকাবেলায় লিখিত হবে (সম্ভবত এটি পাস করে ConvertFrom-Json), এবং হঠাৎ সমস্ত ব্যর্থ হয়ে যেতে শুরু করবে।



-2

আমি দুটি পরিণতি লক্ষ করেছি:

  1. কিছু ক্লায়েন্ট লাইব্রেরি প্রতিক্রিয়াটি সঠিকভাবে প্রক্রিয়া করবে না। উদাহরণস্বরূপ, প্রতিক্রিয়াটি জসন বা অ্যারের পরিবর্তে একটি স্ট্রিং দেয়।
  2. সংকোচন সর্বদা প্রয়োগ করা হয় না।

অবশ্যই এটি ডেটা প্রেরণকারী, এটি গ্রহণকারী নয়, যা সংক্ষেপণ প্রয়োগ করে?
ট্রিগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.