RESTful এপিআই-এ ট্রেলিং স্ল্যাশ


60

একটি রেস্টস্টুল এপিআইতে ট্রেলিং স্ল্যাশ দিয়ে কী করব তা নিয়ে আমার বিতর্ক হচ্ছে।

আসুন বলি আমার কাছে কুকুর নামে একটি সংস্থান আছে এবং স্বতন্ত্র কুকুরের অধীনস্থ সম্পদ রয়েছে। সুতরাং আমরা নিম্নলিখিতটি করতে পারি:

GET/PUT/POST/DELETE http://example.com/dogs
GET/PUT/POST/DELETE http://example.com/dogs/{id}

তবে নিম্নলিখিত বিশেষ ক্ষেত্রে আমরা কী করব:

GET/PUT/POST/DELETE http://example.com/dogs/

আমার ব্যক্তিগত দৃষ্টিভঙ্গি হ'ল এটি বলছে যে আইডি = দিয়ে স্বতন্ত্র কুকুর সংস্থানতে একটি অনুরোধ প্রেরণ করুন null। আমি মনে করি এই ক্ষেত্রে API এর 404 ফেরত দেওয়া উচিত।

অন্যরা বলছেন যে অনুরোধটি কুকুরের সংস্থান অ্যাক্সেস করছে অর্থাত্ পিছনের স্ল্যাশ উপেক্ষা করা হবে।

কেউ কি চূড়ান্ত উত্তর জানেন?


2
আমি ভেবেছিলাম বিশ্রামের উপায়টি ছিল কুকুর / আইডি এবং কুকুরের মধ্যে পার্থক্য (যার অর্থ সমস্ত কুকুর)।
পিডিআর

রিস্টফুল ওয়েব সার্ভিস - অধস্তন সংস্থানসমূহ থেকে ।
গাজ_এডজ

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

আমি অনুসরণ করি না - কে বলেছে আপনি কুকুর মুছতে পারবেন না? আপনি কুকুর মুছলে তা নিজে এবং সমস্ত কুকুর মুছে ফেলে। এ কারণেই আমি মনে করি কুকুরগুলিকে কল করার অনুমতি দেওয়া / ঝুঁকিপূর্ণ। ক্লায়েন্ট যদি কোনও পৃথক কুকুর মুছতে চায় তবে কী ঘটেছে তা ঘটনাক্রমে {আইডি} ছেড়ে গেছে} ফলাফলটি হবে যে সমস্ত কুকুর মুছে ফেলা হবে। এটি নিরাপদে {আইডি} নাল চেয়েছে বলে ধরে নেওয়া আরও নিরাপদ এবং 404
ফেরৎ

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

উত্তর:


50

এগুলির কোনওটিই অনুমোদনযোগ্য নয় (যেমন REST এর কোনও সঠিক অর্থ নেই)। তবে আরআরএসটি-র মূল কাগজ থেকে একটি পূর্ণ (শেষ না হওয়া / /) ইউআরএল একটি সংস্থার নাম দেয়, যখন স্ল্যাশ '/' এ শেষ হওয়া একটি সংস্থান গ্রুপ (সম্ভবত এর মতো শব্দ হয় না)।

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

GET http://example.com/dogs/          /* List all the dogs resources */

একটি স্ল্যাশযুক্ত ইউআরএল এর একটি পুট সমস্ত সংস্থানগুলি প্রতিস্থাপন করার কথা।

PUT http://example.com/dogs/          /* Replace all the dogs resources */

একটি স্ল্যাশযুক্ত URL এ একটি মোছা সমস্ত সংস্থান মুছে ফেলার কথা

DELETE http://example.com/dogs/       /* Deletes all the dogs resources */

একটি স্ল্যাশযুক্ত URL এ একটি পোস্টে একটি নতুন সংস্থান তৈরি করার কথা রয়েছে পরে তারপরে অ্যাক্সেস করা যায়। সামঞ্জস্যপূর্ণ হওয়ার জন্য নতুন সংস্থানটি এই ডিরেক্টরিতে থাকা উচিত (যদিও প্রচুর RESTful আর্কিটেকচার এখানে প্রতারণা করে)।

POST http://example.com/dogs/        /* Creates a new dogs resource (notice singular) */

প্রভৃতি

বিষয়টির উইকির পৃষ্ঠাটি এটি ভালভাবে ব্যাখ্যা করেছে বলে মনে হচ্ছে:

উদাহরণ দেখুন https://en.wikedia.org/wiki/RepLiveational_state_transfer# প্রয়োগকৃত_ টো_ ওয়েব_সার্ভিসেস


এটি সাধারণ পাথ / ইউআরএল মডেলের সাথেও খাপ /
খায়

4
সুতরাং আপনি যদি কোনও ট্রেইলিং ছাড়াই কোনও সংস্থান গোষ্ঠীতে অ্যাক্সেস করেন তবে কি হবে /?
ওবরিলিস

1
@ উবারলিজ: এটি প্রসঙ্গে নির্ভর করে। এখানে কোনও কঠোর এবং দ্রুত নিয়ম নেই কেবল সেরা অনুশীলন। নিয়মের সর্বদা ব্যয় হয় এবং এর অর্থ হওয়া উচিত যা আপনি এটির অর্থ প্রত্যাশা করছেন। উপরের উদাহরণে: GET http://example.com/dogsকুকুর সম্পর্কে মেটা তথ্য ফিরিয়ে দিতে পারে (তালিকাগুলি নিজেই নয় কুকুরের তালিকা সম্পর্কে মেটা তথ্য)। হয়তো বা হতে পারে এটি একটি ত্রুটি।
মার্টিন ইয়র্ক

