কোনও জেএসএন এপিআই থেকে এইচটিএমএল ফিরিয়ে দেওয়া কি ঠিক আছে?


25

আমার বর্তমান প্রকল্পে আমি এমন একটি পরিষেবা বাস্তবায়নের জন্য দায়বদ্ধ যার মধ্যে সদ্য নির্মিত RESTful API গুলি খরচ জড়িত, সম্পূর্ণরূপে JSON সমর্থন করে ডকুমেন্টেড।

ক্লায়েন্ট ধারাবাহিকভাবে 'অ্যাপ্লিকেশন / জেসন' এর গ্রহণযোগ্য শিরোনাম এবং 'অ্যাপ্লিকেশন / জেসন' এর বিষয়বস্তু ধরণের অনুরোধ করে। তবে কিছু শেষবিন্দু একটি কনটেন্ট-টাইপ HTML, এমনকি একটি এইচটিএমএল বডি সহ প্রতিক্রিয়া প্রেরণ করে send আমার কাছে এটি স্পষ্টতই ভুল পদ্ধতির এবং কখনই ন্যায়সঙ্গত হতে পারে না।

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

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

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


1
প্রসঙ্গ-প্রকারের দ্বারা আপনি কি কনটেন্ট-টাইপ HTTP শিরোনাম বোঝাতে চান?
মার্জন ভেনেমা

হ্যাঁ আমি এইচটিটিপি কনটেন্ট-টাইপ শিরোনামটি উল্লেখ করছি। সম্পাদনা করা হয়েছে।
ফিলিপ.দারলি

ওয়েল, কমপক্ষে তাদের অবশ্যই এটি "জেএসএন REST এপিআই" না বলা উচিত যখন এটি একটি HTML আরএসপি এপিআই হয়।
বেরগি

উত্তর:


28

আপনি যখন acceptএকটি নির্দিষ্ট মিডিয়া টাইপের অনুরোধ করে শিরোনাম পাঠাচ্ছেন , সার্ভারটি অন্য কোনও কিছু ফেরত পাঠাতে হবে না এবং অবশ্যই 200 ওকে স্থিতি কোড সহ নয় not

রেস্টপ্যাটার্নস.আর্গ থেকে :

যদি কোনও গ্রহণের শিরোনাম ক্ষেত্র উপস্থিত না থাকে তবে ধরে নেওয়া হয় যে ক্লায়েন্ট সমস্ত মিডিয়া প্রকার গ্রহণ করে। যদি কোনও গ্রহণযোগ্য শিরোনাম ক্ষেত্র উপস্থিত থাকে এবং সার্ভার যদি সম্মিলিত স্বীকৃতি ক্ষেত্রের মান অনুযায়ী গ্রহণযোগ্য প্রতিক্রিয়া পাঠাতে না পারে তবে সার্ভারটি 406 (গ্রহণযোগ্য নয়) প্রতিক্রিয়া প্রেরণ করবে।

(জোর আমার)

রিস্টপেটেরনস.আর্গ.এটি প্রকৃত এইচটিটিপি স্ট্যান্ডার্ড থেকে গ্রহণ করে : শিরোনাম ক্ষেত্রের সংজ্ঞা - গ্রহণ করুন

সংক্ষেপে: আপনি পেডেন্টিক হচ্ছেন না। পরিষেবাগুলি HTTP স্ট্যান্ডার্ড অনুসরণ করছে না যদি তারা এইচটিএমএল ফেরত চলেছে যখন গ্রহণযোগ্য শিরোনাম নির্দিষ্টভাবে তাদের ফিরে আসতে বলে application/jsonএবং অন্য কিছুই না।


1
+1 টি। আমি এই উত্তরের সাথে একমত, তবে দুঃখের সাথে এই শব্দটি shouldএইচটিটিপি স্পেসিফিকেশনে বারবার ব্যবহৃত হয়। এই শব্দগুলি পরিবর্তিত করতে আমাদের একটি অনলাইন আবেদন শুরু করতে হবে must
আয়তাকার

