কখন @ কিউরিপ্যারাম বনাম @ পাথপারাম ব্যবহার করবেন


276

ইতিমধ্যে এখানে জিজ্ঞাসা করা প্রশ্নটি আমি জিজ্ঞাসা করছি না: @ পাথপরাম এবং @ কিউয়ারিপামের মধ্যে পার্থক্য কী?

এটি একটি "সেরা অনুশীলন" বা সম্মেলনের প্রশ্ন।

আপনি কখন @PathParamবনাম ব্যবহার করবেন @QueryParam?

আমি কী ভাবতে পারি যে সিদ্ধান্তটি হতে পারে তথ্যের প্যাটার্নকে পৃথক করতে দু'জনকে ব্যবহার করা। আমাকে আমার এলটিপিওর নীচে চিত্রিত করুন - নিখুঁত পর্যবেক্ষণের চেয়ে কম।

পাথপার্ম ব্যবহার তথ্য বিভাগের জন্য সংরক্ষণ করা যেতে পারে, যা তথ্য গাছের একটি শাখায় খুব সুন্দরভাবে পড়ে। পাথপারাম সত্তা শ্রেণি শ্রেণিবিন্যাসের নিচে ড্রিল করতে ব্যবহৃত হতে পারে।

অন্যদিকে, কোয়েরিপ্যারাম কোনও শ্রেণীর উদাহরণ সনাক্ত করার জন্য বৈশিষ্ট্য নির্দিষ্ট করার জন্য সংরক্ষণ করা যেতে পারে।

উদাহরণ স্বরূপ,

  • /Vehicle/Car?registration=123
  • /House/Colonial?region=newengland

/category?instance

@GET
@Path("/employee/{dept}")
Patient getEmployee(@PathParam("dept")Long dept, @QueryParam("id")Long id) ;

বনাম /category/instance

@GET
@Path("/employee/{dept}/{id}")
Patient getEmployee(@PathParam("dept")Long dept, @PathParam("id")Long id) ;

বনাম ?category+instance

@GET
@Path("/employee")
Patient getEmployee(@QueryParam("dept")Long dept, @QueryParam("id")Long id) ;

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


উত্তর:


245

REST এর মতো স্ট্যান্ডার্ড নাও হতে পারে তবে সাধারণ REST ডকুমেন্টেশন এবং ব্লগ পোস্টগুলি পড়া আপনার এপিআই ইউআরএল গঠনের ভাল উপায়ের জন্য কিছু গাইডলাইন দেয়। বেশিরভাগ বিশ্রামের এপিআইগুলিতে কেবলমাত্র সংস্থানগুলির নাম এবং সংস্থান আইডি থাকে। যেমন:

/departments/{dept}/employees/{id}

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

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


73
" আমি পথ যে কোন প্রয়োজনীয় পরামিতি নির্বাণ চাই সুপারিশ, এবং যে কোনো ঐচ্ছিক প্যারামিটার অবশ্যই কোয়েরি স্ট্রিং পরামিতি হওয়া উচিত। আপ + 1 অঙ্গুষ্ঠ হ্যাঁ Def -"
smeeb

1
এই কনভেনশনটিও পুট অনুরোধের জন্যও ব্যবহার করা উচিত, যাক আমরা বলতে পারি যে আমরা ডিবি সত্তার নির্দিষ্ট সংস্করণটি আপডেট করতে চাই, ইউআরআই হতে হবে PUT /depatments/{dept}/employees/{id}/{version}এবং সংস্করণটি alচ্ছিক হওয়া উচিত বা PUT /depatments/{dept}/employees/{id}?version=12সংস্করণটি
শুভেচ্ছা

এক্ষেত্রে, আমি পুনঃনির্দেশটি চাই: - PUT /depatments/{dept}/employees/{id}/versions/{version}একটি নির্বাচিত সংস্করণ POST /depatments/{dept}/employees/{id}/versionsসহ একটি কর্মচারী তৈরি করতে
গিলাইউম ভৈভার্ট

90

এই আমি কি কি.

