এইচটিটিপিপি এপিআই এর কি সর্বদা কোনও দেহ ফেরত দেওয়া উচিত?


33

এইচটিটিপিআই এপিআই প্রতিক্রিয়াগুলি সম্পর্কে কি কোনও ধরণের স্ট্যান্ডার্ড রয়েছে?

পড়ার পর এই বক্তৃতা থ্রেড আমি আশ্চর্য শুরু করে দিল। আমরা আমার কাজটিতে আমাদের পাবলিক এইচটিটিপি জেএসন এপিআই বিকাশ করছি, এবং যখন কঠোরভাবে প্রয়োজন হয় না তখন আমরা কোনও কিছু ফেরত দেই না (উদাহরণস্বরূপ একটি পুট টু / রিসোর্স / {আইডি} কেবল 200 আসে যখন ঠিক আছে বা সংশ্লিষ্ট 4XX বা 5XX কোড, তবে না জেএসএন বডি)

{"success":true}উপরের লিঙ্কটিতে তারা আলোচনার মতো জেনেরিক কি আমাদের ফিরিয়ে দেওয়া উচিত , বা কোনও "অকার্যকর" দেহটি ফিরিয়ে দেওয়া এবং এইচটিসি প্রতিক্রিয়া কোড দিয়ে সমস্ত কিছু পরিচালনা করা ঠিক?


8
success "সাফল্য": সত্য} অপ্রয়োজনীয় বলে মনে হচ্ছে। পরিবর্তে HTTP কোডগুলির আরও ভাল ব্যবহার করার চেষ্টা করুন। w3.org/Protocols/rfc2616/rfc2616-sec9.html
কোডার্ট

এইচটিটিপি 1.1 শিরোনামের সাথে পরিচয় করায় যার শরীরের অভাব রয়েছে, এটি কেবল জিইটি-র শিরোনামের প্রতিক্রিয়া।
বোকটুলাস

উত্তর:


28

PUT সম্পর্কিত, তবে পোষ্টেও প্রযোজ্য। HTTP- র স্পেসিফিকেশন ধারা 9 নিয়ম বা এমনকি পরামর্শ (উচিত) উপর একটু খালি যখন এটি দৃশ্যকল্প আপনি বর্ণনা করছেন আসে। আপনার প্রশ্নের সাথে সম্পর্কিত রেখাটি সবচেয়ে ঘনিষ্ঠভাবে কভার করা হয়েছে:

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

আমি মনে করি না যে এটির উপরে আমি কোনও ঘুম হারাব, তবে আমি জিজ্ঞাসা করব, জেএসএএন-এর অংশটিকে প্রতিক্রিয়াতে যোগ করে আপনি কী অর্জন করবেন? আপনি সবেমাত্র বেরিয়ে এসেছেন (ঠিক আছে, বাল্ক অতিরিক্ত পরিমাণে হতে পারে!) স্ট্যাটাস কোডটি ইতিমধ্যে আপনাকে কী বলা উচিত সে সম্পর্কে সঠিকভাবে পুনরাবৃত্তি করা প্রতিক্রিয়া। যদি আপনার পিটিউটের ফলে কোনও নতুন অবজেক্ট 201 আসে (PUT এর অভিপ্রায় অনুসারে), যদি এটি কোনও অবজেক্ট 204 আপডেট করে।

ঘটনাচক্রে, 200 এর পরিবর্তে, এপিআই একদিকে রাখুন, যদি আপনি 204 ব্যবহার করে কিছু না ফেরান।

ধরে নিই যে আপনি আরইএসটিফুল ইন্টারফেসের একটি সেট বিকাশ করছেন, প্রতি সেবার কোনও মান নেই, তাই আপনি যা-ই করুন না কেন, এটি ভালভাবে নথি করুন, উদাহরণ সরবরাহ করুন এবং সবকিছু ঠিকঠাক হবে।