3
@ মারজানভেনেমা "" "সঠিক" হওয়া উচিত কারণ একই আরএফসি থেকে ধারা 10 তে একটি নোট রয়েছে: "এইচটিটিপি / 1.1 সার্ভারগুলিকে অনুরোধে প্রেরিত গ্রহণযোগ্য শিরোনাম অনুসারে গ্রহণযোগ্য নয় এমন প্রতিক্রিয়াগুলি ফেরত দেওয়ার অনুমতি দেওয়া হয়েছে। কিছু ক্ষেত্রে এটি এমনকি হতে পারে 406 প্রতিক্রিয়া প্রেরণে অগ্রাধিকার দিন।
imel96

1
যদি কোনও ক্লায়েন্ট এমন কোনও সংস্থার অনুরোধ করে যা সত্যই কোনও JSON প্রতিনিধিত্ব না করে, তবে তারা জেএসওএনকে যতটা চায় তা বিবেচনা না করে, তারা সম্ভবত অন্য কোনও কিছু পাওয়ার চেয়ে সম্ভবত আরও চূড়ান্ত; আপনার 406 পাওয়ার গ্যারান্টি নেই What's সর্বোপরি গুরুত্বপূর্ণটি হ'ল সার্ভারের দেওয়া প্রতিক্রিয়াটির সামগ্রীটির ধরনটি কী তা বর্ণনা করা উচিত।
ডোনাল ফেলো

6
@ ডোনালফেলো: না, আসলে কী তা তাদের জানানো ভাল হবে। সার্ভারটিকে উপযুক্ত মনে করা এমন কিছু ফেরত পাঠানো উচিত নয়, তবে 406 মান হিসাবে স্বীকৃত প্রতিক্রিয়া প্রেরণ করা উচিত। মনে রাখবেন যে যখন ক্লায়েন্ট বিশেষভাবে একটি মিডিয়া প্রকারের জন্য অনুরোধ করে এবং কোনও ফলব্যাক নির্দিষ্ট করে না তখন সম্ভবত অন্য কোনও মিডিয়া প্রক্রিয়াকরণের কোনও উপায় নেই।
মার্জন ভেনেমা

2
@ আইমেল ৯6: ইন্টারনেট যে কখনই কঠোর হয় নি ঠিক তা হ'ল বিভিন্ন ব্রাউজারগুলিকে সমর্থন করার চেষ্টা করার ফলে এবং সার্ভারগুলিকে এখন নন-বৈধ এইচটিএমএল এর সাথে পিছনে সামঞ্জস্য রাখতে বাধ্য করা হয়েছে কারণ সেখানে খুব বেশি কিছু আছে is (এবং দুর্ভাগ্যক্রমে এটি এখনও তৈরি হচ্ছে)।
মার্জন ভেনেমা

9

"RESTful JSON API" বলতে আপনার অর্থ কী - আমার মনে হয় এখানে প্রথম সমস্যাটি হ'ল আপনি ধারণাগুলি মিশ্রণ করছেন (অথবা সম্ভবত আপনার "সরবরাহকারী" এ আপনার এবং আপনার প্রযুক্তিগত অংশীদারদের মধ্যে কেউ আছেন)।

