আমি বড় বড় সংস্থাগুলি তাদের আরএসটি এপিআইগুলি ডিজাইন করে দেখেছি এমন সমস্ত উপায়ের ভিত্তিতে আরইএসটি সঠিকভাবে কীভাবে ব্যবহার করতে হবে তা সম্পর্কে কিছুটা বিভ্রান্তি বোধগম্য।
আপনি REST এ সঠিক যে একটি রিসোর্স সংগ্রহ সিস্টেম। এটি রিপ্রেজেনটিভাল স্টেট ট্রান্সফারকে বোঝায়। আপনি যদি আমাকে জিজ্ঞাসা করেন তবে একটি দুর্দান্ত সংজ্ঞা নয়। তবে মূল ধারণাগুলি হ'ল 4 টি এইচটিপি ভিআরবি এবং রাষ্ট্রহীন।
লক্ষণীয় গুরুত্বপূর্ণ বিষয়টি হ'ল আপনার কাছে কেবলমাত্র REST সহ 4 টি ভারবস রয়েছে। এগুলি হ'ল জিইটি, পোস্ট, পুট এবং ডিলিট। আপনার resendউদাহরণটি বিশ্রামে একটি নতুন ক্রিয়া যুক্ত হবে। এটি একটি লাল পতাকা হওয়া উচিত।
প্রশ্ন 1
এটি উপলব্ধি করা জরুরী যে আপনার REST এপিআইয়ের কলারটি জেনে রাখা উচিত নয় যে PUTআপনার সংগ্রহে কোনও কাজ করার ফলে কোনও ইমেল তৈরি হতে পারে generated আমার কাছে এই ফুটো গন্ধ। তারা যা জানতে পারে তা হ'ল একটি সম্পাদন করার PUTফলে তারা আরও কাজ করতে পারে যা তারা পরে জিজ্ঞাসা করতে পারে। তারা GETসম্প্রতি তৈরি হওয়া উত্সটিতে একটি সম্পাদন করে এটি জানবে । যে GETসম্পদ ও সব ফিরে আসবে Taskরিসোর্স আইডি তা এর সাথে সংশ্লিষ্ট। এরপরে আপনি সেগুলির স্থিতি নির্ধারণ করতে এবং একটি নতুন জমা দেওয়ার জন্য পরে সেগুলি সম্পর্কে জিজ্ঞাসা করতে পারেন Task।
আপনার স্বল্প কিছু সু্যোগ আছে।
রেস্ট - টাস্ক রিসোর্স ভিত্তিক পদ্ধতির
এমন একটি tasksসংস্থান তৈরি করুন যাতে আপনি ক্রিয়া সম্পাদন করতে আপনার সিস্টেমে নির্দিষ্ট কাজ জমা দিতে পারেন। তারপরে আপনি এটির স্থিতি নির্ধারণ করতে এর GETউপর ভিত্তি করে কাজটি করতে পারেন ID।
অথবা আপনি SOAP over HTTPআপনার আর্কিটেকচারে কিছু আরপিসি যুক্ত করতে কোনও ওয়েব পরিষেবাতে মিশ্রিত করতে পারেন ।
একটি নির্দিষ্ট উত্স জন্য সমস্ত কাজ জিজ্ঞাসা
GET http://server/api/myCollection/123/tasks
{ "tasks" :
[ { "22333" : "http://server/api/tasks/223333" } ]
}
টাস্ক রিসোর্স উদাহরণ
PUT http://server/api/tasks
{
"type" : "send-email" ,
"parameters" :
{
"collection-type" : "foo" ,
"collection-id" : "123"
}
}
==> টাস্কের আইডি প্রদান করে
223334
GET http://server/api/tasks/223334
{
"status" : "complete" ,
"date" : "whenever"
}
REST- ক্রিয়াকলাপগুলিতে পোষ্ট ব্যবহার করে
আপনি সর্বদা POSTকোনও উত্সে অতিরিক্ত ডেটা করতে পারেন । আমার মতে এটি বিশ্রামের চেতনা লঙ্ঘন করবে তবে এটি এখনও মেনে চলবে।
আপনি এর মতো একটি পোষ্ট করতে পারেন:
POST http://server/api/collection/123
{ "action" : "send-email" }
আপনি অতিরিক্ত ডেটা সহ সংগ্রহ থেকে 123 রিসোর্স আপডেট করবেন। অতিরিক্ত তথ্যটি মূলত সেই উত্সটির জন্য ইমেল প্রেরণে ব্যাকএন্ডকে বলা একটি ক্রিয়া।
আমার এটির সাথে সমস্যাটি হ'ল GETসংস্থানটিতে থাকা একটি এই আপডেট হওয়া ডেটা ফেরত দেবে। তবে এটি আপনার প্রয়োজনীয়তা সমাধান করবে এবং এখনও বিশ্রামে থাকবে।
SOAP - ওয়েব পরিষেবা যা REST থেকে প্রাপ্ত সংস্থান গ্রহণ করে
একটি নতুন ওয়েব সার্ভিস তৈরি করুন যাতে আপনি REST এপিআই থেকে পূর্বের রিসোর্স আইডির উপর ভিত্তি করে ইমেলগুলি প্রেরণ করতে পারেন। আমি এখানে এসওএপি সম্পর্কে বিশদে যাব না কারণ আসল প্রশ্নটি রেস্ট সম্পর্কে এবং এ দুটি ধারণা / প্রযুক্তিগুলি আপেল এবং কমলাগুলির সাথে তুলনা করা উচিত নয় ।
প্রশ্ন 2
আপনার এখানে কয়েকটি বিকল্প রয়েছে:
এটি অনেক বড় বড় সংস্থাগুলি উপস্থিত হয় যা REST এপিআই প্রকাশ করে এমন একটি searchসংগ্রহ প্রকাশ করে যা সম্পদ ফেরত দেওয়ার জন্য ক্যোয়ারী প্যারামিটারগুলিতে পাস করার সত্যিই এক উপায়।
GET http://server/api/search?q="type = myCollection & someField >= someval"
যা সম্পূর্ণরূপে যোগ্য REST সংস্থার যেমন:
{
"results" :
{ [
"location" : "http://server/api/myCollection/1",
"location" : "http://server/api/myCollection/9",
"location" : "http://server/api/myCollection/56"
]
}
}
অথবা আপনি কোয়েরি প্যারামিটার হিসাবে এমভিএল এর মতো কিছুতে অনুমতি দিতে পারেন ।
প্রশ্ন 3
আমি ব্যাক আপ যেতে এবং ক্যোয়ারী প্যারামিটার দিয়ে অন্য উত্সটি জিজ্ঞাসা করার চেয়ে উপ-স্তরগুলি পছন্দ করি। আমি বিশ্বাস করি না যে কোনওভাবেই কোনও নিয়ম আছে। আপনি উভয় উপায়ে বাস্তবায়ন করতে পারেন এবং কলারকে সিদ্ধান্ত নিতে দেওয়া হয় যে তারা সিস্টেমে প্রথম কীভাবে প্রবেশ করেছে তার ভিত্তিতে কোনটি আরও উপযুক্ত।
মন্তব্য
আমি অন্যের পাঠযোগ্যতার মন্তব্য সম্পর্কে একমত নই। কিছু যা মনে করে তা সত্ত্বেও REST এখনও মানুষের ব্যবহারের জন্য নয়। এটি মেশিন ব্যবহারের জন্য। আমি যদি আমার টুইটগুলি দেখতে চাই তবে আমি টুইটারগুলি নিয়মিত ওয়েবসাইট ব্যবহার করি। আমি তাদের এপিআই দিয়ে একটি বিশ্রাম পেতে পারি না। আমি যদি আমার টুইটগুলি দিয়ে প্রোগ্রামগতভাবে কিছু করতে চাই তবে আমি তাদের REST এপিআই ব্যবহার করি। হ্যাঁ এপিআইগুলি বোধগম্য হওয়া উচিত তবে এটি আপনার gteপক্ষে খারাপ নয়, এটি কেবল স্বজ্ঞাত নয়।
আরআরইএসটির সাথে অন্য প্রধান জিনিসটি হ'ল আপনার API এর যে কোনও বিন্দুতে শুরু করতে সক্ষম হওয়া উচিত এবং সময়ের আগে অন্যান্য সংস্থাগুলির সঠিক URL জানতে ব্যতীত অন্যান্য সমস্ত সংস্থানীয় সংস্থানগুলিতে নেভিগেট করতে সক্ষম হওয়া উচিত। GETREST এ VERB- এর ফলাফলগুলির উল্লেখ করা সংস্থানগুলির সম্পূর্ণ REST ইউআরএল ফিরিয়ে দেওয়া উচিত। সুতরাং একটি আইডি ফিরে একটি ক্যোয়ারী পরিবর্তে Personবস্তু, এটা যেমন সম্পূর্ণরূপে বৈধ URL ফিরে আসবে http://server/api/people/13। তারপরে আপনি ইউআরএল পরিবর্তিত হয়ে গেলেও প্রোগ্রামগুলিতে সর্বদা ফলাফলগুলিতে নেভিগেট করতে পারেন।
প্রতিক্রিয়া মন্তব্য
বাস্তব বিশ্বে বাস্তবে এমন কিছু জিনিস ঘটে থাকে যা কোনও সংস্থান তৈরি করে না, পড়ে, আপডেট করে না অথবা মুছে দেয় না (CRUD)।
সম্পদের উপর অতিরিক্ত পদক্ষেপ নেওয়া যেতে পারে। সাধারণ সম্পর্কিত সম্পর্কিত ডাটাবেসগুলি সঞ্চিত পদ্ধতিগুলির ধারণাকে সমর্থন করে। এগুলি অতিরিক্ত কমান্ড যা ডেটা সেটে কার্যকর করা যায়। REST এর অন্তর্নিহিত ধারণাটি নেই। এবং এটি করার কোনও কারণ নেই। এই ধরণের ক্রিয়াগুলি আরপিসি বা এসওএপি ওয়েব পরিষেবাদির জন্য উপযুক্ত।
এটিই হ'ল REST এপিআই সহ সাধারণ সমস্যা। বিকাশকারীরা REST এর চারপাশে ধারণামূলক সীমাবদ্ধতা পছন্দ করে না তাই তারা যা খুশি তা করতে এটিকে মানিয়ে নেয়। যদিও এটি একটি বিশ্রাম পরিষেবা হওয়া থেকে বিরতি দেয়। মূলত সেই GETইউআরএলগুলির সিউডো-রিস্ট-এর মতো সার্লেলে কল হয়।
আপনার স্বল্প কিছু সু্যোগ আছে:
- একটি টাস্ক রিসোর্স তৈরি করুন
POSTকোনও ক্রিয়া সম্পাদন করতে রিসোর্সে অতিরিক্ত ডেটা আইং সমর্থন করে ।
- একটি এসওএপি ওয়েব পরিষেবার মাধ্যমে অতিরিক্ত কমান্ড যুক্ত করুন।
আপনি যদি ইমেলটি পুনরায় পাঠাতে কোন HTTP VERB ব্যবহার করবেন এমন কোনও কোয়েরি প্যারামিটার ব্যবহার করেন?
GET- এটি কি ইমেলটি পুনরায় পাঠায় এবং সংস্থানটির ডেটা ফেরত দেয়? যদি কোনও সিস্টেম সেই URL টি ক্যাশে করে এবং সেই সংস্থানটির জন্য এটি অনন্য URL হিসাবে ব্যবহার করে। প্রতিবার তারা ইউআরএল হিট করে এটি ইমেল পুনরায় পাঠাবে।
POST - আপনি রিসোর্সে কোনও নতুন ডেটা প্রেরণ করেননি, কেবল একটি অতিরিক্ত ক্যোয়ারী প্যারামিটার।
প্রদত্ত সমস্ত প্রয়োজনীয়তার ভিত্তিতে, পোস্টের ডেটা হিসাবে রিসোর্সটিতে POSTএকটি action fieldকরা সমস্যার সমাধান করবে will