जब @PPParam बनाम @PathParam का उपयोग करना है


276

मैं यहां पहले से पूछे गए प्रश्न को नहीं पूछ रहा हूं: @PathParam और @QueryParam में क्या अंतर है

यह एक "सर्वोत्तम अभ्यास" या सम्मेलन प्रश्न है।

आप कब उपयोग करेंगे @PathParamबनाम @QueryParam

मैं क्या सोच सकता हूं कि निर्णय सूचना पैटर्न को अलग करने के लिए दोनों का उपयोग कर सकता है। मुझे अपने एलटीपीओ के नीचे उदाहरण दें - बिल्कुल सही अवलोकन से कम।

PathParam का उपयोग सूचना श्रेणी के लिए आरक्षित किया जा सकता है, जो सूचना के पेड़ की एक शाखा में गिर जाएगा। 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) ;

मुझे नहीं लगता कि ऐसा करने का एक मानक सम्मेलन है। है? हालाँकि, मैं यह सुनना चाहूंगा कि लोग अपनी जानकारी को अलग करने के लिए PathParam बनाम QueryParam का उपयोग कैसे करते हैं जैसे कि मैंने ऊपर उदाहरण दिया है। मुझे अभ्यास के पीछे का कारण सुनना भी अच्छा लगेगा।


जवाबों:


245

REST ऐसा मानक नहीं हो सकता है, लेकिन सामान्य REST दस्तावेज़ीकरण और ब्लॉग पोस्ट पर पढ़ने से आपको API URL की संरचना करने के अच्छे तरीके के लिए कुछ दिशानिर्देश देने चाहिए। अधिकांश बाकी एपीआई पथ में केवल संसाधन नाम और संसाधन आईडी होते हैं। जैसे कि:

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

कुछ REST API फ़िल्टरिंग, पेजिंग और सॉर्टिंग के लिए क्वेरी स्ट्रिंग्स का उपयोग करते हैं, लेकिन चूंकि REST एक सख्त मानक नहीं है, इसलिए मैं कुछ REST API की जाँच करने की सलाह दूंगा जैसे कि github और stackoverflow और देखें कि आपके उपयोग के मामले में क्या अच्छा काम कर सकता है।

मैं पथ में किसी भी आवश्यक पैरामीटर को रखने की सलाह दूंगा, और किसी भी वैकल्पिक पैरामीटर को निश्चित रूप से क्वेरी स्ट्रिंग पैरामीटर होना चाहिए। रास्ते में वैकल्पिक मापदंडों को रखने से URL संचालकों को लिखने की कोशिश करते समय वास्तव में गड़बड़ हो जाएगी जो विभिन्न संयोजनों से मेल खाते हैं।


73
" मैं पथ में किसी भी आवश्यक पैरामीटर को डालने की सलाह
दूंगा

1
इस सम्मेलन के रूप में अच्छी तरह रखें अनुरोध के लिए इस्तेमाल किया जाना चाहिए, मान लीजिए कि हम डाटाबेस इकाई की एक विशेष संस्करण को अद्यतन करना चाहते हैं, यूआरआई होना चाहिए PUT /depatments/{dept}/employees/{id}/{version}और संस्करण वैकल्पिक जा रहा है या यह होना चाहिए PUT /depatments/{dept}/employees/{id}?version=12और संस्करण वैकल्पिक जा रहा है
सबसे अच्छा चाहता है

इस मामले में, मैं सिफारिश करूंगा: - PUT /depatments/{dept}/employees/{id}/versions/{version}एक चुने हुए संस्करण के POST /depatments/{dept}/employees/{id}/versionsसाथ एक कर्मचारी बनाने के लिए
Guillaume Vauvert

90

मैं यह करता हूं।

यदि आईडी के आधार पर एक रिकॉर्ड प्राप्त करने के लिए एक परिदृश्य है, उदाहरण के लिए आपको उस कर्मचारी का विवरण प्राप्त करने की आवश्यकता है जिसकी आईडी 15 है, तो आपके पास @PathParam के साथ संसाधन हो सकते हैं।

GET /employee/{id}

यदि कोई ऐसा परिदृश्य है जहां आपको सभी कर्मचारियों का विवरण प्राप्त करने की आवश्यकता है, लेकिन एक समय में केवल 10, तो आप क्वेरी परम का उपयोग कर सकते हैं

GET /employee?start=1&size=10

