কুকিজগুলি কি একটি RESTful API এ ব্যবহার করা উচিত?


77

ব্যবহারকারীরা কীভাবে কোনও ওয়েব API এ অনুমোদিত / অনুমোদনপ্রাপ্ত ক্রিয়াকলাপ সম্পাদন করে সে সম্পর্কে আমি বিশেষভাবে আগ্রহী।

প্রমাণীকরণ কুকিগুলি কি বিশ্রাম দর্শনের সাথে সামঞ্জস্যপূর্ণ এবং কেন?




1
@ জারোডরোবারসন আমার বোঝা ছিল যে অন্য কোনও সাইটের উত্তরগুলি এখানে নকল হিসাবে প্রশ্নের যোগ্যতা অর্জন করবে না
টম স্কুইয়ার্স

5
প্রতিটি সাইটের FAQ গুলির উপর ভিত্তি করে @ জারোদরবারসন, আমি যুক্তি করব যে প্রশ্নটি এই সাইটের উপর নির্ভর করে স্ট্যাক ওভারফ্লো নয়। আমি RESTful আর্কিটেকচারের এই দিকটি সম্পর্কে নকশা পদ্ধতি / দর্শন এবং ট্রেড অফগুলিতে আগ্রহী। স্ট্যাক ওভারফ্লোটি বাস্তবায়নের প্রশ্নগুলির জন্য বোঝানো হয়, যেখানে এই সাইটটি ডিজাইনের পদ্ধতি এবং ট্রেডঅফস সম্পর্কে আরও বেশি।
ব্র্যান্ডন লিন্টন

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

উত্তর:


81

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

কুকিগুলির প্রয়োজনীয়তা এটি কঠিন করে তুলতে পারে। ব্রাউজারগুলি ছাড়াও ক্লায়েন্টদের জন্য, ক্যোয়ারী প্যারাম, সাধারণ অনুরোধ শিরোনাম বা অনুরোধের সংস্থার তুলনায় কুকিজ পরিচালনা করা বেশ বড় অসুবিধা। অন্যদিকে, ব্রাউজারে, কুকিগুলি ব্যবহার করা প্রচুর জিনিসকে অনেক সহজ করে তুলতে পারে।

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

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

সম্পাদনা করুন: নীচে @ কনরাডের মন্তব্যে আর.ই.

তুলনায় তুলনামূলকভাবে টোকেনগুলি প্রয়োগ করা আরও কঠিন কারণ আপনি সহজেই টোকেনটি কোথাও না সঞ্চয় করে অকার্যকর করতে পারবেন।

এর ... আপনি সার্ভারের পাশের কুকিগুলি যাচাই করছেন, তাই না? আপনি ব্রাউজারকে 24 ঘন্টা পরে একটি কুকি ফেলে দেওয়ার জন্য বলেছিলেন, এটি হ'ল এটি নয়। এই কুকিটি একটি অত্যন্ত প্রযুক্তিগত ব্যবহারকারী দ্বারা সংরক্ষণ করা যেতে পারে এবং "মেয়াদোত্তীর্ণ" হওয়ার অনেক পরে পুনরায় ব্যবহার করা যেতে পারে।

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


4
+1, আমি স্পষ্টতই অনুমোদন শিরোনাম ব্যবহারের কার্যকারিতা পছন্দ করি তবে ক্লায়েন্টের জন্য কী সর্বোত্তম কাজ করে তার উপর নির্ভর করে কুকিজের "পিছিয়ে পড়া"।
ব্র্যান্ডন লিন্টন

"ব্রাউজার ছাড়াও ক্লায়েন্টদের জন্য, কুকিজ পরিচালনা করা বেশ বড় অসুবিধা ..." এর সাথে আমি একমত নই। বেশিরভাগ HTTP ক্লায়েন্ট লাইব্রেরি কুকিজ সমর্থন করে, উদাহরণস্বরূপ, HttpClient.NET এর সাথে আপনি কোনও সমস্যা ছাড়াই কুকি ব্যবহার করতে পারেন এবং আপনার সত্যিকারের এটি চিন্তা করার দরকার নেই। তুলনায় তুলনামূলকভাবে টোকেনগুলি প্রয়োগ করা আরও কঠিন কারণ আপনি সহজেই টোকেনটি কোথাও না সঞ্চয় করে অকার্যকর করতে পারবেন।
Konrad

