REST - শিরোনাম বনাম এক্সটেনশনগুলির মাধ্যমে বিষয়বস্তু আলোচনার মধ্যে ট্রেড অফস


40

আমি একটি RESTful API ডিজাইনের মাধ্যমে কাজ করছি। আমরা জানি যে কোনও প্রদত্ত সংস্থার জন্য আমরা JSON এবং XML ফিরিয়ে দিতে চাই। আমি ভাবছিলাম আমরা এই জাতীয় কিছু করব:

GET /api/something?param1=value1
Accept:  application/xml (or application/json)

তবে, কেউ এর জন্য এক্সটেনশানগুলি ব্যবহার করে টস আউট করেছেন:

GET /api/something.xml?parm1=value1 (or /api/something.json?param1=value1)

এই পদ্ধতির সাথে ট্রেড অফগুলি কী কী? কোনও এক্সটেনশান নির্দিষ্ট না করা থাকলে গ্রহণের শিরোনামের উপর নির্ভর করা ভাল, তবে নির্দিষ্ট করা হলে সম্মানের এক্সটেনশান? এই পদ্ধতির কোনও ত্রুটি আছে কি?


আপনি কোন ওয়েবসারভার ব্যবহার করছেন? এবং এটি কীভাবে URL গুলি বিশ্লেষণ করে?
দিপান মেহতা

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

@ দিপান আমি এমভিসি 4 ওয়েব এপিআই (এখনও বিটাতে) দিয়ে এই হ্যাক করছি। এটি এএসপি.এনইটি-র রুটিং বিমূর্ত ব্যবহার করে, যা বেশ সুন্দর।
ব্র্যান্ডন লিন্টন

1
@ ট্র্যাব হ্যাঁ আমি গ্রহণের শিরোনাম মানটি ব্যবহার করার আরও অনেক বেশি অনুরাগী। আমি ভাবছি উভয়কে সমর্থন করার ক্ষেত্রে কোনও ত্রুটি আছে কিনা।
ব্র্যান্ডন লিন্টন

উত্তর:


38

এটি, "তবে, দার্শনিকভাবে - প্রথম পদ্ধতির একমাত্র পন্থা" "এবং এটি" যথাযথ অফিসিয়াল রেস্টস্টুল অ্যাপ্রোচটি হ'ল গ্রহণ: শিরোনাম ব্যবহার করা use " কেসটি হিসাবে ব্যাপকভাবে উপলব্ধি করা হয় তবে এটি একেবারে ভুল

এখানে রয় ফিল্ডিংয়ের একটি সংক্ষিপ্ত স্নিপেট (যিনি REST সংজ্ঞায়িত করেছেন) ...

"বিভাগ 6.2.1 বলছে না যে সামগ্রীর আলোচনার সময় সর্বদা ব্যবহার করা উচিত" " উদ্ধৃত করা

এই নির্দিষ্ট কথোপকথনটি 'স্বীকৃতি-ভাষা:' শিরোনামের প্রসঙ্গে, তবে একই সাথে 'গ্রহণ করুন:' শিরোনামের ক্ষেত্রেও একইভাবে প্রযোজ্য, যা পরবর্তীকালে তার প্রতিক্রিয়ায় স্পষ্ট হয়েছে ...

"লোকেরা কেন শীর্ষ পৃষ্ঠায় দ্বিতীয় এবং তৃতীয় লিঙ্কটি দেখতে পাচ্ছেন না আমার কোনও ধারণা নেই

http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

যে দুটি পিডিএফ সংস্করণে পয়েন্ট। "

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

একই অনুরূপ আলোচনায়, এবার ক্যোয়ারী প্যারামিটার বনাম বিভিন্ন মিডিয়া প্রকারের জন্য ফাইল এক্সটেনশন ব্যবহারের গুণাবলী সম্পর্কিত ...

"এ কারণেই আমি সর্বদা এক্সটেনশানগুলিকে পছন্দ করি RE আরএসইস্টের সাথে কোনও পছন্দের কোনও সম্পর্ক নেই।" উদ্ধৃত করা

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

উত্তর - এটি আসলে খুব বেশি কিছু যায় আসে না। উভয়ের মধ্যে বাণিজ্য বন্ধগুলি খুব তাৎপর্যপূর্ণ নয় এবং উভয়ই গ্রহণযোগ্য শৈলী।


3
দুর্দান্ত ভারসাম্য উত্তর। আমি মনে করি যে আমি কখনও কখনও ইউআরআই থেকে এটি 'স্পষ্ট' যুক্ত করব যে কোনও নির্দিষ্ট সামগ্রীর উদ্দেশ্য। যেমন .html এক্সটেনশন বা ইউআরআইতে .pdf এক্সটেনশন। এবং এই ক্ষেত্রে বিষয়বস্তু আলোচনার সমর্থন করার দরকার নেই, এবং ইউআরআইতে অন্তর্ভুক্ত সামগ্রী থাকা মানুষের পক্ষে ইউআরআই ভাগ করে নেওয়া এবং এটি সঙ্গে সঙ্গে গ্রাস করতে পারে এমন উপায়ে লিঙ্ক যুক্ত করতে এটি সহজ করে তোলে। অন্যান্য ক্ষেত্রে যেমন আপনি আপনার ইউআরআইগুলিতে এক্সটেনশনগুলি এড়াতে চান এবং এবং বা আপনি এমন একটি ওয়েব এপিআই প্রকাশ করতে চান যা একাধিক সামগ্রীর ধরণের জসন / এক্সএমএলকে সমান সমর্থন করে, একটি গ্রহণযোগ্য শিরোনাম আরও ভাল ফিট করতে পারে।
টিম লাভল-স্মিথ

