একটি বিশ্রাম সংগ্রহের মধ্যে পেজিং


134

আমি জেএসওএন নথি সংগ্রহ করার জন্য সরাসরি আরইএসটি ইন্টারফেসটি প্রকাশ করতে আগ্রহী (মনে করি কাউচডিবি বা পারসিভের )) আমি যে সমস্যাটি নিয়ে যাচ্ছি তা হ'ল GETসংগ্রহটি বড় হলে সংগ্রহের রুটে কীভাবে পরিচালনা করা যায়।

উদাহরণ হিসাবে ভান করে আমি স্ট্যাকওভারফ্লো এর Questionsটেবিলটি উন্মোচিত করছি যেখানে প্রতিটি সারি একটি নথি হিসাবে প্রকাশ করা হয়েছে ( এমনটি নেই যে টেবিলটি অগত্যা রয়েছে, কেবল 'নথিপত্রের বিশাল আকারের সংগ্রহের একটি দৃ example় উদাহরণ)। সংগ্রহে এ উপলব্ধ করা হবে /db/questionsস্বাভাবিক টি ককটেলের API- এর সাথে GET /db/questions/XXX, PUT /db/questions/XXX, POST /db/questionsখেলা হয়। পুরো সংগ্রহটি পাওয়ার স্ট্যান্ডার্ড GET /db/questionsউপায়টি হ'ল তবে যদি সেই নির্বিঘ্নে প্রতিটি সারিটি JSON অবজেক্ট হিসাবে ডাম্প করে দেয় তবে আপনি সার্ভারের অংশে একটি পরিবর্তে আকারের ডাউনলোড এবং প্রচুর কাজ পাবেন।

সমাধানটি অবশ্যই, পেজিং হয়। কাস্টম রেঞ্জ ইউনিট সহ শিরোনামটি ব্যবহারের চতুর আরএফসি 2616- অনুগ্রহপূর্বক এক্সটেনশনের মাধ্যমে ডোজো তার JsonRestStore এ এই সমস্যার সমাধান করেছে । ফলাফলটি এমন একটি যা কেবলমাত্র অনুরোধ করা ব্যাপ্তিটি দেয়। একটি ক্যোয়ারী প্যারামিটারের মাধ্যমে এই পদ্ধতির সুবিধাটি হ'ল ... এটি ক্যোয়ারী স্ট্রিংকে ... কোয়েরিগুলির জন্য ছেড়ে দেয় (যেমন বা সামসুচ, এবং হ্যাঁ এনকোড করা হবে না )।Rangeitems206 Partial ContentGET /db/questions/?score>200%3E

এই পদ্ধতিটি আমার যে আচরণটি চায় তা পুরোপুরি coversেকে দেয়। সমস্যাটি হ'ল আরএফসি 2616 নির্দিষ্ট করে যে 206 প্রতিক্রিয়াতে (জোর দেওয়া খনি):

অনুরোধ রেঞ্জ হেডারের ক্ষেত্র (অন্তর্ভুক্ত থাকতে হবে অধ্যায় 14.35 ) আকাঙ্ক্ষিত পরিসীমা ইঙ্গিত, এবং একটি if-বিন্যাস হেডার ক্ষেত্র (অন্তর্ভুক্ত হতে পারে অধ্যায় 14,27 অনুরোধ শর্তসাপেক্ষ করতে)।

এটি শিরোনামের স্ট্যান্ডার্ড ব্যবহারের প্রসঙ্গে বোঝায় তবে একটি সমস্যা কারণ নির্দোষ ক্লায়েন্ট / এলোমেলো লোকদের অন্বেষণ করার জন্য আমি 206 এর প্রতিক্রিয়াটি ডিফল্ট হতে চাই।

আমি আরএফসির সাথে বিশদভাবে সমাধানের সন্ধান করতে পেরেছি তবে আমার সমাধানগুলি নিয়ে অসন্তুষ্ট হয়েছি এবং সমস্যাটি নিয়ে এসওের আগ্রহী।

আমার ধারণাগুলি ছিল:

  • হেডার 200নিয়ে ফিরুন Content-Range! - আমি মনে করি না যে এটি ভুল, তবে আমি যদি আরও স্পষ্ট সূচকটি পছন্দ করি যে প্রতিক্রিয়াটি কেবল আংশিক সামগ্রী।
  • রিটার্ন400 Range Required - প্রয়োজনীয় শিরোলেখগুলির জন্য একটি বিশেষ 400 প্রতিক্রিয়া কোড নেই, তাই ডিফল্ট ত্রুটিটি হাতে হাতে ব্যবহার করতে হবে এবং পড়তে হবে। এটি ওয়েব ব্রাউজারের মাধ্যমে (বা অন্য কোনও ক্লায়েন্ট যেমন রেস্টির) মাধ্যমে অনুসন্ধান আরও জটিল করে তুলেছে।
  • একটি ক্যোয়ারী প্যারামিটারটি ব্যবহার করুন - মানক পদ্ধতির, তবে আমি কোরিয়ার একটি লা পার্সেভেরিকে জিজ্ঞাসা করার অনুমতি দেবো এবং কোয়েরির নাম স্থানটিতে এটি কেটে দেবে hop
  • শুধু ফিরে 206! - আমি মনে করি বেশিরভাগ ক্লায়েন্টরা ফ্রি আউট করবে না, তবে আমি আরএফসিতে কোনও জোরের বিরুদ্ধে যাব না
  • জল্পনা বাড়ান! ফিরে আসুন266 Partial Content - হ'ল 206 এর মতো আচরণ করে তবে একটি অনুরোধের প্রতিক্রিয়া হিসাবে এটি Rangeহেডারটি থাকা উচিত নয় contain আমি অনুমান করেছি যে ২66 যথেষ্ট উচ্চ যে আমার সংঘর্ষের সমস্যাগুলির মধ্যে দৌড়াতে হবে না এবং এটি আমার কাছে বোধগম্য হয় তবে এটিকে নিষিদ্ধ হিসাবে বিবেচনা করা হয় কি না সে সম্পর্কে আমি পরিষ্কার নই।

আমি মনে করি এটি মোটামুটি সাধারণ সমস্যা এবং আমি বা অন্য কেউ চক্রটি পুনরায় উদ্ভাবন না করানোর জন্য এটি একটি ধরণের ডি ফ্যাক্টো ফ্যাশনে সম্পন্ন করতে দেখতে চাই।

সংগ্রহটি বড় হলে এইচটিটিপি এর মাধ্যমে একটি সম্পূর্ণ সংগ্রহটি প্রকাশের সর্বোত্তম উপায় কী?


21
বাহ, এটি এমন প্রশ্নের একটি ভাল উদাহরণ যেখানে আগে কিছু গুরুতর চিন্তাভাবনা করা হয়েছিল।
হাইকো রুপ


1
রেঞ্জের শিরোলেখ ব্যবহার করার ক্ষেত্রে ডোজোর যতদূর পন্থা, যদিও আমি স্বীকার করতে পারি - রেঞ্জগুলি প্রসারিত করার অনুমতি দেয়, তবে আমি বলতে পারি যে রেঞ্জের জন্য ইবিএনএফ তা করে না: সরঞ্জাম.এইটিএফ.আর.এইচ.এফ.এইচটিএম / আরএফসি 2616#section 14.35.2অনুমানটি নির্দেশ করে Range = "Range" ":" ranges-specifierযেখানে সরঞ্জামগুলির মধ্যে.ইটিএফ.আর.জি.এইচটিএমএল / আরএফসি 2616# সেকশন 14.35.1 কেবল "বাইট-রেঞ্জস-স্পেসিফায়ার" হিসাবে বর্ণনা করা হয়েছে যা "বাইটস-ইউনিট" দিয়ে শুরু হওয়া আবশ্যক যা স্ট্রিং "বাইটস হিসাবে সংজ্ঞায়িত হয়েছে" "।
ব্রেট জমির

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

তবে আরএফসি 2616 নিজেই বলেছে যে "এইচটিটিপি / 1.1 প্রয়োগগুলি মেই অন্যান্য ইউনিটগুলি ব্যবহার করে নির্দিষ্ট রেঞ্জ উপেক্ষা করে।" সুতরাং পৃষ্ঠাগুলি জন্য রেঞ্জ শিরোনাম ব্যবহার করা কি একটি ভাল অনুশীলন? কোজ এটি আন্তঃঅযুক্তি নিয়ে আপস করতে পারে।
চেতন চোলওয়ার

উত্তর:


23

আমার অন্ত্র অনুভূতি হ'ল এইচটিটিপি রেঞ্জের এক্সটেনশানগুলি আপনার ব্যবহারের ক্ষেত্রে তৈরি করা হয়নি এবং সুতরাং আপনার চেষ্টা করা উচিত নয়। একটি আংশিক প্রতিক্রিয়া বোঝায় 206, এবং 206ক্লায়েন্ট যদি এটি জিজ্ঞাসা করে তবেই তা অবশ্যই প্রেরণ করতে হবে।

আপনি ভিন্ন পদ্ধতির বিবেচনা করতে চাইতে পারেন, যেমন পরমাণুর এক ব্যবহার (যেখানে ডিজাইনের মাধ্যমে উপস্থাপনাটি আংশিক হতে পারে, এবং কোনও স্ট্যাটাস দিয়ে ফিরে আসে 200এবং সম্ভাব্য লিঙ্কগুলি সংযুক্ত করে)। দেখুন বোঝায় যা RFC 4287 এবং জন্য RFC 5005


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

1
@ কার্লগুয়ের্টিন একমত এটি অত্যন্ত খারাপ এটি গৃহীত উত্তর, কারণ দেখে মনে হয় সম্প্রদায়ের অনেকেই বাস্তবে আলিঙ্গন করছে Rangeএবং Content-Rangeপেজিংয়ের উদ্দেশ্যে।
স্টিজন ডি উইট

34

আমি আপনাদের কয়েকজনের সাথে সত্যই একমত নই। আমি আমার রেস্ট পরিষেবাটির জন্য এই বৈশিষ্ট্যগুলিতে কয়েক সপ্তাহ ধরে কাজ করছি। আমি যা করে শেষ করেছি তা সত্যিই সহজ। আমার সমাধানটি কেবলমাত্র বিশ্রামের লোকেরা যে সংগ্রহটিকে কল করে তা বোঝায়।

গ্রাহককে অবশ্যই সংগ্রহের কোন অংশটি প্রয়োজন তা নির্দেশ করার জন্য একটি "রেঞ্জ" শিরোনাম অন্তর্ভুক্ত করতে হবে, অথবা অন্যথায় যখন অনুরোধ করা সংগ্রহটি একক রাউন্ড ট্রিপে পুনরুদ্ধার করার জন্য খুব বড় হয় তখন 41১ টি পুনঃনির্বাচিত জাতীয়তা খুব বড় ত্রুটিটি পরিচালনা করতে প্রস্তুত।

কনভার্ট-রেঞ্জের শিরোনামের সাহায্যে সংস্থানটির কোন অংশটি প্রেরণ করা হয়েছে তা উল্লেখ করে এবং সংগ্রহের বর্তমান সংস্করণ সনাক্ত করার জন্য একটি ETag শিরোনাম সহ সার্ভার একটি 206 পার্টিয়াল কনটেন্ট প্রতিক্রিয়া প্রেরণ করে। আমি সাধারণত ফেসবুকের মতো ইটাগ {সর্বশেষ_পরিবর্তন_টাইমস্ট্যাম্প} - {উত্স_আইডি use ব্যবহার করি এবং আমি বিবেচনা করি যে কোনও সংকলনের ইটাগ এটির মধ্যে রয়েছে অতি সম্প্রতি পরিবর্তিত সংস্থান।

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

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

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


আপনি কি 416 "অনুরোধিত পরিসরটি সন্তুষ্টযোগ্য নয়" বা "413" সত্তার অনুরোধটি খুব বড় সংখ্যার চেয়েছেন?

1
@ মুহম্মদ আমার মনে হয় আপনার অর্থ If-Unmodified-Since, যা ই-ট্যাগ বৈকল্পিকের সাথে মিল If-Matchরয়েছে If-Modified-Since। এটি বলেছিল, আপনি আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে এই সীমাবদ্ধতা অপসারণের বিষয়টিও বিবেচনা করতে পারেন। বলুন যে আপনার কাছে এমন একটি সংগ্রহ রয়েছে যা কেবল শীর্ষ থেকে বৃদ্ধি পায় (কিছু "প্রথম প্রথম" স্টাইলের সংগ্রহের মতো), সবচেয়ে খারাপ যেটি ঘটতে পারে যদি সেই সংগ্রহের মধ্যে অনুরোধগুলি পরিবর্তিত হয় তবে যে ব্যবহারকারী সংগ্রহের মাধ্যমে পৃষ্ঠাগুলি দু'বার এন্ট্রি দেখেন। (যা নিজে থেকে এটিও একটি দরকারী তথ্য: এটি ব্যবহারকারীর বলছে সংগ্রহটি পরিবর্তন হয়েছে)
ইউজিন বেরেসভস্কি

20
413 হ'ল "অনুরোধ সত্তা অনেক বড়", "অনুরোধ সত্তা খুব বড় নয়"। এর অর্থ আপনার অনুরোধের আকার, উদাহরণস্বরূপ কোনও ফাইল আপলোড করার সময় সার্ভার প্রক্রিয়া করতে ইচ্ছুকদের চেয়ে বড়। সুতরাং এটির জন্য এটি ব্যবহার করা পুরোপুরি উপযুক্ত বলে মনে হয় না।
ব্যবহারকারী 247702

@ মুহম্মদ আমি জানি এটি একটি পুরানো প্রশ্ন তবে যদি সংগ্রহের ETag হয় সর্বাধিক সংশোধিত সংস্থার ETag হয় তবে সংগ্রহের কোনও সংস্থান সংশোধন করার সময় যদি ম্যাচ শিরোনামটির কোন মান ব্যবহার করা উচিত? সংগ্রহের সাথে প্রত্যাবর্তিত ইটাগের মানটি ব্যবহার করা ভুল কারণ ক্লায়েন্ট সংস্থানটি পরিবর্তন করতে সক্ষম হবেন এমনকি তিনি সংস্থানটির সর্বশেষ অবস্থাটি দেখেন না।
মিকেল মারাচে

8
আমি ব্যবহার সম্পর্কে দৃ strongly়ভাবে একমত 413। এটি একটি ত্রুটি কোড যার অর্থ ক্লায়েন্ট এমন কিছু প্রেরণ করছে যা আকারের কারণে সার্ভারটি অস্বীকার করে। প্রায় অন্য উপায় না! দেখুন tools.ietf.org/html/rfc7231#section-6.5.11 (নোট যে এটা বলে অনুরোধ পে লোড। না প্রতিক্রিয়া পে লোড)!
Exhuma

7

আপনি এখনও আসতে পারেন Accept-Rangesএবং Content-Rangesএকটি সঙ্গে 200প্রতিক্রিয়া কোড। এই দুটি প্রতিক্রিয়া শিরোনাম আপনাকে প্রতিক্রিয়া কোড স্পষ্টভাবে সরবরাহ করে একই তথ্য অনুমান করতে পর্যাপ্ত তথ্য দেয় 206

আমি Rangeপৃষ্ঠাগুলি জন্য ব্যবহার করব , এবং এটি কেবল 200একটি সমতল জন্য একটি ফিরে দিতে GET

এই 100% RESTful মতানুযায়ী এবং কোনো আরো কঠিন ব্রাউজিং দেখা যায় না।

সম্পাদনা: আমি এ সম্পর্কে একটি ব্লগ পোস্ট লিখেছি: http://otac0n.com/blog/2012/11/21/range-header-i-choose-you.html


5

যদি প্রতিক্রিয়াগুলির একাধিক পৃষ্ঠাগুলি থাকে এবং আপনি একবারে পুরো সংগ্রহটি দিতে চান না, তার মানে কি একাধিক পছন্দ আছে?

একটি অনুরোধে /db/questions, শিরোনামগুলির 300 Multiple Choicesসাথে ফিরে Linkআসুন যা প্রতিটি পৃষ্ঠায় কীভাবে যেতে হবে সেই সাথে URL এর তালিকা সহ একটি JSON অবজেক্ট বা এইচটিএমএল পৃষ্ঠা উল্লেখ করে।

Link: <>; rel="http://paged.collection.example/relation/paged"
Link: <>; rel="http://paged.collection.example/relation/paged"
...

Linkফলাফলের প্রতিটি পৃষ্ঠার জন্য আপনার একটি শিরোনাম থাকবে (খালি স্ট্রিং মানে বর্তমান ইউআরএল, এবং প্রতিটি পৃষ্ঠার জন্য ইউআরএল একই, কেবলমাত্র বিভিন্ন ব্যাপ্তির সাথে অ্যাক্সেস করা), এবং সম্পর্কটি আসন্ন Linkবৈশিষ্ট অনুসারে একটি কাস্টম হিসাবে সংজ্ঞায়িত করা হয়েছে । এই সম্পর্কটি আপনার রীতিনীতি 266বা আপনার লঙ্ঘনের ব্যাখ্যা করবে 206। এই সমস্ত শিরোনামগুলি আপনার মেশিন-পঠনযোগ্য সংস্করণ, যেহেতু আপনার সমস্ত উদাহরণগুলির যে কোনওভাবেই বোঝার ক্লায়েন্টের প্রয়োজন।

(আপনি যদি "রেঞ্জ" রুটের সাথে আঁকড়ে থাকেন তবে আমি বিশ্বাস করি যে আপনার নিজের 2xxরিটার্ন কোডটি যেমন আপনি বর্ণনা করেছেন, এখানেই সেরা আচরণ হবে You're আপনি আপনার অ্যাপ্লিকেশনগুলির জন্য এটি করার আশা করছেন এবং এই জাতীয় ["এইচটিটিপি স্থিতি কোডগুলি এক্সটেনসিবল।" "], এবং আপনার ভাল কারণ রয়েছে))

300 Multiple Choicesবলছেন যে আপনি ব্যবহারকারী এজেন্টের বাছাইয়ের জন্য একটি দেহও সরবরাহ করতে হবে। যদি আপনার ক্লায়েন্ট বুঝতে পারে তবে এটি Linkশিরোনাম ব্যবহার করা উচিত । যদি এটি কোনও ব্যবহারকারী নিজে নিজেই ব্রাউজ করছেন তবে সম্ভবত কোনও বিশেষ "পেজড" মূল সংস্থানটির লিঙ্কযুক্ত একটি HTML পৃষ্ঠা যা ইউআরএলের উপর ভিত্তি করে সেই নির্দিষ্ট পৃষ্ঠাটির রেন্ডারিং পরিচালনা করতে পারে? /humanpage/1/db/questionsবা এর মতো ঘৃণ্য কিছু?


রিচার্ড লেভাসিউরের পোস্টে দেওয়া মন্তব্যগুলি আমাকে একটি অতিরিক্ত বিকল্পের কথা মনে করিয়ে দেয়: Acceptশিরোনাম (বিভাগ 14.1)। ফিরে যখন ও এম্বেড স্পেকটি বেরিয়ে এসেছিল, আমি ভাবলাম কেন এটি সম্পূর্ণরূপে এইচটিটিপি ব্যবহার করে করা হয়নি, এবং সেগুলি ব্যবহার করে একটি বিকল্প লিখেছিলাম।

প্রাথমিক নেভ HTTP এর জন্য 300 Multiple Choices, Linkশিরোনাম এবং এইচটিএমএল পৃষ্ঠা রাখুন GET, তবে ব্যাপ্তি ব্যাপ্তির পরিবর্তে আপনার নতুন পেজিং সম্পর্ককে শিরোনামটির ব্যবহার সংজ্ঞায়িত করতে হবে Accept। আপনার পরবর্তী এইচটিটিপি অনুরোধটি দেখতে এরকম হতে পারে:

GET /db/questions HTTP/1.1
Host: paged.collection.example
Accept: application/json;PagingSpec=1.0;page=1

Acceptহেডার আপনি যে প্রকার (আপনার পৃষ্ঠার নম্বর) জন্য একটি গ্রহণযোগ্য বিষয়বস্তুর প্রকার (আপনার তাদেরকে JSON আগমন), প্লাস প্রসার্য পরামিতি নির্ধারণ করতে দেয়। আমার ও এম্বেড লিখনআপ থেকে আমার নোটগুলিতে রিফিং করা (এটি এখানে লিঙ্ক করতে পারে না, আমি এটি আমার প্রোফাইলে তালিকাবদ্ধ করব), আপনি pageপ্যারামিটারটির অর্থ কী তা নতুন করে সংজ্ঞায়িত করতে হবে তবে আপনি খুব স্পষ্ট হতে পারেন এবং একটি স্পেস / সম্পর্কের সংস্করণ সরবরাহ করতে পারেন here ভবিষ্যতে


1
+1 লিঙ্ক শিরোনাম, তবে আমি সাধারণ, পূর্ব, পরবর্তী, শেষ rels, পাশাপাশি আরএফসি 5005 এর পূর্ব-সংরক্ষণাগার, পরবর্তী-সংরক্ষণাগার, এবং বর্তমানেরও সুপারিশ করব।
জোসেফ হলস্টেন

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

4

সম্পাদনা:

আরও কিছুটা চিন্তা করার পরে, আমি একমত হতে আগ্রহী যে রেঞ্জ শিরোনাম পৃষ্ঠাগুলির জন্য উপযুক্ত নয়। যুক্তিটি হ'ল, রেঞ্জের শিরোনামটি অ্যাপ্লিকেশনগুলির জন্য নয়, সার্ভারের প্রতিক্রিয়ার জন্য। আপনি যদি 100 মেগাবাইট ফলাফল পরিবেশন করেন তবে সার্ভার (বা ক্লায়েন্ট) একসাথে কেবল 1 মেগাবাইট প্রসেস করতে পারে, ভাল, রেঞ্জের শিরোলেখটি কী তা বোঝায়।

আমি এই মতামতও করছি যে সংস্থানগুলির একটি উপসেট তার নিজস্ব সংস্থান (রিলেশনাল বীজগণিতের অনুরূপ) so তাই এটি ইউআরএলে উপস্থাপনের যোগ্য serve

সুতরাং মূলত, আমি শিরোনাম ব্যবহার সম্পর্কে আমার মূল উত্তরটি (নীচে) পুনরায় পাঠ করি।


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

আপনার মূলত পরস্পরবিরোধী লক্ষ্য রয়েছে - লোকেরা তাদের ব্রাউজারটি অন্বেষণ করতে ব্যবহার করুন (যা সহজেই কাস্টম শিরোনামগুলিকে মঞ্জুরি দেয় না) বা লোকেদের এমন একটি বিশেষ ক্লায়েন্ট ব্যবহার করতে বাধ্য করুন যা শিরোনাম সেট করতে পারে (যা তাদের অন্বেষণ করতে দেয় না)।

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

অবশ্যই, এই ধরণের জিনিসটির জন্য URL- এ সমস্ত প্রয়োজনীয় রাষ্ট্র থাকা উচিত কিনা তা নিয়েও বিতর্ক রয়েছে। শিরোনাম ব্যবহার করে ব্যাপ্তি সুনির্দিষ্ট করে কিছুকে "বিশ্রামহীন" হিসাবে বিবেচনা করা যেতে পারে।

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


উত্তরের জন্য ধন্যবাদ. আমি বিষয়টি নিয়ে ভাবলাম, তবে দ্বিতীয় মতামত পাওয়ার আশা করছিলাম। শিরোনাম যুক্তিগুলির জন্য একটি পয়েন্টার রাখতে চান?
কার্ল গের্তিন

এখানে শুধুমাত্র একটি আমি ঠিকা আছে (মন্তব্য আলোচনা দেখুন) আছে: barelyenough.org/blog/2008/05/versioning-rest-web-services অন্য সাইট নির্ধারণে .whatever .json, .xml, এর রুবি ব্যবহারের ঘিরে একটি অনুরোধের সামগ্রী প্রকার। উদাহরণগুলির মধ্যে কয়েকটি: * ভাষা - এটি ইউআরএলে রাখার অর্থ লিঙ্কটি অন্য কোনও দেশে প্রেরণ করার অর্থ এটি ভুল ভাষায় রেন্ডার হবে। * পৃষ্ঠা রচনা - এটি শিরোনামে রাখার অর্থ আপনি যা দেখছেন তার সাথে লোকেরা লিঙ্ক করতে পারবেন না
রিচার্ড লেভাসিউর

* বিষয়বস্তুর ধরণ: ভাষা এবং পৃষ্ঠাগুলি সমস্যাগুলির সংমিশ্রণ - এটি যদি ইউআরএল হয় তবে ক্লায়েন্ট যদি সেই সামগ্রীর প্রকারটিকে সমর্থন না করে (যেমন, একটি .জ্যাক্স এবং একটি। html এক্সটেনশন)? বিপরীতে, ইউআরএলতে সামগ্রী-প্রকার ব্যতীত আপনি একই প্রতিনিধিত্ব দেওয়া নিশ্চিত করতে পারবেন না। "নতুন এজাক্স সাইট! উদাহরণ.com/cool.ajax" বনাম "শীতল নিবন্ধটি এখানে: উদাহরণ.com/article.ajax#id=123"।
রিচার্ড লেভাসিউর

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

আমি উত্সটি সুনির্দিষ্টভাবে জিজ্ঞাসা করার জন্য বিকল্প হিসাবে একটি URL এ ক্যোয়ারী স্ট্রিংয়ের কথা ভাবি।
wprl

3

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

আছে অ্যাটম প্রকাশনা প্রোটোকল যা সংজ্ঞায়িত সংগ্রহ মডেল এবং বিশ্রাম অপারেশন প্লাস আপনি ব্যবহার করতে পারেন জন্য RFC 5005 - ফিড পেজিং এবং সংরক্ষণ বড় সংগ্রহের মাধ্যমে পৃষ্ঠায়।

অ্যাটম এক্সএমএল থেকে জেএসএন সামগ্রীগুলিতে স্যুইচ করা ধারণাটিকে প্রভাবিত করবে না।


3

আমি মনে করি যে এখানে আসল সমস্যাটি হ'ল সেই অনুমানের মধ্যে কিছুই নেই যা 413 - রিকোয়েস্টড সত্তা খুব বড় সংখ্যার মুখোমুখি হয়ে কীভাবে স্বয়ংক্রিয় পুনঃনির্দেশগুলি করতে হয় তা আমাদের জানায়।

আমি সম্প্রতি এই একই সমস্যার সাথে লড়াই করছি এবং আমি রেস্টস্টুল ওয়েব সার্ভিস বইতে অনুপ্রেরণার সন্ধান করেছি । ব্যক্তিগতভাবে আমি শিরোনাম প্রয়োজনীয়তার কারণে 206 যথাযথ বলে মনে করি না। আমার চিন্তাভাবনাগুলিও আমাকে ৩০০ এ নিয়ে গেছে, তবে আমি ভেবেছিলাম যে এটি বিভিন্ন মাইম-ধরণের জন্য আরও বেশি, তাই আমি রিচার্ডসন এবং রুবির অ্যাপেন্ডিক্স বি, পৃষ্ঠা 37 377 পৃষ্ঠায় এই বিষয়ে কী বলেছিলাম তা সন্ধান করলাম They তারা পরামর্শ দেয় যে সার্ভারটি কেবল পছন্দসইটি বেছে নেবে উপস্থাপনা এবং 200 এর সাথে এটি প্রেরণ করুন, মূলত এটি 300 হওয়া উচিত এমন ধারণাটি উপেক্ষা করে।

এটি পরমাণু থেকে আমাদের পরবর্তী সংস্থাগুলির লিঙ্কগুলির ধারণাটিও নিয়ে যায়। আমি যে সমাধানটি প্রয়োগ করেছি তা হ'ল আমি যে জেসন ম্যাপটি পাঠাচ্ছিলাম তার "পরবর্তী" এবং "পূর্ববর্তী" কীগুলি যুক্ত করা এবং এটি দিয়ে শেষ করা উচিত।

পরে আমি ভাবতে শুরু করলাম সম্ভবত করণীয় জিনিসটি একটি 307 প্রেরণ করা হবে - কোনও লিঙ্কে অস্থায়ী পুনঃনির্দেশ করুন যা / ডিবি / প্রশ্নগুলি / 1,25 এর মতো কিছু হবে - যা মূল ইউআরআইটিকে ক্যানোনিকাল রিসোর্সের নাম হিসাবে ছেড়ে দেয়, তবে এটি আপনাকে পেয়ে যায় একটি যথাযথ নাম অধীনস্থ সম্পদ। এই আচরণটি আমি একটি 413 এর বাইরে দেখতে চাই, তবে 307 মনে হয় এটি একটি ভাল আপস। যদিও কোডে আসলে এটি চেষ্টা করে দেখেনি। এর চেয়ে আরও ভাল আর কী হবে সর্বাধিক জিজ্ঞাসিত প্রশ্নগুলির আসল আইডি সম্বলিত একটি URL এ পুনঃনির্দেশ করার জন্য। উদাহরণস্বরূপ, যদি প্রতিটি প্রশ্নের একটি পূর্ণসংখ্যা আইডি থাকে এবং সিস্টেমে 100 টি প্রশ্ন রয়েছে এবং আপনি দশটি অতি সম্প্রতি দেখাতে চান, / ডিবি / প্রশ্নের কাছে অনুরোধগুলি / ডিবি / প্রশ্নগুলি / 100,91 থেকে 307 'হওয়া উচিত

এটি একটি খুব ভাল প্রশ্ন, এটি জিজ্ঞাসা করার জন্য ধন্যবাদ। আপনি আমার জন্য নিশ্চিত করেছেন যে আমি এটি নিয়ে চিন্তাভাবনা করে দিন কাটিয়েছি।


303 এর চেয়ে 307 এর চেয়ে ভাল হবে 30 307 সূচিত করে যে ক্লায়েন্টের প্রত্যাশা অনুযায়ী মূল URL টি শীঘ্রই প্রতিক্রিয়া শুরু করবে।
নিকোলাস শ্যাঙ্কস

আরএফসি 7231 এইচটিটিপি স্থিতি কোড 413 কে পেওলড খুব বড় হিসাবে উল্লেখ করেছে এবং এই কোডটি অনুরোধের আকারের সাথে সম্ভাব্য প্রতিক্রিয়া আকারের সাথে সম্পর্কিত নয়।
beawolf

1

আপনি Rangeশিরোনাম সনাক্ত করতে পারেন এবং উপস্থিত থাকলে ডোজো নকল করতে পারেন এবং এটি যদি না থাকে তবে নকল করুন। আমার কাছে মনে হচ্ছে এটি ব্যবহারের কেসগুলি খুব সুন্দরভাবে বিভক্ত করে। আপনি যদি আপনার অ্যাপ্লিকেশন থেকে একটি REST ক্যোয়ারিতে সাড়া দিচ্ছেন, আপনি এটি একটি Rangeশিরোনাম দিয়ে ফর্ম্যাট করার প্রত্যাশা করছেন । আপনি যদি কোনও নৈমিত্তিক ব্রাউজারে সাড়া দিচ্ছেন, তবে আপনি পেজিং লিঙ্কগুলি ফিরিয়ে দিলে এটি সরঞ্জামটিকে সংগ্রহটি অন্বেষণ করার একটি সহজ উপায় সরবরাহ করতে দেয়।


1

রেঞ্জ হেডারের বড় সমস্যাগুলির মধ্যে একটি হ'ল প্রচুর কর্পোরেট প্রক্সি সেগুলি ফিল্টার করে দেয়। আমি পরিবর্তে একটি ক্যোয়ারী প্যারামিটার ব্যবহার করার পরামর্শ দেব।


1

'প্রকাশিত হলে rfc723x , অনিবন্ধিত পরিসীমা ইউনিট বৈশিষ্ট একটি সুনির্দিষ্ট সুপারিশ বিরুদ্ধে যানRfc7233 বিবেচনা করুন (আরএফসি 2616 হ্রাসকারী):

" নতুন পরিসীমা ইউনিটগুলি আইএএনএ-তে নিবন্ধিত হওয়া উচিত " ( এইচটিটিপি রেঞ্জ ইউনিট রেজিস্ট্রি সহ একটি রেফারেন্স সহ )।


0

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


0

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

সুতরাং প্রশ্নগুলি যদি এর মতো হয়:

<questions> <question index=1></question> <question index=2></question> ... </questions>

নতুন ধরণটি এরকম কিছু হতে পারে:

<questionPage> <startIndex>50</startIndex> <returnedCount>10</returnedCount> <totalCount>1203</totalCount> <questions> <question index=50></question> <question index=51></question> .. </questions> <questionPage>

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

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