যদি আইডির উপর ভিত্তি করে কোনও রেকর্ড পুনরুদ্ধার করার মতো পরিস্থিতি দেখা যায়, উদাহরণস্বরূপ আপনার যে কর্মচারীর আইডি 15 রয়েছে তার বিবরণ নেওয়া দরকার, তবে আপনার @PathParam এর সাহায্যে সংস্থান থাকতে পারে।

GET /employee/{id}

যদি এমন কোনও পরিস্থিতি দেখা যায় যেখানে আপনাকে সমস্ত কর্মচারীর বিশদ জানতে হবে তবে একসাথে মাত্র 10 জন, আপনি ক্যোয়ারী প্যারাম ব্যবহার করতে পারেন

GET /employee?start=1&size=10

এটি বলে যে কর্মচারী আইডি 1 শুরু করে দশটি রেকর্ড পান।

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


'@ পাথপারাম' এবং '@ কিউয়ারপ্যারাম' উভয়ই একই কার্যকারিতা সরবরাহ করে? 'কিউয়ারপ্যারাম' কি একই জিনিস লেখার অন্য একটি উপায়?
habষভ আগরওয়াল

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

@ Habষভ আগরওয়াল আরও তথ্যের জন্য, আপনি আমার নিবন্ধটি রেস্ট এপিআই সেরা অভ্যাসগুলি
অরুণ বি চন্দ্রশেকরন

43

আমি মনে করি যে যদি প্যারামিটারটি একটি নির্দিষ্ট সত্তা সনাক্ত করে তবে আপনার একটি পাথ ভেরিয়েবল ব্যবহার করা উচিত। উদাহরণস্বরূপ, আমার ব্লগে সমস্ত পোস্ট পেতে অনুরোধ করছি

GET: myserver.com/myblog/posts

আইডি = 123 সহ পোস্টটি পেতে, আমি অনুরোধ করব

GET: myserver.com/myblog/posts/123

তবে আমার পোস্টগুলির তালিকা ফিল্টার করতে এবং 1 জানুয়ারী, 2013 থেকে সমস্ত পোস্ট পেতে, আমি অনুরোধ করব

GET: myserver.com/myblog/posts?since=2013-01-01

প্রথম উদাহরণে "পোস্টগুলি" একটি নির্দিষ্ট সত্তা (ব্লগ পোস্টগুলির সম্পূর্ণ সংগ্রহ) সনাক্ত করে। দ্বিতীয় উদাহরণে, "123" একটি নির্দিষ্ট সত্তা (একটি ব্লগ পোস্ট) উপস্থাপন করে। তবে শেষ উদাহরণে, "2013-01-01 =" থেকে প্যারামিটারটি কোনও নির্দিষ্ট সত্তা নয় পোস্টগুলি ফিল্টার করার জন্য একটি অনুরোধ। পৃষ্ঠাসমূহ এবং ক্রম অর্ডার করা আরও ভাল উদাহরণ হবে, যেমন

GET: myserver.com/myblog/posts?page=2&order=backward

আশা করি এইটি কাজ করবে. :-)


8

আমি ব্যক্তিগতভাবে "যদি কোনও ইউআরএল বুকমার্ক করতে ব্যবহারকারীর পক্ষে এটি বোঝা যায় যা এই পরামিতিগুলিকে অন্তর্ভুক্ত করে থাকে তবে পাথপার্ম ব্যবহার করুন"।

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

যদি ইউআরএল-এ পাস করা কোনও প্যারামিটার পৃষ্ঠার বিন্যাস / সামগ্রী পরিবর্তন করতে পারে তবে আমি এটিকে কোয়েরিপ্যারাম হিসাবে ব্যবহার করব। উদাহরণস্বরূপ, যদি প্রোফাইল ইউআরএল এমন কোনও প্যারামিটার সমর্থন করে যা ব্যবহারকারী ইমেলটি প্রদর্শন করবে কিনা তা নির্দিষ্ট করে তবে আমি এটিকে ক্যোয়ারী পরম হিসাবে বিবেচনা করব। (আমি জানি, যুক্তিযুক্তভাবে, আপনি বলতে পারেন যে এটি &noemail=1বা যে কোনও প্যারামিটারটি একটি প্যারাম হিসাবে ব্যবহার করা যেতে পারে এবং 2 টি পৃথক পৃষ্ঠা উত্পন্ন করে - এটিতে ইমেলের সাথে একটি, এটি ছাড়াই একটি - তবে যৌক্তিকভাবে এটি তেমনটি নয়: এটি নির্দিষ্ট বৈশিষ্ট্য প্রদর্শিত বা ছাড়াই এখনও একই পৃষ্ঠা।

আশা করি এটি সহায়তা করে - আমি ব্যাখ্যাটি প্রশংসনীয় কিছুটা अस्पष्ट হতে পারি :)


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