নতুন লিঙ্ক ধারণ করতে আপডেট উত্তর। আমি মনে করি ইয়াহু গ্রুপগুলি তাদের কাঠামোগুলি চারপাশে পরিবর্তন করেছে।
ফিল স্টারজন ২

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

10

সঠিক সরকারী RESTful পদ্ধতির Accept:শিরোনাম ব্যবহার করা ।

তবে, আপনাকে ক্যাশেযোগ্যতা না ভাঙতে সতর্ক থাকতে হবে, যা রেস্টের অন্যতম প্রয়োজনীয়তা। আপনার Vary: Acceptএটির এবং ক্যাশে থাকা দরকার যা এটি বোঝে। আদর্শ বিশ্বে আপনার কাছে এটি থাকতে পারে তবে বাস্তব জীবনে আপনার মাইলেজ আলাদা হতে পারে। সুতরাং দ্বিতীয় সমাধানটি তেমন পরিষ্কার নয়, তবে এটি আরও ব্যবহারিক হতে পারে।

এছাড়াও, লক্ষ্য করুন যে কিছু অতি পুরানো ব্রাউজারগুলি পরিবর্তে এক্সটেনশানের উপর নির্ভর করে শিরোনামগুলি উপেক্ষা করে।


1
আসলেই ভুল। গৃহীত উত্তর দেখুন।
ফিল স্টারজন ২

9

প্রযুক্তিগতভাবে এটি কোনও বিষয় নয় - আপনার ওয়েব সার্ভারটি যেমনটি দেখায় ঠিক তেমন প্রক্রিয়াটি পাস করতে সক্ষম হবে। (আমি এটি ধরে নিচ্ছি তবে শোস্টোপারের মতো দেখায় না)।

তবে, দার্শনিকভাবে - প্রথম পদ্ধতির একমাত্র পন্থা। REST এ, URL টি কেবলমাত্র একটি ইউআরআই-তে নির্দেশ করে - যা কেবলমাত্র একটি সংস্থান। এক মুহূর্তের জন্য এই মনে রিসোর্স হিসাবে একই বস্তুর অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং হবে। আপনি এই সংস্থানটির সাথে কেবল 4 টি পদ্ধতির মাধ্যমে কথা বলুন (ওরফে জিইটি / পোষ্ট / পুট / ডিলেট / বা যদি কিছু পরিবহণের অনুমতি দেয় তবে) তবে সেই পদ্ধতিটি অবজেক্টের বিবরণে পরিণত হয় না । একইভাবে, দিকগুলির দিকটি ইউআরআই নয়। অবজেক্টটি এখনও কিছু এবং না কিছু। Xml বা কিছু. json j

মনে করুন আপনি যদি গ্রহণযোগ্য শিরোনাম ব্যবহার করতে না চান তবে আপনি যদি এখনও দার্শনিকভাবে সত্যই বিশ্রাম পেতে চান তবে আমি এরকম কিছু মনে করবো না:

GET /api/something?parm1=value1&return_type=xml

উল্টোদিকে

GET /api/something.xml?parm1=value1 (or /api/something.json?param1=value1)

তবে আমি যেমন বলেছি, এই পার্থক্যটি কেবল দার্শনিক।


+1 দীপন, আপনি একটি জিনিস বাদ দিয়ে ঠিক বলেছেন: / এপিআই / কিছু? রিটার্ন_ টাইপ = এক্সএমএল এখনও বিশ্রামের নয় । এটি বিশ্রাম না পাওয়ার কারণটি হল ইউআরএলগুলি অস্বচ্ছ। IOW, একটি প্রোটোকল দৃষ্টিকোণ থেকে, / এপিআই / কিছু / এক্সএমএল এবং / এপিআই / কিছু? এক্সএমএল মধ্যে কোনও পার্থক্য নেই। W3.org/DesignIssues/Axioms.html দেখুন ।
মার্ক ই। হাজেস

0

@ ভার্টেক: আমি মনে করি আপনি ভুল বলেছেন

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

অতএব আমি অনুরোধ ও প্রতিক্রিয়া সম্পর্কে বিশদ জানার জন্য হেডার ব্যবহার এড়াতে এবং দৃ to় থাকার জন্য দৃ strongly়ভাবে পরামর্শ দিচ্ছি

 GET /api/something.xml?parm1=value1 (or /api/something.json?param1=value1)

আমি দ্রুত তথ্যসূত্রগুলি সন্ধান করতে সক্ষম নই, তবে আমি তাদের সাথে আবার পোস্ট করব (আসলে আপনি ওরিলিলির প্রকাশনা বই "RESTful ওয়েব পরিষেবাদি" উল্লেখ করতে পারেন ( http://shop.oreilly.com/product/9780596529260.do ) যা একই নিশ্চিত করে


17
-1 সম্পূর্ণ ভুল। একটা কারণ হল, URL টি হয় HTTP- র হেডার পাঠানো। তদতিরিক্ত, প্রতিটি স্বতন্ত্র ইউআরএল একটি পৃথক সংস্থান প্রতিনিধিত্ব করা উচিত। একই লিখিত সামগ্রীর এক্সএমএল এবং জেএসএন এনকোডিংগুলি 2 টি আলাদা সংস্থান নয়; এগুলি একই সংস্থানটির 2 টি আলাদা উপস্থাপনা।
মার্ক ই। হাজেস

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