त्वरित संस्करण:
आपके द्वारा नियंत्रित सार्वजनिक होस्ट पर चलने वाली वेब सेवा मिडलेयर का उपयोग करें (संभवतः लेकिन जरूरी नहीं कि डेटाबेस होस्ट)। आप जिस सीमित कार्य की अनुमति देना चाहते हैं उसे करने के लिए सार्वजनिक वेब सेवा विधियों का पर्दाफाश करें और कुछ नहीं।
संबंधित प्रश्न:
- Android के साथ ड्राइवर JDBC PostgreSQL
- Android में JDBC के माध्यम से PostgreSQL सर्वर से कैसे कनेक्ट करें?
कार्यान्वयन विकल्प
व्यक्तिगत रूप से मैं जावा एप्लिकेशन सर्वर का उपयोग करूंगा जैसे अपाचे टॉमकैट या JBoss AS 7 और मैं JAX-RS का उपयोग करके अपनी वेब सेवा विधियों को लिखूंगा मेरे ऐप के उपयोग के लिए एक अच्छा आरईएसटी-स्टाइल एपीआई तैयार करने के लिए। इससे मैं परिचित हूं और यह अच्छी तरह से काम करता है, लेकिन आपके पास कार्यान्वयन सहित बहुत सारे विकल्प हैं:
-
आरईएसटी-जैसे एपीआई (जावा के जेएक्स-आरएस में जर्सी और रीस्टेसी, विभिन्न अन्य लैंग टूल्स शामिल हैं) जो HTTP अनुरोधों का उपयोग करते हैं और जेएसओएन या एक्सएमएल उत्तरों का उत्पादन करते हैं।
-
WSDL के साथ SOAP, क्लासिक "वेब सेवा" परत। जावा में अन्य विकल्पों के बीच JAX-WS के साथ किया गया। अधिकांश भाषाओं में SOAP+WSDL के लिए उपकरण होते हैं लेकिन विशेष रूप से मोबाइल जैसे रुक-रुक कर जुड़े उपकरणों पर काम करना एक प्रकार का भद्दा है।
-
एक्सएमएल-आरपीसी अगर आपको दर्द पसंद है
कुछ JAX-RS हैं quickstarts
JBoss AS 7 क्विकस्टार्ट
पर सूची; बस "JAX-RS" खोजें। "kitchensinkquick
महत्वपूर्ण विचार
यदि संभव हो तो HTTP का उपयोग करें, और यदि एक्सेस को सार्वजनिक नहीं करना है तो HTTP पर HTTP बेसिक ऑथेंटिकेशन जैसी उपयुक्त HTTP प्रमाणीकरण योजना का उपयोग करें। कोई भी सभ्य वेब सेवा कार्यान्वयन प्रमाणीकरण विकल्पों की पेशकश करेगा या उस प्लेटफॉर्म का समर्थन करेगा जिस पर यह चलता है। वेब सेवाओं के स्तर पर अपने स्वयं के प्रमाणीकरण और उपयोगकर्ता प्रबंधन को लागू करने के प्रलोभन से बचें, आप करेंगे बिगाड़ दो; HTTP परत पर प्रमाणीकरण का उपयोग करें जो पहले ही लिखा और परीक्षण किया जा चुका है। इसके लिए अपाचे के mod_auth_pgsql
. जैसी किसी चीज़ के उपयोग की आवश्यकता हो सकती है , JBoss AS 7 के JDBC सुरक्षा क्षेत्र, आदि। एकमात्र मामला जिसे मैं उचित प्रति-उपयोगकर्ता HTTP ऑथ नहीं करने पर विचार करूंगा, जहां मुझे सुरक्षा कारणों से अपने उपयोगकर्ताओं को अलग करने की आवश्यकता नहीं है, मुझे केवल इस बात की परवाह है कि यह मेरा ऐप सर्वर तक पहुंच रहा है , यानी अगर मेरी सुरक्षा आवश्यकताएं काफी कमजोर हैं। इस मामले में मैं पूरे ऐप के लिए एक निश्चित उपयोगकर्ता नाम/पासवर्ड का उपयोग करता हूं और संभवतः एक X.509 क्लाइंट प्रमाणपत्र का उपयोग करता हूं यदि एंड्रॉइड उनका समर्थन करता है।
याद रखें कि आप चीजों को कैसे भी सुरक्षित करते हैं, सभी क्रेडेंशियल या तो उपयोगकर्ता के लिए जाने जाते हैं या .apk से तुच्छ रूप से निकाले जा सकते हैं, इसलिए आपको अभी भी यह मानना है कि कोई भी आपकी वेब सेवा विधियों तक पहुंच सकता है, न कि केवल आपके ऐप तक। उन्हें तदनुसार लिखें।
नहीं करें सर्वर पर वेब सेवा कॉल पर बस अपने ऐप से SQL भेजें और परिणाम JSON के रूप में वापस करें। यह भयानक रूप से असुरक्षित है, साथ ही बदसूरत और भद्दा भी है। प्रत्येक व्यक्तिगत कार्य के लिए एक वेब सेवा विधि लिखें, जिसे आप चाहते हैं कि ऐप प्रदर्शन करने में सक्षम हो और SQL को सर्वर में रखे। पैरामीटरयुक्त प्रश्नों का उपयोग करना याद रखें और अन्य SQL इंजेक्शन जोखिमों से सावधान रहें। ये वेब सेवा विधियां एकल उत्तर देने के लिए एक या अधिक प्रश्नों का उपयोग कर सकती हैं - उदाहरण के लिए, आप एक "ग्राहक" रिकॉर्ड और सभी संबद्ध "पता" और "संपर्क" रिकॉर्ड एकत्र कर सकते हैं, फिर परिणाम को एक अच्छे JSON ऑब्जेक्ट में Android डिवाइस पर वापस कर सकते हैं। कई धीमी और अविश्वसनीय नेटवर्क राउंड ट्रिप को बचाते हुए उपभोग कर सकते हैं।
कोई फर्क नहीं पड़ता कि आप क्या उपयोग करते हैं, सुनिश्चित करें कि आपकी वेब सेवा कॉल बैकग्राउंड वर्कर थ्रेड में करें और यूजर इंटरफेस को ब्लॉक न करें। समयबाह्य और त्रुटियों के लिए और पुनः प्रयास की आवश्यकता के लिए तैयार रहें। आंतरायिक कनेक्शन हानि, उच्च विलंबता, और पैकेट हानि की उच्च दरों का अनुकरण करके अपने ऐप का परीक्षण करें और सुनिश्चित करें कि यह प्रयोग करने योग्य बना रहे।