यह कहता है कि कर्मचारी आईडी 1 शुरू करने से दस रिकॉर्ड मिलते हैं।

संक्षेप में, आईडी के आधार पर पुनर्प्राप्ति के लिए @PathParam का उपयोग करें। फ़िल्टर के लिए उपयोगकर्ता @QueryParam या यदि आपके पास उपयोगकर्ता द्वारा पारित किए जा सकने वाले विकल्पों की कोई निश्चित सूची है।


क्या '@PathParam' और '@QueryParam' दोनों समान कार्यक्षमता प्रदान करते हैं? क्या Is @ thing पीपरम ’एक ही बात लिखने का एक और तरीका है?
ऋषभ अग्रवाल

1
@ ऋषभ अग्रवाल भले ही दोनों समान कार्यक्षमता प्रदान करते हों, लेकिन क्लीन कोड प्रैक्टिस यह है कि, पथ चर के रूप में एक आवश्यक पैरामीटर और किसी भी वैकल्पिक पैरामीटर को क्वेरी परम के रूप में रखने की सलाह दी जाती है।
अखिल घाटिकी

@ ऋषभ अग्रवाल अधिक जानकारी के लिए, आप मेरे लेख को देखें रेस्ट एपीआई बेस्ट प्रैक्टिस
अरुण बी चंद्रशेखरन

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

मैंने व्यक्तिगत रूप से "अगर यह उपयोगकर्ता को URLwhich को बुकमार्क करने के लिए समझ में आता है, तो इन मापदंडों को शामिल किया है, तो PathParam का उपयोग करें" के दृष्टिकोण का उपयोग किया।

उदाहरण के लिए, यदि किसी उपयोगकर्ता प्रोफ़ाइल के URL में कुछ प्रोफ़ाइल आईडी पैरामीटर शामिल हैं, क्योंकि यह उपयोगकर्ता द्वारा बुकमार्क किया जा सकता है और / या आसपास ईमेल किया जा सकता है, तो मैं उस प्रोफ़ाइल आईडी को पथ पैरामीटर के रूप में शामिल करूंगा। इसके अलावा, एक और विचार यह है कि पृष्ठ URL द्वारा निरूपित किया गया है जिसमें पथ परम शामिल नहीं है - उपयोगकर्ता अपना प्रोफ़ाइल सेट करेगा, इसे सहेजेगा, और फिर उस पर वहां से बहुत कुछ बदलने की संभावना नहीं है; इसका अर्थ है वेबक्रॉलर / खोज इंजन / ब्राउज़र / आदि इस पृष्ठ को पथ के आधार पर कैश कर सकते हैं।

यदि URL में दिया गया कोई पैरामीटर पृष्ठ लेआउट / सामग्री को बदलने की संभावना रखता है तो मैं उसे एक क्वैरिपाराम के रूप में उपयोग करूँगा। उदाहरण के लिए, यदि प्रोफ़ाइल URL एक पैरामीटर का समर्थन करता है जो निर्दिष्ट करता है कि उपयोगकर्ता ईमेल दिखाना है या नहीं, तो मैं इस पर विचार करूंगा कि यह एक क्वेरी परम है। (मुझे पता है, यकीनन, आप कह सकते हैं कि &noemail=1या जो भी पैरामीटर इसका उपयोग पथ परम के रूप में किया जा सकता है और 2 अलग-अलग पृष्ठ उत्पन्न करता है - उस पर ईमेल के साथ एक, इसके बिना एक - लेकिन तार्किक रूप से ऐसा नहीं है: यह दिखाए गए कुछ विशेषताओं के साथ या बिना अभी भी वही पृष्ठ है।

आशा है कि यह मदद करता है - मैं सराहना की व्याख्या थोड़ा फजी हो सकता है :)


मुझे लगता है कि यह उत्तर मार्गों के साथ संसाधनों को भ्रमित करता है। सवाल REST API के संसाधनों के बारे में है, जो आमतौर पर JSON या XML को लौटाता है, वेब एप्लिकेशन के मार्गों के बारे में नहीं, जो आपको एप्लिकेशन के भीतर नेविगेट करने में मदद करता है।
हम्पस


5

यह एक बहुत ही दिलचस्प सवाल है।

