একটি বিশ্রাম পরিষেবাতে অ সিআরইউডি অপারেশন


106

কোনও রেস্টস্টুল সার্ভিসে নন-সিআরইউডি অপারেশন যুক্ত করার "রেস্টস্টুল" উপায় কী? বলুন আমার কাছে এমন একটি পরিষেবা রয়েছে যা CRUD কে এই জাতীয় রেকর্ডে অ্যাক্সেসের অনুমতি দেয়:

GET /api/car/123           <- Returns information for the Car object with ID 123
POST /api/car              <- Creates a new car (with properties in the request)
PUT /api/car/123           <- Updates car 123 (with properties in the request)
DELETE /api/car/123        <- Deletes car 123    
POST /api/car/123/wheel/   <- Creates a wheel and associates it to car 123

আমি যদি গাড়ির রঙ পরিবর্তন করতে চাই তবে আমি POST /api/car/123নতুন রঙের জন্য সহজভাবে এবং একটি পোষ্ট ভেরিয়েবল অন্তর্ভুক্ত করব।

তবে আসুন আমি বলি যে আমি একটি গাড়ী কিনতে চাই, এবং এই অপারেশনটি কেবল কোনও "ব্যবহারকারী" রেকর্ডের "মালিকানাধীন গাড়ি" সম্পত্তি আপডেট করার চেয়ে জটিল। এটি কি কেবল এমন কিছু করা সহজ POST /api/car/123/purchase, যেখানে "ক্রয়" মূলত একটি পদ্ধতির নাম? বা আমার PURCHASEপরিবর্তে কি কাস্টম এইচটিটিপি ক্রিয়া ব্যবহার করা উচিত POST?

না-সিআরইউডি অপারেশনগুলি কি আরইএসইএসটির আওতার বাইরে?


5
আপনি যদি কোনও গাড়ীর রঙ পরিবর্তন করে থাকেন তবে PATCH /api/car/123কোনও রঙের পরামিতি বা PUT /api/car/123প্রেরণ করা বা পুরো গাড়ী অবজেক্টটি প্রেরণ করা ভাল। পোস্টটি অনুমান করবে যে আপনি একটি নতুন গাড়ি তৈরি করছেন এবং সম্ভবত ইউআরএল শেষে কখনও কোনও আইডি অন্তর্ভুক্ত করা উচিত নয়
রনিকনক্সভিলে

উত্তর:


65

RESTful অভিধানে কোনও ব্যবসায়িক সত্তা বা একটি সংস্থান হিসাবে ক্রয়ের কথা চিন্তা করুন । বলা হচ্ছে, ক্রয় করা আসলে একটি নতুন সংস্থান তৈরি করে। তাই:

POST /api/purchase

একটি নতুন অর্ডার দেবে। বিশদটি (ব্যবহারকারী, গাড়ি ইত্যাদি) এই ঠিকানায় প্রেরিত সামগ্রীর ভিতরে আইডি (বা ইউআরআই) দ্বারা উল্লেখ করা উচিত।

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

এমনকি এইচটিটিপি প্রোটোকল এমনকি আরও দূষিত করতে পারেন। Locationনতুন তৈরি অর্ডারে একটি লিঙ্ক ফেরত দিতে শিরোনাম ব্যবহার করুন , ব্যবহারকারীদের সমস্যার (সার্ভার- বা ক্লায়েন্ট-সাইড) ইত্যাদি সম্পর্কে অবহিত করতে সাবধানতার সাথে HTTP প্রতিক্রিয়া কোডগুলি চয়ন করুন etc.


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

23
"সংস্থান হিসাবে ক্রয়" নকশাটি ঝরঝরে দেখাচ্ছে। কি যদি উত্সটি "বিয়ার" হয় এবং আমি চাই যে সার্ভারটি এটি পান করুক .. (এটি আমার পক্ষে ছিল, আমি অবশ্যই এটি পেয়েছিলাম;)) .. কী আমাদের "পানীয় ক্রিয়া "টিকে একটি উত্স হিসাবে বিবেচনা করা উচিত? ?! .. বা "বিয়ার খাচ্ছেন", একটি কঠিন ব্যবসায়ের ব্যবস্থা ?! আরও গুরুত্বের সাথে, কর্মগুলিকে সম্পদ হিসাবে বিবেচনা করার বিষয়ে
বিশ্রামের নকশাটি কি?!

2
আপনি কীভাবে কোনও আরইএসটি পরিষেবার মাধ্যমে "ক্রয় আদেশ অনুমোদন" প্রকাশ করবেন? আমি মনে করি @ টমাসজ নুরকিউইজ সিআরইউডি উপায়ে পরিষ্কারভাবে করা যায় না এমন কোনও কিছুতে এসওএপি দ্বারা সরবরাহ করা অপারেশন-শব্দার্থিকের প্রয়োজন হবে। "ক্রয়ের আদেশ অনুমোদন" না থাকলে তার নিজস্ব কোনও মডেল / সত্তা। যেমন পোষ্ট / পো-অনুমোদনের (অনুরোধে পিও বিশদ সহ)।
mydoghasworms