1
As the last character within a URI’s path, a forward slash (/) adds no semantic value and may cause confusion. It’s better to drop them completely.এটি কেবলমাত্র জায়গা নয় যা প্রশিক্ষণের স্ল্যাশ ব্যবহার না করার পরামর্শ দেয়
লাইভ

@ লাইভ আমি এই অনুভূতির সাথে একমত নই। তবে দয়া করে আরও প্রমাণীকরণের রেফারেন্সটি লিঙ্ক করুন (এটি একটি দুর্বল লিঙ্ক)।
মার্টিন ইয়র্ক

17
Does anyone know the definitive answer?

কোনও পরিষেবাকে বিশ্রামের বিবেচনা করার জন্য প্রয়োজনীয় কিছুর বিষয়ে কোনও অফিসিয়াল ডকুমেন্ট নেই বলে একটি নেই।

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


উদাহরণস্বরূপ ডলগুলি মোছার বিষয়ে কী ?
বেনিয়ামিন গ্রুইনবাউম

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

@ গাজ_এডজ: আরইএসটি-তে example.com/dogsএকটি সংস্থান যা কোনও সংস্থান থেকে সম্পূর্ণ স্বাধীন example.com/dogs/X। সুতরাং এটি মুছে example.com/dogsফেলতে সমস্ত কুকুর / * মুছে ফেলতে হবে না (যদিও এটি যদি শব্দার্থক হয় তবে)। তবে মুছে example.com/dogs/ফেলা উচিত সমস্ত কুকুর / * মুছে ফেলা।
মার্টিন ইয়র্ক

3
আমি আবারও বলব যে যেহেতু আপনি / কুকুর বা / কুকুর / আপনার কুকুর / কুকুরকে অপসারণ করেন তখন কী ঘটে যায় তার বিষয়ে নির্দিষ্ট কোন নিয়ম নেই তবে আপনি আপনার এপিআই এর গ্রাহকদের কী আশা করবেন তার উপর ভিত্তি করে তৈরি হবে। সম্ভবত এটি সম্ভবত একক অনুরোধে সমস্ত কুকুর মুছতে চান? যদি তাই হয় তবে এটি এর মতো বাস্তবায়ন করুন, যদি না হয় তবে 405 পদ্ধতিটি অনুমোদিত নয় প্রতিক্রিয়া দিন।
মাইক

1
আমি জানি এটি একটি পুরানো থ্রেড, তবে আমি সম্প্রতি এটি সম্পর্কে নিজেকে ভাবছি। জন্য কি মূল্য আছে, OS X এর ব্যাশ শেল একইরূপে foo, foo/এবং foo////অভিন্নরুপে। এটি মূলত খালি পাথ খণ্ডগুলি ছাঁটাই করে মনে হচ্ছে। সুতরাং, আপনি বিশ্রাম সেবা সঙ্গে একই পদ্ধতির অনুসরণ যদি dogsএবং dogs/একই জিনিস পড়ুন হবে।
গ্রেগ ব্রাউন

2

দুটি উপায়.

পদ্ধতি 1

শিশুদের থাকতে পারে এমন যে কোনও সংস্থার জন্য সর্বদা ট্রেলিং স্ল্যাশ ব্যবহার করুন।

ফাইলগুলি সহ একটি পাবলিক_এইচটিএমএল ডিরেক্টরিতে কেবল "জিইটি" বিবেচনা করুন।

যখন হ্যালো এইচটিএমএল কোনও ফাইল হয় তখন সম্ভব হয় না:

/hello.html
/hello.html/youagain.html

তবে সম্ভব যখন হ্যালো এইচটিএমএল একটি ডিরেক্টরি:

/hello.html/     (actually /hello.html/index.html)
/hello.html/youagain.html

সুতরাং "হ্যালো এইচটিএমএল" যদি কখনও বাচ্চা রাখতে পারে তবে তা সর্বদা এবং চিরকাল "/hello.html/" এবং "/hello.html/index.html" (অথবা কেবল /hello.html/) এই শিশুদের একটি তালিকা ।

পদ্ধতি 2

স্মার্ট হও".

$ find
.
./hello.html
./hello.html/index.html

ফাইন্ড কমান্ড হ্যালো এইচটিএমএল ধরণের বিষয়ে চিন্তা করে না। ডিরেক্টরি বা ফাইল, কে যত্নশীল, এটি কোনও বস্তুর নাম। যখন আমরা "সিপি youagain.html হেলো html" লিখি, সিপি হ্যালো। Html কীভাবে পরিচালনা করতে পারে তা নির্ধারণ করতে পারে। সিপি স্মার্ট। আপনার ওয়েবসারভারটিও স্মার্ট। এটিতে একটি পাথ হ্যান্ডলিং গ্রন্থাগার রয়েছে। এটির রাউটিং রয়েছে। এটি স্থির করতে পারে এবং আপনাকে বলতে পারে যে নাম কোনও বস্তু বা ডিরেক্টরি। এটি ব্লাহকে ব্লাহে পুনঃনির্দেশ করতে পারে / বা এমনকি উভয়ের জন্য একই প্রতিক্রিয়া সরবরাহ করতে পারে। এই দুর্দান্ত! উপায়। এত প্রযুক্তি। আমরা যখন সমস্ত কিছু করতে পারি তখন কে কখনই কেবল স্ট্রিং স্ট্রিংগুলি যুক্ত করতে চায় ???

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