7

আপনি ফিল্টারিংয়ের জন্য কোয়েরি পরামিতি এবং গোষ্ঠীকরণের জন্য পাথ পরামিতি ব্যবহার করতে পারেন। পাথপ্যারাম বা কোয়েরিপ্যারাম কখন ব্যবহার করবেন সে সম্পর্কে নিম্নলিখিত লিঙ্কটিতে ভাল তথ্য রয়েছে


5

এটি একটি খুব আকর্ষণীয় প্রশ্ন।

আপনি উভয়টিই ব্যবহার করতে পারেন, এই বিষয় সম্পর্কে কোনও কঠোর নিয়ম নেই, তবে ইউআরআই পাথ ভেরিয়েবলগুলি ব্যবহারের কিছু সুবিধা রয়েছে:

  • ক্যাশে : ইন্টারনেটে বেশিরভাগ ওয়েব ক্যাশে পরিষেবাদি যখন কোয়েরি পরামিতিগুলি থাকে তখন অনুরোধটিকে ক্যাচ করে না। তারা এটি করে কারণ সার্ভারে ডেটা পরিবর্তন করার জন্য জিইটি অনুরোধ ব্যবহার করে প্রচুর আরপিসি সিস্টেম রয়েছে (ব্যর্থ !! পেতে হবে একটি নিরাপদ পদ্ধতি হতে হবে)

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

  • হায়ারার্কি : পাথ ভেরিয়েবলগুলি শ্রেণিবিন্যাস: / শহর / রাস্তার / স্থানটি উপস্থাপন করতে পারে

এটি ব্যবহারকারীকে ডেটা গঠনের বিষয়ে আরও তথ্য দেয় information

তবে যদি আপনার ডেটার কোনও শ্রেণিবিন্যাস সম্পর্কিত সম্পর্ক না থাকে তবে আপনি কমা বা আধা-কোলন ব্যবহার করে পাথ ভেরিয়েবলগুলি ব্যবহার করতে পারেন:

/ শহর / দ্রাঘিমাংশ, অক্ষাংশ

একটি নিয়ম হিসাবে, পরামিতিগুলির ক্রমের ক্ষেত্রে কমা ব্যবহার করুন, অর্ডার দেওয়ার পরে কোনও অর্ডার-কোলন ব্যবহার করুন:

/ IconGenerator / লাল; নীল; সবুজ

এই কারণগুলি ছাড়াও, কিছু ক্ষেত্রে রয়েছে যখন ক্যোয়ারিং স্ট্রিং ভেরিয়েবলগুলি ব্যবহার করা খুব সাধারণ:

  • আপনার যখন ব্রাউজারের প্রয়োজন হয় তখন স্বয়ংক্রিয়ভাবে ইউআরআইতে এইচটিএমএল ফর্ম ভেরিয়েবলগুলি রাখুন
  • আপনি যখন অ্যালগরিদম নিয়ে কাজ করছেন। উদাহরণস্বরূপ, গুগল ইঞ্জিন কোয়েরি স্ট্রিংগুলি ব্যবহার করে:

http: // www.google.com/search?q=rest

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


2

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

আরও গ্রহণকারী এখানে তালিকাভুক্ত করা হয়


2

উইকিপিডিয়া থেকে: ইউনিফর্ম রিসোর্স লোকেটার

একটি পাথ , যা ডেটা ধারণ করে, সাধারণত শ্রেণিবদ্ধ আকারে সংগঠিত হয় , যা স্ল্যাশ দ্বারা পৃথক করা বিভাগগুলির ক্রম হিসাবে উপস্থিত হয়।

