একটি RESTful API এ ব্যবহারকারীর অনুমতিগুলির স্তর


23

ধরা যাক আমার একটি সংস্থা আছে যা ইন্টারনেটে সবচেয়ে সুন্দর বিড়ালদের স্থান দেয়।

আমি এমন একটি সংস্থান অফার করি/cats/ যাতে ব্যবহারকারীদের সর্বশেষতম, সুন্দরতম বিড়ালগুলি সরবরাহ করে।

ব্যবহারকারীরা হয় শীর্ষে 3 টি বিড়াল যদি তারা কিছু পরিশোধ না করে বা নিবন্ধভুক্ত না হয় তবে তা পেতে পারে। শীর্ষস্থানীয় 10 বিড়াল যদি তারা 337 ডলার প্রদান করে এবং লগ ইন করে এবং শীর্ষ 100 বিড়াল যদি তারা 1337 ডলার দেয় এবং লগ ইন করে। অনুরোধ করার সময় আমার একটি 'ব্যবহারকারী শনাক্তকারী' রয়েছে।

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

সংস্থানটি সীমিত করার পার্থক্যের জন্য সর্বোত্তম অনুশীলন কোনটি কারণ গ্রাহকের পর্যাপ্ত প্রাইভেলিজ নেই এবং এটি সীমাবদ্ধ করে কারণ ভোক্তার কি তাই?

ক্লায়েন্ট কীভাবে জানতে পারে যে তারা তাদের র‌্যাঙ্কিং আপগ্রেড করতে পারে? অর্থাৎ, তারা কেবল সীমিত সংস্থান পেয়েছে কারণ তাদের অনুমতি নেই। এখানে সেরা অনুশীলন কি?

দ্রষ্টব্য, এটি আসল মামলার একটি স্থূল সরলীকরণ। এছাড়াও, কেবল পরিষ্কার করার জন্য - পড়া প্রশংসা করা হয়।


হালনাগাদ:

এখানে আমরা বিবেচনা করেছি বিকল্পগুলি:

  • একবার ক্লায়েন্টে ব্যবহারকারীর অনুমতিগুলি অবজেক্টগুলি সংরক্ষণ করা, অ্যাকাউন্ট লগইন বা আপগ্রেড সম্পাদিত হলেই এটির জন্য অনুসন্ধান করা।
  • পাসিং nullতাদেরকে JSON মান ইঙ্গিত এটি বিদ্যমান, কিন্তু একটি প্রকৃত কিছুই স্থানান্তরিত করা হয়। সুতরাং 3 বিড়াল সহ একটি ব্যবহারকারীর জন্য 10 বিড়াল হতে পারে["Garfield","Sylvester","Puss in Boots",null*7]
  • একটি সংস্থান অনুমতি জুড়ি পাস {cats:["Whiskers","Fluffy","Socks"],authCount:3}

আমি সর্বোত্তম উপায়ে সুন্দরতম বিড়াল সরবরাহ করার জন্য প্রথমবার এটি করতে চাই এবং আমরা চাই এবং আমরা চাই


4
এখন আমি চতুর বিড়ালের ছবি দেখতে চাই
ক্যারি কেন্ডাল

আমি পাই না। আপনি যদি কোথাও 'ব্যবহারকারীর স্তর' সঞ্চয় না করেন তবে আপনি আলাদা করতে পারবেন না। মনে হচ্ছে আপনার সার্ভারে কোনও ব্যবহারকারীর তথ্য সংরক্ষণ করা নেই, তাই আপনি এটির সাথে তাদের ব্যবহারকারীর স্তর সংরক্ষণ করতে পারবেন না।
জান ডগজেন

@ জনডোগেন আমার সার্ভারে ব্যবহারকারীর স্তর রয়েছে (ক্লায়েন্টটি সার্ভারে শনাক্তকারীকে জানায়)।
বেনিয়ামিন গ্রুইনবাউম

সহায়তার প্রয়োজন? আমি 1337 রেফারেন্স পাই না?
মার্জন ভেনেমা

উত্তর:


18

আমি বলব এটি আপনার দর্শকের উপর নির্ভর করে।

কোন-দেব

যদি আপনার শ্রোতাগুলি কোনও বিকাশকারী না হয় তবে আমি নিম্নলিখিত উপায়ে যাব:

ধরা যাক আপনি উদাহরণের স্বার্থে জেএসএনকে ফিরিয়ে দিন।

GET /cats HTTP/1.1

{
    "cats": [
        "Can I haz cheeseburger",
        "If it fits, I sits",
        "It's caturday!"
    ],
    "permissions": {
        "level": "free",
        "information": "You have access to 3 cats. Upgrade to ... to get 10 cats!"
    }
}

বা অনুরূপ কিছু।

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

দেব

তবে আপনার শ্রোতা যদি নিখুঁতভাবে বিকাশকারী হন তবে আমি বলব: সম্পূর্ণ এইচটিটিপি অনুগতভাবে চলুন। মেটাডেটা সঞ্চয় করতে, আপনি HTTP শিরোনাম ব্যবহার করেন।

