2009-10-02 8 views
6

जब आप पोस्ट का उपयोग करके एक नई प्रविष्टि बनाने के लिए आरईएसटी का उपयोग करते हैं, तो मुझे कुछ एपीआई जैसे Google's निर्दिष्ट करते हैं कि आप एक्सएमएल को अनुरोध के हिस्से के रूप में भेजते हैं जबकि अन्य निर्दिष्ट करते हैं कि आप कुंजी/मूल्य जोड़े भेजते हैं। क्या रीस्ट पोस्ट के लिए मानक या सर्वोत्तम अभ्यास है?आरईएसटी पोस्ट प्रारूप

उत्तर

1

यह आरईएसटी सेवा कार्यान्वयन पर निर्भर करता है।

यदि आरईएसटी सेवा मौजूदा एचटीएमएल एचटीएमएल फॉर्म का एक अनुकूलन है तो पोस्ट कुंजी मूल्य जोड़े आमतौर पर शुरू करना आसान होता है।

जावास्क्रिप्ट से जानकारी पोस्ट करते समय आमतौर पर JSON का उपयोग करना आसान होता है।

एक्सएमएल अक्सर प्रयोग किया जाता है क्योंकि मनुष्यों के लिए यह समझना आसान होता है और हर भाषा/मंच में उपकरण का ढेर होता है जो इससे निपट सकता है।

+0

एक्सएमएल जेएसओएन की तुलना में समझने में आसान है? – Kevin

4

कोई भी प्रतिनिधित्व प्रारूप जो काम करता है ठीक है, इस शर्त के साथ कि आपको मानक प्रारूपों जैसे कि एटम जहां वे मौजूद हैं, का उपयोग करने के लिए बहुत मेहनत करनी चाहिए।

अद्यतन यहाँ रॉय फील्डिंग (HTTP मानक के सह लेखक है, और जो व्यक्ति अपने पीएचडी शोध प्रबंध में आराम व्यक्त) से एक relevant quote है। आप अपने वेब सेवा में इस्तेमाल किया अभ्यावेदन डिजाइन केंद्रीय महत्व का है:

एक REST API को परिभाषित मीडिया प्रकार (ओं) का प्रतिनिधित्व संसाधनों [के लिए इस्तेमाल में इसके लगभग सभी वर्णनात्मक प्रयास के खर्च करना चाहिए .. ।]

फॉलो-ऑन क्यू & ए

-7

SOAP WebServices के लिए मानक (मुझे लगता है कि आप थोड़ा WebServices और बाकी bewteen असमंजस में हैं) है पढ़ लें।

लेकिन यह वास्तव में कार्यान्वयन करने वालों पर निर्भर है।

+0

क्या इस पोस्ट में गलत है समझाने के लिए स्वतंत्र महसूस ... –

+0

"वेब सेवा" अब एक अधिक सामान्य अवधि तरीके का वर्णन इतना है कि यह रूप में सुविधाजनक है वेब की संरचना करने के कार्यक्रमों ब्राउज़ करें और यह के रूप में पर संचालित करने के लिए है मनुष्यों के लिए है। एसओएपी डब्ल्यू 3 सी मानकों का एक सेट है जिसमें यह लक्ष्य है, और एसओएपी विशेष रूप से एक्सएमएल का उपयोग करता है। आरईएसटी मानक नहीं है, लेकिन वेब सेवाओं की संरचना के लिए एक वास्तुशिल्प शैली है जो अधिकतम रूप से HTTP और अन्य वेब मानकों का लाभ उठाती है। रिचर्डसन और रूबी की * रीस्टफुल वेब सर्विसेज * (O'Reilly) आरईएसटी दृष्टिकोण के बारे में सीखने के लिए एक अद्भुत संसाधन है। –

+0

हां ... लेकिन पूरी तरह से 'वेब सेवा' होने का मतलब यह नहीं है कि यह आरईएसटी है। आरईएसटी उससे भी अधिक है। लेकिन यह आदमी वास्तव में पूर्ण आरईएसटी नहीं चाहता है, वह केवल वेब सर्विसेज के लिए एक मानक चाहता है। इसलिए मेरा जवाब। –

1

मैं सुझाव देता हूं कि सबसे सरल क्या है क्योंकि आरईएसटी सब कुछ है। नीचे कोड स्निपेट यह है कि मैं एक पोस्ट कैसे करता हूं। मुझे पता है कि आप विशेष रूप से कोड की तलाश नहीं कर रहे थे, लेकिन नीचे दिया गया एपीआई (httpClient) बहुत अच्छा काम करता है। फिर आप उन टूल्स का उपयोग करके इसे डीकोड करते हैं जिन्हें हम हमेशा इस्तेमाल करते हैं (request.getParameter())। मेरा मानना ​​है कि यह एसओएपी से अलग आरईएसटी सेट करता है। इसे मुश्किल मत बनाओ! HTTP का प्रयोग करें!

public void testHttpClient() { 
    PostMethod pMethod = null; 
    pMethod = new PostMethod("...url..."); 
    NameValuePair[] data = {new NameValuePair("activeFlag", "yes"), new NameValuePair("custCode", "B010"), new NameValuePair("comments", "mark is cool")}; 
    pMethod.setRequestBody(data); 
    this.makeCall(pMethod); 
} 
private String makeCall(HttpMethod method) { 
    String response = null; 
    HttpClient client = new HttpClient(); 
    client.getParams().setAuthenticationPreemptive(true); 
    client.getState().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(this.logon, this.pass)); 
    method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); 
    method.getParams().setIntParameter(HttpMethodParams.SO_TIMEOUT, 5000); 
    try { 
     int statusCode = client.executeMethod(method); 
     if (statusCode != HttpStatus.SC_OK) { 
      System.err.println("Method failed: " + method.getStatusLine()); 
     } 
     String aLine = null; 
     StringBuffer sb = new StringBuffer(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream())); 
     while ((aLine = in.readLine()) != null) { 
      sb.append(aLine.trim()); 
      System.out.println(aLine); 
     } 
     in.close(); 
     response = sb.toString(); 
    } catch (HttpException e) { 
     System.err.println("Fatal protocol violation: " + e.getMessage()); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     System.err.println("Fatal transport error: " + e.getMessage()); 
     e.printStackTrace(); 
    } finally { 
     method.releaseConnection(); 
    } 
    return response; 
} 
संबंधित मुद्दे