1
@ কনরাড কেবল এই কারণে কিছু ব্রাউজার নন এমন ক্লায়েন্টদের পক্ষে সহজ এটির অর্থ এই নয় যে এটি সকলের মধ্যেই এটি সহজ। আপনি যদি যে নির্দিষ্ট ক্লায়েন্টটি ব্যবহার করতে চান কেবল তখনই তাকে সমর্থন করতে হবে তবে এটি ঠিক আছে, তবে আমি জনসাধারণের মুখোমুখি এপিআইয়ের বিষয়ে প্রশ্নটি ব্যাখ্যা করেছি। মধ্যে curlবা wget, কুকিজ পরিচালনার প্রশংসনীয় অভিশাপ অসুবিধাজনক হয় এবং আপনি সত্যিই তাদের সম্পর্কে একটি গুচ্ছ চিন্তা করতে হবে না। আমি আমার উত্তর সম্পাদনা করে আপনার অন্য বিষয়টিতে জবাব দিয়েছি।
সিঙ্গেল নেজেশন ইলিমিনেশন

সাবধান থাকুন যে কেবল কুকি গ্রহণ করা সিএসআরএফের দুর্বলতা উন্মুক্ত করে। সিকিউরিটি.স্ট্যাকেক্সেঞ্জারওয়েটাও
a / 166798

14

হ্যাঁ এবং না - আপনি এটি কীভাবে ব্যবহার করেন তা নির্ভর করে।

কুকিজ যদি ক্লায়েন্টের ক্লায়েন্টের, ক্লায়েন্টের, ক্লায়েন্টের এবং ক্লায়েন্টের দ্বারা ক্লায়েন্টের রাজ্য বজায় রাখার জন্য ব্যবহৃত হয় তবে তারা বিশ্রামে।

আপনি যদি কুকিতে সার্ভারের স্টেট সংরক্ষণ করে থাকেন তবে আপনি মূলত ক্লায়েন্টের কাছে বোঝাটি সরিয়ে ফেলছেন - যা বিশ্রাম নয়।

সুতরাং কিছু উদাহরণ কি?

বিশ্রামরত:

  • প্রমাণীকরণের বিবরণ বা 'লগ ইন' টাইপের স্টাফ
  • সর্বশেষ দেখা পৃষ্ঠা বা প্রয়োগের স্থান ইত্যাদি

শান্ত নয়:

  • সেশন তথ্য সংরক্ষণ করা

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


10
আপনি যদি ক্লায়েন্টে একটি "ইসলগডডইন" পতাকাটি সঞ্চয় করেন তবে আপনি সম্ভবত কোনও প্রমাণীকরণও ব্যবহার করবেন না।
টিডামার্স

এটি অবশ্যই বোধগম্য হয় - অ্যাপ্লিকেশন স্টেটের ক্লায়েন্ট-সাইড সংরক্ষণ করা REST এর সাথে সামঞ্জস্যপূর্ণ নয়, তবে ক্লায়েন্টের তথ্য যা এটি নিজেকে উপস্থাপন করতে ব্যবহার করে তা সূক্ষ্ম বলে মনে হয়।
ব্র্যান্ডন লিন্টন

1
আমি যুক্ত করতে চাই যে কুকিজের মধ্যে প্রমাণীকরণের তথ্য রাখলে ক্রস-সাইট অনুরোধ জালিয়াতির আক্রমণের সম্ভাবনা খুলে যায়। আরও ভাল উপায় আছে, আমি অ্যামাজনকে অনুলিপি করার পরামর্শ দিচ্ছি: ডকস.ওএস.আমজোন.com
এপিআই

@tdammers "JLWgedIn" পতাকাটি JWT এ থাকলে কী হবে? তারপরে এটি সুরক্ষিত হওয়া উচিত, জেডাব্লুটিটি সরবরাহ করা সঠিকভাবে জারি করা হয় এবং যাচাই করা হয়।
অ্যারন জে স্পটনার

@ অ্যারোনজেস্পিটনার: সেশনের জন্য জেডাব্লুটিটি ব্যবহার করবেন না
টিডামার্স

12

কেউ কুকি ব্যবহার করতে পারেন। রেস্ট তাদের অনুমতি দেয়।

আরআরএসটি-র প্রয়োজন যে কোনও সেশনের তথ্য ক্লায়েন্টের পাশেই সঞ্চিত করা উচিত তবে এটি যখন প্রমাণীকরণের কথা আসে, কিছু তথ্য সুরক্ষার কারণে সার্ভারের পাশে থাকতে হয়।

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

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