2
একটি REST ক্লায়েন্টের দৃষ্টিকোণ থেকে "ক্রয় আদেশ অনুমোদন করুন" কেবল অর্ডারটির অন্য একটি আপডেট হওয়া উচিত। উদাহরণস্বরূপ "সত্য" এ "অনুমোদিত" পরিবর্তন করুন এবং সার্ভারে আপডেটটি প্রেরণ করুন। সার্ভারটি সম্ভবত বেশ কয়েকটি চেক করতে হবে এবং সম্ভবত অন্যান্য সংস্থানগুলির একগুচ্ছ আপডেট / তৈরি করতে হবে। তবে এটি সার্ভারগুলির সমস্যা এবং ক্লায়েন্টের কাছে দৃশ্যমান হওয়া উচিত নয়।
এভিআই

2
@ অ্যান্টিনোম: "ধরুন ক্লায়েন্টটি এর কিছু জানে", যদি আপনি এই ক্ষেত্রে বিশ্রাম নিচ্ছেন না (এটি এখনও কার্যকর, বুদ্ধিমান সফ্টওয়্যার হতে পারে!)। আরএসইএসটি এমন ক্লায়েন্ট তৈরি করতে সক্ষম হয়েছিল যা এই ধরণের জিনিস জানে না এমন ক্লায়েন্ট তৈরি করতে যা সার্ভারের আচরণ পরিবর্তন হলে এখনও কাজ করে। আপনি যা করতে চেষ্টা করছেন তা ক্লাসিক আরপিসি, আপনার নিজের পদ্ধতির পর্যালোচনা করা দরকার যাতে এটি বিশ্রামের উপযুক্ত হয়, বা আপনি আরপিসি করছেন এবং স্বীকার করবেন যে এসপিএপির মতো আরপিসির উদ্দেশ্যে প্রোটোকল ব্যবহার করা হবে। আরআরএসটি খুব চেষ্টা করে আরপিসি না হওয়ার চেষ্টা করে, তাই আপনি যখন চাইবেন / আরপিসি চান তখন কখনই উপযুক্ত হবে না।
এভিআই

15

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

গাড়ি কিনবেন? ভাল না

POST /api/order

2
পুটটি আদর্শ হিসাবে দেখা করার পরে কি সংস্থানগুলি আপডেট করার জন্য ব্যবহৃত হয় না ? এর অর্থ আপনি এটি যতবার কল করতে পারেন তবে কেবল প্রথম / শেষ কলটিই গুরুত্বপূর্ণ। অন্যদিকে POST রিসোর্স তৈরি করতে ব্যবহৃত হয় এবং এটিকে দু'বার কল করা আসলে দুটি তৈরি করা উচিত।
টমাসজ নুরকিউইচজ

1
@ টমাস, হ্যাঁ, টাইপো নীতিমালা যদিও গুরুত্বপূর্ণ, আমরা একটি নতুন জিনিস, একটি অর্ডার, নতুন ক্রিয়াপদের জন্য প্রয়োজন নেই সাথে ডিল করছি।
djna

5

আপনি সত্যিই কি করছেন একটি অর্ডার তৈরি করা। সুতরাং অর্ডার এবং পোস্টের জন্য অন্য একটি সংস্থান যুক্ত করুন এবং অর্ডার প্রক্রিয়া চলাকালীন সেখানে রাখুন।

পদ্ধতি কলের চেয়ে সম্পদের দিক থেকে চিন্তা করুন of

অর্ডার চূড়ান্ত করতে আপনি সম্ভবত পোস্ট / এপিআই / অর্ডার // সম্পূর্ণ বা অনুরূপ কিছু।


3

আমি মনে করি REST API গুলি কেবল শব্দার্থবিদ্যা সরবরাহের চেয়ে আরও অনেক উপায়ে সহায়তা করে। তাই আরপিসি স্টাইলটি চয়ন করতে পারে না কেবল এমন কিছু কলের কারণে যা আরপিসি অপারেশন শৈলীতে আরও বোধ করে। দুটি জায়গার মধ্যে দিকনির্দেশ খুঁজতে গুগল ম্যাপস এপিআই উদাহরণ। দেখে মনে হচ্ছে: http://maps.googleapis.com/maps/api/direction/json?origin= জাক্কুর ও নির্ধারণ=Hebbal

তারা এটিকে "FindDireferences" (ক্রিয়া) নামে অভিহিত করতে এবং এটি একটি অপারেশন হিসাবে বিবেচনা করতে পারে। পরিবর্তে তারা "দিকনির্দেশ" (বিশেষ্য) একটি সংস্থান হিসাবে তৈরি করেছেন এবং দিকনির্দেশের সংস্থান সম্পর্কে জিজ্ঞাসা হিসাবে দিকনির্দেশগুলি সন্ধান করেছিলেন (যদিও অভ্যন্তরীণভাবে দিকনির্দেশ বলে কোনও সত্যিকারের উত্স থাকতে পারে না এবং এটি ব্যবসার যুক্তি দ্বারা প্যারামের উপর ভিত্তি করে দিকনির্দেশগুলি খুঁজে পেতে প্রয়োগ করা যেতে পারে)।


এটি একটি খারাপ উদাহরণ। এই ক্ষেত্রে দিকনির্দেশ (সমস্ত সম্ভাব্য দিকনির্দেশ, তাদের অসীম সংখ্যা) হ'ল সংস্থান এবং পরামিতিগুলি কেবলমাত্র ফিল্টার। তবে আপনি এটি দিয়ে একটি "ক্রয়" করতে পারবেন না, কারণ ফিল্টারগুলি কেবল ক্রিয়াকলাপ গ্রহণ এবং অর্ডার দেওয়া বা বাতিল করার ক্ষেত্রে অর্থ প্রদান করে
Tseng

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