आप दोनों का उपयोग कर सकते हैं, इस विषय में कोई सख्त नियम नहीं है, लेकिन URI पथ चर का उपयोग करने के कुछ फायदे हैं:

  • कैश : जब वे क्वेरी पैरामीटर होते हैं, तो इंटरनेट पर अधिकांश वेब कैश सेवाएँ GET अनुरोध को कैश नहीं करती हैं। वे ऐसा इसलिए करते हैं क्योंकि सर्वर में डेटा बदलने के लिए जीईटी अनुरोधों का उपयोग करते हुए बहुत सारे आरपीसी सिस्टम हैं (विफल !! सुरक्षित रूप से सुरक्षित होना चाहिए)

लेकिन अगर आप पथ चर का उपयोग करते हैं, तो यह सभी सेवाएँ आपके GET अनुरोधों को कैश कर सकती हैं।

  • पदानुक्रम : पथ चर पदानुक्रम का प्रतिनिधित्व कर सकते हैं: / शहर / सड़क / स्थान

यह उपयोगकर्ता को डेटा की संरचना के बारे में अधिक जानकारी देता है।

लेकिन यदि आपके डेटा में कोई पदानुक्रम संबंध नहीं है, तो आप अभी भी पथ चर का उपयोग कर सकते हैं, अल्पविराम या अर्ध-उपनिवेश का उपयोग कर सकते हैं:

/ शहर / देशांतर, अक्षांश

एक नियम के रूप में, पैरामा का उपयोग तब करें जब पैरामीटर्स के ऑर्डर के मामले में, सेमी-कोलोन का उपयोग करें जब ऑर्डर मायने नहीं रखता है:

/ IconGenerator / लाल, नीले, हरे

उन कारणों के अलावा, कुछ मामले हैं जब क्वेरी स्ट्रिंग चर का उपयोग करना बहुत आम है:

  • जब आपको ब्राउज़र को स्वचालित रूप से URI में HTML फॉर्म चर डालने की आवश्यकता होती है
  • जब आप एल्गोरिथ्म के साथ काम कर रहे हैं। उदाहरण के लिए, Google इंजन क्वेरी स्ट्रिंग का उपयोग करता है:

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

योग करने के लिए, इस तरीके में से एक का उपयोग करने का कोई मजबूत कारण नहीं है लेकिन जब भी आप कर सकते हैं, यूआरआई चर का उपयोग करें।


2

जैसा कि उल्लेख किया गया है, REST एक मानक नहीं है। हालाँकि, यदि आप URI सम्मेलन पर आधारित मानकों को लागू करना चाहते हैं, तो आप ओटाटा URI सम्मेलन पर विचार कर सकते हैं । Ver 4 को OASIS मानक के रूप में अनुमोदित किया गया है और Apache Olingo के माध्यम से जावा सहित विभिन्न भाषाओं के लिए oData के लिए पुस्तकालय मौजूद हैं । इस तथ्य को उजागर न करें कि यह Microsoft का एक स्पॉन है, क्योंकि आपने इसे अन्य उद्योग के खिलाड़ी के समर्थन से प्राप्त किया है , जिसमें Red Hat, Citrix, IBM, ब्लैकबेरी, Drupal, Netflix Facebook और SAP शामिल हैं।

अधिक गोद लेने वालों को यहां सूचीबद्ध किया गया है


2

विकिपीडिया से: यूनिफ़ॉर्म रिसोर्स लोकेटर

एक पथ , जिसमें डेटा शामिल है, आमतौर पर पदानुक्रमित रूप में व्यवस्थित होता है, जो स्लैग द्वारा अलग किए गए खंडों के अनुक्रम के रूप में प्रकट होता है।

एक वैकल्पिक क्वेरी , प्रश्न चिह्न (?) से पूर्ववर्ती भाग से अलग हो जाती है, जिसमें गैर-पदानुक्रमित डेटा की क्वेरी स्ट्रिंग होती है ।

- URL के वैचारिक डिजाइन के अनुसार, हम पदानुक्रम को पदानुक्रमित डेटा / निर्देशों / लोकेटर घटकों के लिए लागू कर सकते हैं, या डेटा पदानुक्रमित नहीं होने पर क्वेरीपराम लागू कर सकते हैं। यह समझ में आता है क्योंकि रास्तों को स्वाभाविक रूप से आदेश दिया जाता है, जबकि प्रश्नों में चर होते हैं जिन्हें मनमाने ढंग से आदेशित किया जा सकता है (अनियंत्रित चर / मान जोड़े)।

पिछले टिप्पणीकार ने लिखा,

