নন-সিআরইউডি অপারেশন পরিচালনা করতে কীভাবে একটি REST এপিআই ডিজাইন করবেন?


11

আমি এসওএপি-ভিত্তিক পরিষেবার একটি সেটকে একটি রেস্টলফুল এপিআইতে রূপান্তর করার চেষ্টা করছি।

আমি অপারেশন নাম বিশ্লেষণ করে সংস্থানগুলি সনাক্ত করে শুরু করেছি এবং আমি সংস্থানটি পেয়েছি Subscription

যখন আমাকে সাবস্ক্রিপশনটির অবস্থা আপডেট করতে হবে, আমি কেবল POSTসার্ভারে একটি অনুরোধ পাঠাতে পারি না, কারণ আমার সংস্থানগুলিতে সরাসরি অ্যাক্সেস নেই, তবে তাদের সম্পত্তি আপডেট করার জন্য আমাকে কিছু আরপিসি-স্টাইল অপারেশন কল করতে হবে need অতিরিক্তভাবে, কেবলমাত্র এবং কেবলমাত্র আমি যদি সাবস্ক্রিপশনটির স্থিতিটি "সক্রিয়" তে পরিবর্তন করি তবে বাহ্যিক পরিষেবায় একটি অতিরিক্ত কল প্রয়োজন।

এই ক্ষেত্রে অন্তর্নিহিত ক্রিয়াকলাপ পরিচালনা করার জন্য সেরা অনুশীলন কোনটি?

আমি যে সমাধানটি নিয়ে এসেছি তা হ'ল ক্যোয়ারি প্যারামিটারগুলি ব্যবহার করা, যাতে যদি আমাকে অ্যাক্টিভেশন পরিষেবাটি কল করতে হয় তবে আমি এই জাতীয় কিছু ব্যবহার করতে পারি:

POST /subscriptions/{subscriptionid}/?activate=true

আমি সরাসরি আমার সাবস্ক্রিপশন অবজেক্ট ক্ষেত্রগুলি আপডেট করতে পারি না তা বিবেচনা করে, এই ধরণের রূপান্তরটি পরিচালনা করার জন্য কোনও সেরা অনুশীলন আছে কি?

আপডেট 1:

আমি আমার পোস্টের শিরোনামে কিছু মান অনুরোধ করতে পারি, উদাহরণস্বরূপ "রাষ্ট্র": "সক্রিয়"

এবং আমার পরিষেবাটির ভিতরে সঠিক ক্রিয়াকলাপ শুরু করার জন্য পরীক্ষা করুন।


REST- র HTTP ক্রিয়াকলাপগুলিতে কমান্ডগুলির ম্যাপিং জটিল ক্রিয়াকলাপে ব্যর্থ। আপনি কেবল একটি আরপিসি স্টাইল কল করে পোস্ট পোস্ট অ্যাক্টিভেটস সাবস্ক্রিপশন / {আইডি doing কেউই এতে বিভ্রান্ত হবেন না
ইওয়ান

@ ইভান আমি নিশ্চিত নই যে এটি রেস্টস্টুল মডেলের সাথে সম্মতি রাখে, তবে আমি আরও একটি সমাধান নিয়ে এসেছি: আমার কোডে আমি ইনপুট পেইড অনুযায়ী যথাযথ আরপিসি-স্টাইল অপারেশনটি কল করতে পারি (আমি রাষ্ট্রের সক্রিয় অবস্থায় = সক্রিয় করতে পারি) আমার পোস্টের অনুরোধ, কোডটি অ্যাক্টিভেশন কোডটি কল করবে)
Vektor88

1
এটির মতো বিদ্যমান উত্সের আপডেটটি একটি প্যাচচ হওয়া উচিত এবং কোয়েরির মূল অংশটি তখন আপনি কী পরিবর্তন করছেন তার একটি আংশিক মডেল। একটি পোস্ট একটি অনুরোধ বলে মনে করা হয় যা একটি সংস্থান তৈরি করে। এই পার্থক্যটি, ব্যবহারকারীর কাছে পরিষ্কার হওয়া ছাড়াও, আপনার কোডের পক্ষে রিসোর্স পোস্টের চেয়ে কখন এই অপারেশনটি ঘটছে তা জানা আপনার পক্ষে সহজ করে তুলবে।
মিঃ কোচিজ

1
@ ভেক্টর ৮৮ সাধারণত, তবে সেগুলি আদর্শ কর্মক্ষম অপারেশন যেখানে আপনাকে পুরো রিসোর্স রাষ্ট্রের প্রতিনিধিত্ব করতে হবে। এই ব্যবহারের ক্ষেত্রে আংশিক আপডেটের মতো আরও অনেক বেশি মনে হয়, যা একটি প্যাচ সত্যিই ভাল ফিট করে।
মিঃ কোচিজ