2
পোস্টের মাধ্যমে, আপনি সম্ভবত এমন কোনও রিসোর্স আইডেন্টিফায়ারের সাথে প্রতিক্রিয়া জানাতে চাইবেন যা এটি আরও চালিত করতে ব্যবহৃত হতে পারে। POST /resource-> { "self" : "/resource/5" }
হে

1
@ হেই আমি তার জন্য locationএইচটিপি হেডার ব্যবহার করব।
কোডসইনচওস

@ কোডস ইনচাওস হ্যাঁ, এটি পুরোপুরি বৈধ, যদিও আমি বাস্তবে কখনও এটি বাস্তবে সেভাবে দেখিনি এবং সম্ভবত এটি গ্রাহক হিসাবে পছন্দ করবেন না।
ওহে

1
ব্যবহারের কেসটি হ'ল ক্লায়েন্টটি বৈধ জেএসওনের প্রত্যাশা করছে, এমনকি প্রতিক্রিয়াটি "খালি" বা কোনও সামগ্রী না থাকলেও। নীচে অভি দ্বারা বর্ণিত একটি ভাল উদাহরণ জ্যাকুয়েরি।
বি সেভেন

12

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

একটি উন্মুক্ত JSON এপিআই মান রয়েছে যা উল্লেখ করে:

  • একটি JSON অবজেক্ট প্রতিটি জেএসএন এপিআই প্রতিক্রিয়া নথির মূলে থাকতে হবে । (তির্যকটি টেক্সটটি স্পষ্ট করার জন্য আমি যা যুক্ত করেছি তা উপস্থাপন করে)

দুর্ভাগ্যক্রমে, মানটি খালি নথিটি কীভাবে উপস্থাপন করতে হবে তা নির্দিষ্ট করে না এবং এটি কাজ চলছে। সর্বোপরি আমি এটি গাইডলাইন হিসাবে ব্যবহার করব।

কিছু অ্যাপ্লিকেশন (যেমন ইলাস্টিকসন্ধান ) একটি সম্পূর্ণ JSON এপিআই সরবরাহ করে এবং সর্বদা কিছু মেটাডেটা থাকে যাতে আপনার সার্ভারটি কীভাবে আপনার ডেটা পরিচালনা করছে সে সম্পর্কে আরও ভাল ধারণা পেতে পারেন। স্ট্যান্ডার্ড প্রতিক্রিয়া অবজেক্টটি আপনাকে সূচকের স্বাস্থ্য সম্পর্কে বলেছে, যদি অনুরোধের ফলে কোনও ত্রুটির সৃষ্টি হয়, কতটি নোড প্রভাবিত হয়েছিল, ইত্যাদি। ইলাস্টিক অনুসন্ধান মাইম-টাইপের জন্য "অ্যাপ্লিকেশন / জেসন" ব্যবহার করে তাই সম্ভবত তারা নির্দেশিকাগুলি প্রয়োগ করছে না jsonapi.org স্ট্যান্ডার্ড।

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


1
এই. আমি যখন কোনও জাসন এপিআই সার্ভারে একটি অনুরোধ প্রেরণ করি তখন আমি প্রথমে যা করি তা চেক করা হয় প্রতিক্রিয়াটি বৈধ JSON কিনা is যদি এটি বৈধ না হয়, তবে আমি ধরে নিচ্ছি অনুরোধটি 200 টি প্রতিক্রিয়া পেলেও ব্যর্থ হয়েছে। একটি ফাঁকা প্রতিক্রিয়া / স্ট্রিং বৈধ JSON নয়।
অভি বেকার্ট

5

কোন উদাহরণস্বরূপ, 204 প্রতিক্রিয়া জন্য আমরা বার্তার মূল অন্তর্ভুক্ত না। {সাফল্য | স্থিতি | is সফল: সত্য} অপ্রয়োজনীয়।