একটি alচ্ছিক ক্যোয়ারী , পূর্ববর্তী অংশ থেকে একটি প্রশ্ন চিহ্ন (?) দ্বারা পৃথক করা হয়েছে, যেখানে নন-শ্রেণিবদ্ধ তথ্যের কোয়েরি স্ট্রিং রয়েছে ।

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

পূর্ববর্তী একজন মন্তব্যকারী লিখেছেন,

আমি মনে করি যে যদি প্যারামিটারটি একটি নির্দিষ্ট সত্তা সনাক্ত করে তবে আপনার একটি পাথ ভেরিয়েবল ব্যবহার করা উচিত।

আরেকজন লিখেছেন,

আইডির ভিত্তিতে পুনরুদ্ধারের জন্য @ পাথপারাম ব্যবহার করুন। ফিল্টারটির জন্য ব্যবহারকারী @ কিউরিপ্যারাম বা আপনার কাছে বিকল্পগুলির কোনও নির্দিষ্ট তালিকা রয়েছে যা ব্যবহারকারী পাস করতে পারে।

আরেকটি,

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

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

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

প্রতিটি অনুরোধের জন্য আমরা URL সহ মৌলিকভাবে বিভিন্ন ধরণের প্রশ্নের উত্তর দিতে পারি:

  1. আমরা কোন ধরণের রেকর্ড / জিনিস অনুরোধ / পরিবেশন করছি?
  2. আমরা কোনটি (গুলি) এর জন্য আগ্রহী?
  3. আমরা কীভাবে তথ্য / রেকর্ড উপস্থাপন করতে চাই?

Q1 প্রায় অবশ্যই সবচেয়ে ভাল পথ দ্বারা আচ্ছাদিত বা পথপ্যারামগুলি দ্বারা আবৃত। কিউ 3 (যা সম্ভবত নির্বিচারে অর্ডার করা alচ্ছিক পরামিতি এবং ডিফল্ট মানগুলির সেটের মাধ্যমে নিয়ন্ত্রণ করা হয়); প্রায় অবশ্যই কোয়েরিপ্যারামস দ্বারা আচ্ছাদিত। প্রশ্ন 2: এটি নির্ভর করে ...


2

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

/departments/{id}/employees
/employees?dept=id

ক্যোয়ারী প্যারামিটারগুলি শ্রেণিবদ্ধ এবং অ-স্তরক্রমিক সাবসেটিং সমর্থন করতে পারে; পাথ প্যারামিটারগুলি কেবল শ্রেণিবদ্ধ।

সংস্থানগুলি একাধিক শ্রেণিবিন্যাস প্রদর্শন করতে পারে। সংক্ষিপ্ত পথগুলি সমর্থন করুন যদি আপনি শ্রেণিবদ্ধ সীমানা অতিক্রম করে এমন বিস্তৃত সাব-সংগ্রহগুলি অনুসন্ধান করছেন।

/inventory?make=toyota&model=corolla
/inventory?year=2014

অরথোগোনাল হায়ারারচিগুলি একত্রিত করতে ক্যোয়ারী প্যারামিটার ব্যবহার করুন।

/inventory/makes/toyota/models/corolla?year=2014
/inventory/years/2014?make=toyota&model=corolla
/inventory?make=toyota&model=corolla&year=2014

রচনার ক্ষেত্রে কেবলমাত্র পাথ প্যারামিটার ব্যবহার করুন - যখন কোনও সংস্থান তার পিতামাতার কাছ থেকে তালাকপ্রাপ্ত হওয়া বোঝায় না এবং সমস্ত শিশুদের বিশ্বব্যাপী সংগ্রহ নিজেই কোনও দরকারী সংস্থান নয়।

/words/{id}/definitions
/definitions?word=id   // not useful

1

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


1

আমি কখন ব্যবহার করব @Queryparamএবং এর নিচে একটি এক্সপামল দিচ্ছি@pathparam

উদাহরণস্বরূপ আমি এক পুনরায় স্থান নিচ্ছি carResourceক্লাস

আপনি করতে চান আপনার resouce পদ্ধতি manadatory এর ইনপুট তারপর যেমন PARAM টাইপ ব্যবহার @pathaparam, যদি আপনার সম্পদ পদ্ধতির ইনপুট ঐচ্ছিক হওয়া উচিত তারপর রাখা হিসাবে PARAM টাইপ @QueryParamPARAM