1
@ এমআরসিচিস পোস্টটি আদর্শবান নয়।
জিমি জেমস

উত্তর:


8

আপনার জিম ওয়েবারের এই আলোচনাটি দেখতে হবে।

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

"বার্তা" চিন্তা করুন; আপনি কী হতে চান তা বর্ণনা করে আপনার ডোমেনে একটি বার্তা প্রেরণ করুন। বার্তার পার্শ্ব প্রতিক্রিয়া হ'ল আপনার ডোমেন মডেলটি আসলে তার স্থিতি পরিবর্তন করে। "রিসোর্স" হ'ল বার্তার সারি।

POST /subscriptions/{subscriptionid}/?activate=true

সংস্থানগুলির নামের বানানটি মেশিনগুলির সাথে কোন গুরুত্ব দেয় না; আপনি যখন পরিচিতি ব্যবহারকারীর কনভেনশনটি থেকে বিরতি পান তখন উত্সগুলি "বিশেষ্য" হওয়ায় লোকেরা উদ্বেগ প্রকাশ করে।

এছাড়াও, আমরা এমন একটি সংস্থান সম্পর্কে কথা বলছি যার অধস্তন /subscriptions/{subscriptionid}, সুতরাং কনভেনশন ( আরএফসি 3986 দেখুন ) জিজ্ঞাসা অংশটি ব্যবহার না করে পাথ বিভাগের সাথে সেই সম্পর্কটি প্রকাশ করার জন্য আহ্বান জানায়।

সুতরাং এই বানানগুলি যুক্তিসঙ্গত হতে পারে

POST /subscriptions/{subscriptionid}/messages
POST /subscriptions/{subscriptionid}/activations

1
জিম ওয়েবারের
আলাপটি

0

যদি জিনিসগুলি সক্রিয় / নিষ্ক্রিয় করার জন্য এটির বুলিয়ান পতাকা থাকে তবে আমি বলতে চাই যে ডিফল্টটি JSON ব্যবহার করা:

POST /subscriptions/{subscriptionid}/
{
    format: 0,
    subscription: 
    {
        active: false
    }
}

আপনি আরও সম্পত্তি সমর্থন করতে চাইলে এটি সহজেই প্রসারিত হয়। আর একটি পদ্ধতি এটির নিজস্ব সমাপ্তি প্রদান করছে:

POST /subscriptions/{subscriptionid}/active/
DELETE /subscriptions/{subscriptionid}/active/

ব্যক্তিগতভাবে, আমি কেবল তখনই এটি ব্যবহার করব যদি activeএই ইভেন্টের স্থিতির প্রয়োজন হয় বা এমন কোনও বৈশিষ্ট্য থাকে যা আপনি তখন ব্যবহারকারীর আইডি বা সেটিংয়ের মতো JSON এ পাস / পেতে পারেন।

যদি এটি বুলিয়ান মান না হয় তবে কেবল এমন একটি ক্রিয়া যা আপনাকে ট্রিগার করতে হবে তবে (তাত্ক্ষণিক 200 ওকে ব্যতীত) এর জন্য কোনও স্থিতির প্রতিক্রিয়া দরকার নেই / চাইলে আমি একে আরপিসির মতো এটি ট্রিগার করতে একটি এন্ডপয়েন্ট ব্যবহার করব:

POST /subscriptions/{subscriptionid}/activate/

সন্দেহ হলে, এটি পড়ুন: http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#restful (দেখুন "ক্রিয়াকলাপগুলি কী হবে যা সিআরইউডি অপারেশনগুলির জগতের সাথে খাপ খায় না? ")


0

REST অ-কার্যকরী। Activateএকটি ক্রিয়াপদ এবং একটি রাষ্ট্র হতে পারে না, Activeএকটি রাষ্ট্র।

কারণ RESTful অ-কার্যক্ষম, আপনি একটি RESTful পরিষেবাটি কী করতে হবে তা বলতে পারবেন না, তবে আপনি কোনও পরিষেবার সারির জন্য কাজ যুক্ত করতে পারেন।

এটা দেখ:

PUT /subscriptionQueue
subscriptionId={subscriptionId}
active=true

এই অনুরোধটি RESTful এবং RESTful এর সমস্ত সুবিধা সমর্থন করে (যেমন পারফরম্যান্স, অ্যাসিড ...)

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