2010-10-28 17 views
10

के साथ http हटाएं मैं वर्तमान में रीस्टफुल वेब सेवाओं के निर्माण के लिए जर्सी फ्रेमवर्क (जेएक्स-आरएस कार्यान्वयन) का उपयोग कर रहा हूं। प्रोजेक्ट में संसाधन वर्गों ने मानक HTTP परिचालनों को लागू किया है - जीईटी, पोस्ट & हटाएं। मैं यह समझने की कोशिश कर रहा हूं कि ग्राहक से इन तरीकों से अनुरोध पैरामीटर कैसे भेजना है।आरईएसटी

प्राप्त करने के लिए यह क्वेरी स्ट्रिंग में होगा (@QueryParam का उपयोग करके निकालें) और पोस्ट नाम/मूल्य जोड़ी सूची (@FormParam का उपयोग करके निकालें) अनुरोध निकाय के साथ भेजा जाएगा। मैंने HTTPClient का उपयोग करके उनका परीक्षण किया और ठीक काम किया। डिलीट ऑपरेशन के लिए, मुझे पैरामीटर प्रकार/प्रारूप पर कोई निर्णायक उत्तर नहीं मिल रहा है। क्या डिलीट ऑपरेशन क्वेरी स्ट्रिंग में पैरामीटर प्राप्त करता है (@QueryParam का उपयोग करके निकालें) या शरीर में (@FormParam का उपयोग करके निकालें)?

वेब पर अधिकांश DELETE उदाहरणों में, मैं पैरामीटर निष्कर्षण के लिए @PathParam एनोटेशन का उपयोग करता हूं (यह क्वेरी स्ट्रिंग से फिर से होगा)।

क्या यह DELETE विधि को पैरामीटर पास करने का सही तरीका है? मैं बस यहां सावधान रहना चाहता हूं ताकि मैं किसी भी आरईएसटी सिद्धांतों का उल्लंघन नहीं कर रहा हूं।

उत्तर

0

@QueryParam सही तरीका होगा। @PathParam केवल यूआरएल पैरामीटर ('?' के बाद सामान) से पहले चीजों के लिए है। और @FormParam केवल सबमिट किए गए वेब फ़ॉर्म के लिए है जिसमें फ़ॉर्म सामग्री प्रकार है।

10

DELETE विधि को हटाने के लिए संसाधन की पहचान करने के लिए URL का उपयोग करना चाहिए। इसका मतलब है कि आप या तो पथ पैरामीटर या क्वेरी पैरामीटर का उपयोग कर सकते हैं। इसके अलावा, जहां तक ​​आरईएसटी का संबंध है, यूआरएल बनाने का कोई सही और गलत तरीका नहीं है।

18

हां, यह आपके ऊपर है, लेकिन जैसा कि मुझे आरईएसटी विचारधारा मिलती है, हटाएं यूआरएल को एक जीईटी यूआरएल अनुरोध द्वारा लौटाई गई चीज़ को हटाना चाहिए। उदाहरण के लिए, यदि

GET http://server/app/item/45678 

रिटर्न आईडी 45678 के साथ आइटम,

DELETE http://server/app/item/45678 

उसे हटाना होगा।

इस प्रकार, मुझे लगता है कि क्वेरीरीम की तुलना में पथपाराम का उपयोग करना बेहतर है, जब काम के कुछ पहलुओं को नियंत्रित करने के लिए क्वेरीपाराम का उपयोग किया जा सकता है।

DELETE http://server/app/item/45678?wipeData=true 
+2

'? WipeData = सच' प्रश्न स्ट्रिंग के एक दुरुपयोग है। आरएफसी 3 9 86 सेक्शन 3.4 में कहा गया है "क्वेरी घटक में गैर-पदानुक्रमित डेटा होता है, जिसमें पथ घटक (धारा 3.3) के डेटा के साथ, यूआरआई की योजना और नामकरण प्राधिकरण (यदि कोई हो) के दायरे में संसाधन की पहचान करने के लिए कार्य करता है।" थोड़ा उलझन में आरएफसी 7231 सेक्शन 4.2.1 का उल्लेख है "उदाहरण के लिए, वेब पेज आधारित सामग्री संपादन सॉफ्टवेयर के लिए क्वेरी पैरामीटर के भीतर कार्रवाई का उपयोग करना आम है, जैसे" पेज? डू = डिलीट "" जो मैं कहूंगा भी गलत – aaaaaa

3

आप इस

यूआरएल की तरह उपयोग कर सकते हैं http://yourapp/person/personid

@DELETE 
@Path("/person/{id}") 
@Produces(MediaType.APPLICATION_JSON) 
public Response deletePerson(@PathParam("id") String id){ 
    Result result = new Result(); 
    try{ 
     persenService.deletePerson(id); 
     result.setResponce("success"); 
    } 
    catch (Exception e){ 
     result.setResponce("fail"); 
     e.printStackTrace(); 
    } 
    return Response.status(200).entity(result).build(); 
} 
संबंधित मुद्दे