এখানে একটি উদাহরণ:

GET /cats HTTP/1.1

X-Account: anonymous
X-Account-Possible-Upgrades: 2
X-Account-Limit: 3

তারপরে, এই শিরোলেখগুলি কী বোঝায় তার একটি পরিষ্কার ডকুমেন্টেশন সরবরাহ করুন। বেশিরভাগ বিকাশকারীরা সরাসরি কাস্টম শিরোনামগুলি দেখলে ডকুমেন্টেশনের জন্য সরাসরি যাবেন, বিশেষত যদি তারা কোনও সীমা দেখছেন seeing আপনি আরও এগিয়ে যেতে পারেন এবং শিরোলেখগুলিতে লিঙ্কটি প্রদর্শন করতে পারেন। অথবা আপনি দামের পৃষ্ঠায় একটি লিঙ্ক প্রদর্শন করতে পারেন।

X-Account-Doc: http://your/doc

কিন্তু তারপরে আবার অনেকগুলি বিকাশকারী জানেন না যে এইচটিটিপি কীভাবে কাজ করে।

সুতরাং এটি আপনার কল

একটি আরও সঠিক, অন্যটি আরও অ্যাক্সেসযোগ্য।

বিবিধ

আপনার প্রশ্নের সাথে সম্পর্কিত কিছু অন্যান্য বিবিধ জিনিস:


1
হ্যাঁ, এটি নিখুঁতভাবে অনুধাবন করে, যদিও পার্শ্ব নোট হিসাবে আমি HTTP শিরোনামগুলিতে কিছু লেখক (এনট / অরাইজ) যাচ্ছি তা যথাযথ পদ্ধতির কারণ এটি কার্যকরভাবে মেটাডাটা।
জিমি হোফা

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

@ জিমিহফা কেমন আছেন? একটি 402 এই ক্ষেত্রে করবে না। আপনি কি পরামর্শ দিচ্ছেন?
বেনিয়ামিন গ্রুইনবাউম

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

1
@ বেনজামিন গ্রুয়েনবাউম আমি উত্তরটি পুরোপুরি আবার লিখেছি।
ফ্লোরিয়ান মার্জাইন

4

ক্লায়েন্ট কীভাবে জানতে পারে যে তারা তাদের র‌্যাঙ্কিং আপগ্রেড করতে পারে?

এটি ক্লায়েন্টের উপর নির্ভর করে। সাধারণত আপনি একটি হাইপারটেক্সট বার্তা (ওরফে এইচটিএমএল) আকারে REST পদ্ধতির প্রতিক্রিয়া শৃঙ্খলে রাখতে পারেন। তবে এটি কেবল তখনই বোধগম্য হয় যদি REST API কোনও HTML ক্লায়েন্টের সাথে ব্যবহৃত হয়।

এক্সএমএল এবং জেএসএন-এর জন্য অনুরূপ।


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

পরিবর্তে আপনার ব্যবহারকারীদের একটি আলাদা চ্যানেলের মাধ্যমে বলুন, যেমন নিউজলেটারের সাথে তাদের কী কী সুবিধা রয়েছে তা।

এটি বিশেষত ভাল কাজ করে যখন পরিষেবাতে সাইন আপ করা ব্যক্তি সেই নয় যিনি এপিআই-র বিরুদ্ধে প্রোগ্রামিং করছেন। উদাহরণ স্বরূপ:

জর্জ (যিনি 36 জন প্রেমময় বিড়ালছানা বয়সে গর্বের সাথে সমকামী লোক) বুদ্ধিমান- cats-4-me.com এ অ্যাক্সেস কিনে এবং 16 বছর বয়সী স্ত্রীকে (যিনি স্ক্রিপ্টিং কম্পিউটার সিস্টেম সহ লিনাক্সের সাথে ভাল আছেন) বলেন একটি তৈরি করতে অ্যাপার্টমেন্টের দেয়ালে ডিজিটাল সিগনেজ অ্যাপ্লিকেশনটি সুন্দর ছোট cutie kitties প্রদর্শন করছে।

সুতরাং যে লোকটি এই মজাদার প্রোগ্রামিংয়ে মজা করছে সে তথ্যটির পক্ষে সবচেয়ে সোজা-ফরোয়ার্ড অ্যাড্রেসী নয়।

বিকল্পভাবে লগইনের প্রতিক্রিয়া হিসাবে এবং একটি ব্যবহারকারী-তথ্য পদ্ধতির সমস্ত অবিচ্ছিন্ন বিবরণ সরবরাহ করুন।

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

অন্যথায়, তাদের আরও জিজ্ঞাসা করার অনুমতি দিন এবং তারপরে তাদের অধিকারগুলি পর্যাপ্ত না হলে ব্যর্থতার বিজ্ঞপ্তি ফিরিয়ে দিন। তবে আবার এটি কোনও ব্যবহারকারী-বান্ধব সফ্টওয়্যার নয়।


1
@ রচিঃ: মেয়েদের ঘরে টাকা থাকলে আপনার কি সমস্যা হয় এবং ছেলেদের কী করতে হয়?
হ্যাক্রে

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