REST সংস্থানগুলি একক এবং বহুবচন হওয়ার পক্ষে কি যুক্তিসঙ্গত?


10

আমি ভাবছিলাম যে এর চেয়ে আরও বেশি traditionalতিহ্যবাহী বিন্যাসের চেয়ে:

api/Products
GET // gets product(s) by id
PUT // updates product(s) by id
DELETE // deletes (product(s) by id
POST // creates product(s)

একটি একবচন এবং বহুবচনের জন্য এটি কী আরও কার্যকর হবে, উদাহরণস্বরূপ:

api/Product
GET // gets a product by id
PUT // updates a product by id
DELETE // deletes a product by id
POST // creates a product

api/Products
GET // gets a collection of products by id
PUT // updates a collection of products by id
DELETE // deletes a collection of products (not the products themselves)
POST // creates a collection of products based on filter parameters passed

সুতরাং, আপনি যে পণ্যগুলি করতে পারেন তার সংগ্রহ তৈরি করতে:

POST api/Products {data: filters} // returns api/Products/<id>

এবং তারপরে, এটি উল্লেখ করতে, আপনি এটি করতে পারেন:

GET api/Products/<id> // returns array of products

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

উত্তর:


6

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

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


আমি যখন আপনার অনুভূতির সাথে একমত হয়েছি, ধরে নিই যে আমরা উপরের উদাহরণটি ব্যবহার করেছি, প্রদত্ত যে পোষ্ট এপিআই / পণ্যগুলি নতুন পণ্য তৈরির জন্য ডেটা নয় সংগ্রহের ফিল্টার প্যারামিটারগুলি পাস করার জন্য ব্যবহৃত হবে, কোনও নতুন পণ্য তৈরির যুক্তিসঙ্গত উপায় কী হবে? এপিআই / পণ্য ছাড়া?
ইভা

@ ইভান কেন এপিআই / পণ্যগুলিতে একাধিক (বা একটির সংকলন) পণ্য সন্নিবেশ করতে পারে না? এটাই আমার কাছে সবচেয়ে যুক্তিযুক্ত মনে হয়। ফিল্টার তৈরির জন্য সম্ভবত পণ্য / ফিল্টার পোস্ট করুন, বা সেগুলি পুনরুদ্ধার করার জন্য এবং ক্রিয়েটিভ টাস্ক না হয়ে থাকলে পান।
জিমি হোফা

জিমি ব্যাখ্যার জন্য ধন্যবাদ। আমি এটি এটিকে দেখতে না পাবার কারণটি ছিল আমি উপরোক্ত উদাহরণস্বরূপ, সংগ্রহটি নিজের এবং নিজেই একটি চিহ্নিত উত্স হিসাবে বিবেচনা করছিলাম। ব্যাকএন্ডে, এপিআই / পণ্য "পণ্য" এবং এপিআই / পণ্যগুলি এইভাবে "পণ্য সংগ্রহ" হতে পারে। যাইহোক, কিছু বিবেচনা করার পরে, আমি মনে করি যে আপনার পরামর্শ অনুসারে, API থেকে সমস্ত দূরে থাকাই ভাল হবে ... এখন আসল প্রশ্নটি, আপনি কি থাইল্যান্ডের পথে সেই ট্রাকস্টপ থেকে দূরে সরে গিয়েছিলেন বা চলে গেছেন? গাড়ির বুটে?
ইভা

@ ইভান আমি আপনাকে দুটি ইঙ্গিত দেব: সিগলস।
জিমি হোফা

1

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

আপনি যদি এটি হ্রাস করতে চান তবে আপনি নিজের রেস্ট সার্ভিসের জন্য এসডিকে নিজেই তৈরি করতে পারেন। অথবা, আপনি কেবল মতামত জানাতে পারেন এবং অভিযোগের সাথে মোকাবিলা করতে পারেন :)

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