একটি রিস্টালফুল এপিআই (আপনি কি মাত্রাতিরিক্ত স্তরের স্তরের 1 তে বা স্তরের 3 বা তার উপরে সিএফ http://martinfowler.com/articles/richardsonMaturyModel.html সম্পর্কে কিছু কথা বলছেন না ) আপনি যেভাবে API এর সাথে যোগাযোগ করছেন সে সম্পর্কে নয় পাঠানো বা থেকে প্রাপ্ত সামগ্রীর ফর্ম্যাট। এটি প্রোটোকল বা পরিবহন প্রক্রিয়া সম্পর্কেও নয় ...

একইভাবে একটি জেএসএন এপিআই এমন একটি এপিআই যা ডেটা ফর্ম্যাট হিসাবে জেএসওএন ব্যবহারকে সমর্থন করে - এটি শান্ত বা নাও থাকতে পারে, এটি HTTP ব্যবহার করে প্রয়োগ করা যেতে পারে এবং নাও হতে পারে এবং (এবং এটিই মূল বিষয়) এটি জেএসএনকে সমর্থন করতে পারে বা নাও করতে পারে কেবলমাত্র.

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

মজার প্রশ্নটি তখন হয়ে যায় যদি আমার এপিআই, যা বিভিন্ন ধরণের সামগ্রী বিন্যাস সমর্থন করে, ক্লায়েন্টটি কোন ফর্ম্যাটের প্রত্যাশা করে তা বলা না করে তার ফর্ম্যাটটি কী ফিরে আসবে ...? এটি একটি ধর্মীয় যুক্তির দিকে ঝুঁকছে - তবে এইচটিএমএল সরবরাহকারীকে সহায়ক তথ্য অন্তর্ভুক্ত করার বিকল্প দেয় (যেমন "বিষয়বস্তু শিরোনাম গ্রহণ করতে সেট করুন")।

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


1
আমি আপনার উভয় পয়েন্ট নিয়েছি এবং সেই অনুসারে আমার প্রশ্নটি সম্পাদনা করেছি। পরিষেবাটি বিশ্রামের বিষয়টি প্রাসঙ্গিক নয় এবং আমি বিস্তারিতভাবে জানিয়েছি যে ক্লায়েন্ট প্রতিটি অনুরোধে 'আবেদন / জেসন' গ্রহণ করে।
ফিলিপ.দারলি

আমি বলব যে "RESTful JSON API" এর খুব সুস্পষ্ট অর্থ রয়েছে।
gnasher729

1
আমি বলব যে আমার শিক্ষকরা "প্রোগ্রামটি কখনই ধরে নিবেন না" একটি ভাল প্রোগ্রামার হওয়ার মূল অঙ্গ কেন তা আমরা বুঝতে পেরেছিলাম তা নিশ্চিত করার জন্য প্রচুর প্রচেষ্টা করেছিলেন
মার্ফ ২

5

ক্লায়েন্ট ধারাবাহিকভাবে 'অ্যাপ্লিকেশন / জেসন' এর গ্রহণযোগ্য শিরোনাম এবং 'অ্যাপ্লিকেশন / জেসন' এর বিষয়বস্তু ধরণের অনুরোধ করে

হ্যাঁ, এটি করা সঠিক জিনিস, তবে এটির অর্থ বিক্রেতার যত্ন নেই। যদিও আমি আপনার হতাশাকে পুরোপুরি বুঝতে পেরেছি, কারণ আমি এটিও মনে করি যে একটি JSON পরিষেবা সর্বদা একটি JSON প্রতিক্রিয়া দেওয়া উচিত তবে এমন অনেকগুলি উদাহরণ রয়েছে যেখানে এটি ঘটেনি।

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

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

প্রশ্ন আমি কি কিছু মিস করছি?

অনুরোধ শিরোনামের অর্থ অন্য প্রান্তে সঠিকভাবে বাধা না দেওয়া থাকলে কিছুই বোঝায় না। আমি জানি যে আমি যদি পিএইচপি ব্যবহার করে একটি ওয়েব এপিআই বিকাশ করি, তবে অনুরোধ শিরোনাম সহ নরকে যেতে হবে। আমি যা চাই তা দিয়ে সাড়া দিতে পারি। অন্যদিকে, আই # তে সি # দিয়ে কনফিগার করা একটি পরিষেবা অনুরোধ শিরোনামগুলি, তাদের ধরণ এবং প্রতিক্রিয়া ধরণের হ্যান্ডলিংয়ের পক্ষে অনেক সহজ পরিচালনা করে। এপিআই তৈরিতে বিক্রেতাকে যে সরঞ্জামগুলি ব্যবহার করা হয়েছিল সেগুলির সাথে এটির অনেক কিছুই রয়েছে।

আমি কি এই সম্পর্কে পেডেন্টিক হই?

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

এটি একটি সমস্যা কারণ বিক্রেতার আপনার কাজগুলি শেষ করতে "আরও কাজ" তৈরি করেছে। যে কেউ হতাশ হতে হবে। আমি জানি আমি হব।

এই দৃশ্যে কোনও JSON এপিআই থাকা কোনও সামগ্রী-ধরণের অ্যাপ্লিকেশন / জেএসন না থাকা কি ঠিক আছে?

অবশ্যই, তবে এটি একটি ভাল অনুশীলন নয়।

কোনও ক্লায়েন্ট কেবলমাত্র সার্ভারকে বলতে পারে যে এর প্রসঙ্গের ধরণ requestকী। এটির জন্য কোনও সামগ্রী-প্রকার প্রয়োগ করার ক্ষমতা নেই response। ক্লায়েন্ট কেবলমাত্র সার্ভারকে অবহিত করতে পারে যে এটি acceptসম্ভাব্য সামগ্রী-ধরণের সংগ্রহ করবে ।

শিরোনাম ক্ষেত্র সংজ্ঞা

অনুরোধ-শিরোনাম গ্রহণের ক্ষেত্রটি নির্দিষ্ট মিডিয়া প্রকারগুলি নির্দিষ্ট করতে ব্যবহার করা যেতে পারে যা প্রতিক্রিয়ার জন্য গ্রহণযোগ্য। স্বীকৃতি শিরোনামগুলি ইন-লাইন চিত্রের জন্য অনুরোধের ক্ষেত্রে অনুরোধটি নির্দিষ্ট করে কাঙ্ক্ষিত ধরণের ছোট্ট সংখ্যায় সীমাবদ্ধ তা নির্দেশ করতে ব্যবহার করা যেতে পারে।

কোনও ক্লায়েন্টের পক্ষে কোনও চিত্রের জন্য অনুরোধ করা সম্ভব image/jpeg, তবে সার্ভারের প্রতিক্রিয়া text/htmlএবং 404চিত্রটি পাওয়া না গেলে তার একটি স্থিতি কোড । সার্ভারগুলিও ভুলভাবে প্রতিক্রিয়া জানাতে পারে। সেখানে অনেক ওয়ার্ডপ্রেস ওয়েবসাইট রয়েছে যা প্রতিক্রিয়া জানায় text/htmlএবং 200ফাইল খুঁজে পাওয়া যায় না এমন পৃষ্ঠাগুলির জন্য স্ট্যাটাস কোড ।

এখন এটি সার্ভারের অংশে সমস্ত বিএডি অনুশীলন। আমি আপনাকে যা বলতে চাইছি তা হ'ল এটি একেবারেই সম্ভব এবং এটি প্রায়শই ঘটে। লোকেরা যখন এই জিনিসগুলি কনফিগার করে তখন তারা কী করছে তা জানে না।

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

আমি কয়েকটি প্রকল্পে এই সমস্যাটি চালিয়েছি। আপনি postসার্ভারে JSON ডেটা এবং এটি একটি JSON বা এইচটিএমএল প্রতিক্রিয়া দেয়।

কোন ধরণের প্রতিক্রিয়া ছিল তা জানা সত্যিই বড় কথা নয়। যদি প্রথম চরিত্রটি হয় {বা [আপনি JSON ধরে নিতে পারেন। যদি এটি হয় তবে <আপনি এইচটিএমএল ধরে নিতে পারেন। অতীতে আমি কীভাবে এটি পরিচালনা করেছি। কখনও কখনও প্রোগ্রামার যিনি এপিআই লিখেছেন তারা জ্যাক জানে এইচটিটিপি শিরোনাম সম্পর্কে। text/htmlপ্রতিক্রিয়া হিসাবে সবকিছু ফিরে আসে । আপনি ভাগ্যবান হলে তাদের অ্যাপাচি ডিফল্ট রূপে কনফিগার করা থাকে text/plainযা কখনও কখনও সহায়তা করতে পারে।

এই সমস্যাগুলি বিদ্যমান এবং ভবিষ্যতে বহাল থাকবে। সার্ভার থেকে সার্ভার যোগাযোগ এখন পর্যন্ত একটি নিয়ন্ত্রিত কার্যকলাপ। এমন কোনও পরিচালনা কমিটি নেই যা কোনও সার্ভারের জন্য কোনও ইউনিয়ন থেকে একজন বিক্রেতাকে কুপিয়ে দেবে যা খারাপ HTTP প্রতিক্রিয়া দেয়।


এটি @ মারজান ভেনিমার উত্তরের সাথে অন্তর্নিহিত তবে আপনি উত্থাপিত আরও একটি মূল বিষয় হ'ল এই আচরণের দলিল। আমার হতাশা যোগ করার জন্য বিক্রেতা এই আচরণটির নথিভুক্ত করেনি। বিষয়বস্তুর ধরণটি অধিবেশন রাজ্যের উপর নির্ভর করে পরিবর্তিত হয়, তবুও কেবল JSON প্রতিক্রিয়া নথিবদ্ধ।
ফিলিপ.দারলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.