मुझे लगता है कि यदि पैरामीटर एक विशिष्ट इकाई की पहचान करता है तो आपको एक पथ चर का उपयोग करना चाहिए।

एक अन्य ने लिखा,

आईडी के आधार पर पुनर्प्राप्ति के लिए @PathParam का उपयोग करें। फ़िल्टर के लिए उपयोगकर्ता @QueryParam या यदि आपके पास उपयोगकर्ता द्वारा पारित किए जा सकने वाले विकल्पों की कोई निश्चित सूची है।

एक और,

मैं पथ में किसी भी आवश्यक पैरामीटर को रखने की सलाह दूंगा, और किसी भी वैकल्पिक पैरामीटर को निश्चित रूप से क्वेरी स्ट्रिंग पैरामीटर होना चाहिए।

- हालांकि, कोई विशिष्ट संस्थाओं की पहचान के लिए एक लचीली, गैर-श्रेणीबद्ध प्रणाली को लागू कर सकता है! किसी SQL तालिका पर एक से अधिक अनन्य अनुक्रमणिकाएँ हो सकती हैं, और किसी अनन्य अनुक्रमणिका वाले फ़ील्ड के किसी भी संयोजन का उपयोग करके संस्थाओं की पहचान करने की अनुमति देती हैं! विभिन्न संयोजनों (शायद यह भी अलग तरह से आदेश दिया गया है), विभिन्न संबंधित संस्थाओं (रेफरर्स) के लिंक के लिए इस्तेमाल किया जा सकता है। इस मामले में, हम गैर-पदानुक्रमित डेटा के साथ काम कर सकते हैं, जिसका उपयोग व्यक्तिगत संस्थाओं की पहचान करने के लिए किया जाता है - या अन्य मामलों में, केवल कुछ चर / फ़ील्ड - विशिष्ट अनुक्रमित के कुछ घटकों को निर्दिष्ट कर सकते हैं - और रिकॉर्ड की सूची / सेट प्राप्त कर सकते हैं। ऐसे मामलों में, QueryParams के रूप में URL को लागू करना आसान, अधिक तार्किक और उचित हो सकता है!

क्या लंबे हेक्साडेसिमल स्ट्रिंग को बाकी पथ में कीवर्ड के मान को कम / कम कर सकता है? यह पथ में चर / मान रखने या क्वेरी में संभावित एसईओ निहितार्थों पर विचार करने के लायक हो सकता है, और क्या हम चाहते हैं कि मानव-इंटरफ़ेस निहितार्थ यह है कि उपयोगकर्ताओं को पता बार की सामग्री को संपादित करके URL के पदानुक्रम का पता लगाने या उसका पता लगाने में सक्षम होना चाहिए। मेरा 404 नहीं मिला पेज अपने माता-पिता को स्वचालित रूप से टूटे हुए URL को पुनर्निर्देशित करने के लिए SSI चर का उपयोग करता है! खोज रोबोट पथ पदानुक्रम को भी रोक सकते हैं। दूसरी ओर, व्यक्तिगत रूप से, जब मैं सोशल मीडिया पर यूआरएल साझा करता हूं, तो मैं किसी भी निजी विशिष्ट पहचानकर्ताओं को मैन्युअल रूप से हटा देता हूं - आम तौर पर URL से क्वेरी को काट-छाँट करके, केवल रास्ता छोड़ देता है: इस मामले में, अद्वितीय पहचानकर्ता रखने में कुछ उपयोगिता है। क्वेरी के बजाय पथ में। क्या हम पथ घटकों के उपयोग को एक कच्चे उपयोगकर्ता-इंटरफ़ेस के रूप में सुविधाजनक बनाना चाहते हैं, शायद इस बात पर निर्भर करता है कि डेटा / घटक मानव-पठनीय हैं या नहीं। मानव-पठनीयता का प्रश्न पदानुक्रम के प्रश्न से कुछ हद तक संबंधित है: अक्सर, मानव-पठनीय खोजशब्दों के रूप में व्यक्त किया जा सकने वाला डेटा भी पदानुक्रमित है; जबकि पदानुक्रमित डेटा को अक्सर मानव-पढ़ने योग्य कीवर्ड के रूप में व्यक्त किया जा सकता है। (खोज इंजनों को स्वयं एक यूजर-इंटरफेस के रूप में यूआरएल के उपयोग को बढ़ाने के रूप में परिभाषित किया जा सकता है।) कीवर्ड या निर्देशों के पदानुक्रमों का कड़ाई से आदेश नहीं दिया जा सकता है, लेकिन वे आमतौर पर पर्याप्त करीब हैं कि हम पथ में वैकल्पिक मामलों को कवर कर सकते हैं, औरएक विकल्प को "कैनोनिकल" मामले के रूप में लेबल करें