@Path("/car")
class CarResource
{
    @Get
    @produces("text/plain")
    @Path("/search/{carmodel}")
    public String getCarSearch(@PathParam("carmodel")String model,@QueryParam("carcolor")String color) {
        //logic for getting cars based on carmodel and color
            -----
        return cars
    }
}

এই পুনঃসূত্র জন্য অনুরোধ পাস

req uri ://address:2020/carWeb/car/search/swift?carcolor=red

আপনি যদি এইভাবে রেক দেন তবে রৌসগুলি ভিত্তিক গাড়ির মডেল এবং রঙ দেয়

 req uri://address:2020/carWeb/car/search/swift

আপনি যদি এর মতো রেক দেন তবে রিসোস পদ্ধতিটি কেবল সুইফ্ট মডেল ভিত্তিক গাড়ি প্রদর্শন করবে

req://address:2020/carWeb/car/search?carcolor=red

আপনি যদি এটির মতো দেন তবে @pathPramআমরা রিসোর্সনটফাউন্ড ব্যতিক্রম পাব কারণ গাড়ী রৌসুক ক্লাসে আমি কারমোডেলকে ঘোষণা করলাম যে এটি আপনাকে অবশ্যই করা উচিত এবং কারমোডেলকে রেইউ ইউরি হিসাবে দেওয়া উচিত অন্যথায় এটি রিকুয়েসটি পাস করতে পারবে না তবে আপনি রঙটি পাস না করলে এছাড়াও এটি রেকটিকে রিসোর্সে পাস করবে কেন রঙ এটি রঙের @quetyParamমধ্যে inচ্ছিক কারণ।


0
  1. @QueryParam ডিফল্ট মান টীকা সহ সুবিধামত ব্যবহার করা যেতে পারে যাতে কোনও কোয়েরি প্যারামিটার পাস না হয়ে আপনি নাল পয়েন্টার ব্যতিক্রম এড়াতে পারেন।

আপনি যখন জিইটি অনুরোধ থেকে ক্যোয়ারী প্যারামিটারগুলি বিশ্লেষণ করতে চান, আপনি কেবল সেই পদ্ধতিতে প্রাসঙ্গিক প্যারামিটারটি সংজ্ঞায়িত করতে পারেন যা জিইটি অনুরোধটি পরিচালনা করবে এবং এগুলি @QueryParamটীকা সহ এনটেট করবে to

  1. @PathParamইউআরআই মানগুলি বের করে এবং এতে মেলে @Path। এবং তাই ইনপুট প্যারামিটার পায়। 2.1 @PathParamএকাধিক হতে পারে এবং পদ্ধতি আর্গুমেন্টে সেট করা হয়

    @Path("/rest")
    public class Abc {
    
        @GET
        @Path("/msg/{p0}/{p1}")
        @Produces("text/plain")
        public String add(@PathParam("p0") Integer param1, @PathParam("p1")  Integer param2 )
        {
            return String.valueOf(param1+param2);
        }
    } 

উপরের উদাহরণে
http://localhost:8080/Restr/rest/msg/{p0}/{p1},
p0ম্যাচ param1এবং p1ম্যাচ param2। সুতরাং ইউআরআইয়ের জন্য
http://localhost:8080/Restr/rest/msg/4/6,
আমরা ফলাফলটি পাই 10

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

@QueryParam : জিইটি অনুরোধ গ্রহণ করে এবং ক্যোয়ারী স্ট্রিং থেকে ডেটা পড়ে।

@FormParam: পোষ্ট অনুরোধ গ্রহণ করে এবং এইচটিএমএল ফর্ম বা মিডিয়ার কোনও অনুরোধ থেকে ডেটা আনে


0

সারসংক্ষেপে,

@Pathparam রিসোর্স এবং কোয়েরি স্ট্রিং উভয়ের মধ্য দিয়ে পাস করার জন্য কাজ করে

  • /user/1
  • /user?id=1

@Queryparam শুধুমাত্র কোয়েরি স্ট্রিংয়ের মান পাস করার জন্য কাজ করে

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