অনুশীলনে (বা আমি jquery পরবর্তী সংস্করণে বলতে হবে), অ্যাপ্লিকেশন / json বিষয়বস্তুর জন্য খালি প্রতিক্রিয়া ত্রুটি উত্থাপন করে। আমি যুক্তিটি বুঝতে পারি যে এটি প্রয়োগ / জসন কারণ এটির একটি বৈধ জেসন বডি থাকতে হবে। সুতরাং, অ্যাপ্লিকেশন / জসন সামগ্রীর প্রকারের খালি প্রতিক্রিয়া হ'ল নাল 'বা' {} 'যা বৈধ জেএসন।

Jquery জন্য কাজ করা উচিত অন্য উপায় আছে, খালি প্রতিক্রিয়া জন্য আবেদন / json ফিরে না। কেবল পাঠ্য / সরল বা কিছু ব্যবহার করুন এবং নিশ্চিত হন যে ক্লায়েন্টরা সেই ধরণের পরিচালনা করতে পারে।

দ্রষ্টব্য বার্তাটির মূল অংশটি স্পষ্টভাবে নিষিদ্ধ করার জন্য আমি কেবল 204 টি মনে করতে পারি। আমরা যা পেয়েছি তা হ'ল আমরা সবসময় ২০৪ টি ব্যবহার করতে পারি না The সমস্যাটি এমএসআইই ড্রপ রেসপন্স শিরোনাম ২০৪ টি প্রতিক্রিয়ার জন্য, সুতরাং কোনও সামগ্রী এবং শিরোনাম নেই যা খারাপ। যেহেতু অনেকে এমএসআইই ব্যবহার করছে তাই আমাদের এটি 200 স্ট্যাটাসে পরিবর্তন করতে হয়েছিল।


3

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


3

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

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

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

মোছার জন্য অনুরোধগুলি 204 ফিরিয়ে দেয় এবং খালি শরীরটি বেশ সাধারণ, যা পরে বোঝা যায় যে সংস্থানটি পরে নেই।


2

আমি কেবল যা প্রয়োজন তা ফিরিয়ে দেওয়ার পরামর্শ দিচ্ছি + একটু স্পষ্টতা।

উদাহরণস্বরূপ, আপনার এপিআই কীভাবে ব্যবহার করা হবে তার উপর নির্ভর করে আপনি সেই অবজেক্টের একটি অনুলিপি অন্তর্ভুক্ত করতে পারেন, যেমন সংরক্ষণ করার পরে বিদ্যমান।

সুতরাং {কী: 123 of এর একটি পোস্ট return কী: 123, foo: 'বার'} এ ফিরে আসতে পারে}

মূল ধারণাটি হ'ল বস্তুটি ফেরত দেওয়া ভাল তবে তার জন্য আবার জিজ্ঞাসা করা উচিত।

এটি বলেছিল, আপনার এপিআই গ্রাহকদের মধ্যে বস্তুর দরকার নেই এটি ফেরত দেওয়ার দরকার নেই।

আমি সাধারণত ফিরে আসি {সাফল্য: সত্য} বা এরকম কিছু, যখন পোস্ট পুট এবং প্যাচ-তে কোনও বস্তুর প্রয়োজন হয় না কারণ এটি প্রাপ্তির শেষের জন্য সহজ করে তোলে। এটি বলেছে যে, অবজেক্টের সংরক্ষিত উপস্থাপনা ফিরিয়ে দেওয়ার জন্য এটি সময়ের 99% ভাল, এটি বিরল যে তাদের কোনওভাবেই এটির প্রয়োজন হবে না, এবং দু'বারের মধ্যে একটি অনুরোধে সমস্ত পাঠানো "সস্তা"।

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

200 {সাফল্য ফিরিয়ে দেওয়া: সত্য people লোককে উভয় উপায়ে কোড লিখতে দেয়:

if response.code == 200
  do stuff
end

এবং

if response.body.success
  do stuff
end

উপরন্তু এটি আপনার পক্ষে করা খুব কঠিন নয়।

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


"কেবলমাত্র প্রয়োজনীয় (এবং আরও নয়)
আনুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.