मौलिक रूप से कई प्रकार के प्रश्न हैं जिनका उत्तर हम प्रत्येक अनुरोध के लिए URL के साथ दे सकते हैं:

  1. हम किस तरह के रिकॉर्ड / चीज़ का अनुरोध / सेवा कर रहे हैं?
  2. हम में से कौन सी रुचि रखते हैं?
  3. हम जानकारी / रिकॉर्ड कैसे प्रस्तुत करना चाहते हैं?

Q1 लगभग निश्चित रूप से पथ द्वारा, या PathParams द्वारा कवर किया गया है। Q3 (जो संभवतः मनमाने ढंग से ऑर्डर किए गए वैकल्पिक मापदंडों और डिफ़ॉल्ट मानों के एक सेट के माध्यम से नियंत्रित किया जाता है); लगभग निश्चित रूप से QueryParams द्वारा कवर किया गया सबसे अच्छा है। Q2: यह निर्भर करता है ...


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

कारण वास्तव में बहुत सरल है। क्वेरी पैरामीटर का उपयोग करते समय आप "/" जैसे वर्णों में ले जा सकते हैं और आपके क्लाइंट को HTML को एनकोड करने की आवश्यकता नहीं है। अन्य कारण हैं लेकिन यह एक सरल उदाहरण है। पथ चर का उपयोग कब करना है। मैं कहूंगा कि जब भी आप आईडी के साथ काम कर रहे हैं या यदि पथ चर एक क्वेरी के लिए एक दिशा है।


1

मैं undersand जब हम इस्तेमाल करते हैं एक exapmle दे रहा हूँ @Queryparamऔर@pathparam

उदाहरण के लिए मैं ले रहा हूँ एक resouce carResourceवर्ग है

यदि आप अपने resouce method manadatory के इनपुट बनाना चाहते हैं तो param प्रकार का उपयोग करें @pathaparam, यदि आपके संसाधन विधि के इनपुट वैकल्पिक होने चाहिए तो उस परम प्रकार को @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
    }
}

इस resouce के लिए अनुरोध पास करें

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आपको चाहिए कि आपको कार्मोडेल को reQ uri के रूप में देना चाहिए अन्यथा यह रेसक्यू को रिजेक्ट करने के लिए पास नहीं करेगा लेकिन अगर आप कलर पास नहीं करते हैं यह भी संसाधन के लिए अनुरोध पारित करेंगे क्योंकि रंग है क्योंकि @quetyParamयह वैकल्पिक है।


0
  1. @QueryParam डिफ़ॉल्ट मान एनोटेशन के साथ आसानी से उपयोग किया जा सकता है ताकि आप कोई क्वेरी पैरामीटर पास न होने पर अशक्त सूचक अपवाद से बच सकें।

जब आप GET अनुरोध से क्वेरी मापदंडों को पार्स करना चाहते हैं, तो आप संबंधित पैरामीटर को उस विधि से परिभाषित कर सकते हैं जो GET अनुरोध को संभाल लेगी और उन्हें @QueryParamएनोटेशन के साथ एनोटेट करेगी।

  1. @PathParamURI मानों और मिलानों को निकालता है @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

REST सेवा में, JAX-RS HTTP अनुरोध से डेटा स्वीकार करने के लिए प्रदान करता है @QueryParamऔर @FormParamदोनों। एक HTTP फॉर्म GET और POST जैसे विभिन्न तरीकों से जमा किया जा सकता है।

@QueryParam : GET अनुरोध स्वीकार करता है और क्वेरी स्ट्रिंग से डेटा पढ़ता है।

@FormParam: POST अनुरोध स्वीकार करता है और HTML फॉर्म या मीडिया के किसी भी अनुरोध से डेटा प्राप्त करता है


0

संक्षेप में,

@Pathparam संसाधन और क्वेरी स्ट्रिंग दोनों से गुजरने के लिए कार्य करता है

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

@Queryparam केवल क्वेरी स्ट्रिंग को पास करने के लिए कार्य करता है

  • /user?id=1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.