2012-03-14 22 views
15

मैं कोडनिर्देशक 1.7 का उपयोग कर रहा हूं। क्या किसी को PHP के साथ विशेष रूप से कोडइग्निटर ढांचे के भीतर वेब सेवाओं का निर्माण करने का कोई अनुभव है? वेब सेवाओं को लागू करते समय सुरक्षा उपायों पर विचार करने की क्या आवश्यकता है? एपीआई कुंजी के साथ प्रमाणीकरण कैसे प्रदान करें?कोडनिर्देशक वेब सेवाएं

कोई विचार?

उत्तर

16

यह उस प्रकार की वेब सेवा पर निर्भर करता है जिसके बारे में आप पूछ रहे हैं। उदाहरण के लिए वेब सेवा एक डेमॉन होने जा रही है? या एक ठेठ ऑनलाइन वेब सेवा। इनमें से किसी के लिए आपको एक रीस्टफुल प्रकार लागू करना होगा। एक स्टेटलेस कनेक्शन का मतलब है। यह वह जगह है जहां एपीआई कुंजी का उपयोग किया जाता है; उदाहरण के लिए उपयोगकर्ता को पहचानने के लिए।

सौभाग्य से कोडिनेटर कई पुस्तकालयों और एक्सटेंशन के साथ एक है। इस तरह के पुस्तकालयों का एक उदाहरण यहां हो सकता है: https://github.com/philsturgeon/codeigniter-restserver

अब सुरक्षा चिंताओं के लिए: एपीआई कुंजी सत्र या किसी भी राज्य को प्रतिस्थापित करेगी। आपको एपीआई पर पूर्ण जांच करनी होगी। एपीआई लागू करने वाली कई साइटें एक ही अंतिम परिणाम के लिए अलग-अलग समाधान प्रदान करती हैं।

एपीआई कुंजी के साथ प्रमाणीकरण सरल है। आप इसे स्टोरेज प्रकार (डेटाबेस) के खिलाफ जांचेंगे।

यहाँ एक ट्यूटोरियल का उपयोग CodeIgniter और पुस्तकालय पहले से जुड़ा हुआ: http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/

यह कुछ हद तक अस्पष्ट हो सकता है, लेकिन जब से तुम न कोई विशेष समस्या है या स्पष्ट विशिष्ट होना करने के लिए अपनी हार्ड की जरूरत है।

संपादित करें:

उस मामले में यह बेहतर होगा एक RESTful इंटरफेस को लागू करने, ताकि अपने iPhone एप्लिकेशन भी उपयोगकर्ता कार्यक्षमताओं है कि आपकी सेवा प्रदान करता है का उपयोग कर सकते हैं। सबसे अच्छा तरीका सब कुछ एक तरह से सुलभ बनाना होगा। मतलब आईफोन कनेक्शन और वेब कनेक्शन के लिए अलग नियंत्रक/मॉडल नहीं है।

<?php 

class Auth extends CI_Controller{ 

    public function login(){ 
     //Check if their accessing using a RESTful interface; 
     $restful = $this->rest->check(); 
     if($restful){ 
     //Check for the API keys; 
     $apiKey = $this->input->get('apiKey'); 
     $secretKey = $this->input->get('secretKey'); 

     //If you have any rules apon the keys you may check it (i.e. their lengths,     
     //character restrictions, etc...) 
     if(strlen($apiKey) == 10 and strlen($secretKey) == 14) 
     { 
      //Now check against the database if the keys are acceptable; 
      $this->db->where('apiKey', $apiKey); 
      $this->db->where('secretKey', $secretKey); 
      $this->db->limit(1); 
      $query = $this->db->get('keys'); 
      if($this->db->count_all_results() == 1) 
      { 
      //It's accepted the keys now authenticate the user; 
      foreach ($query->result() as $row) 
      { 
       $user_id = $row->user_id; 
       //Now generate a response key; 
       $response_key = $this->somemodel->response_key($user_id); 
       //Now return the response key; 
       die(json_encode( array(
             'response_key' => $response_key, 
             'user_id' => $user_id 
            ) 
           ) 
        ); 

      } //End of Foreach 
      }//End of Result Count 
     }//End of length/character check; 
     } else { 
     //Perform your usual session login here...; 

     } 
    } 
} 

?> 

अब इस अनुरोध के इन प्रकार के प्रदर्शन के लिए सिर्फ एक छोटा सा उदाहरण है:

इसलिए उदाहरण के लिए आप निम्नलिखित नियंत्रक हो सकता था। यह किसी भी प्रकार के नियंत्रक पर लागू हो सकता है। यद्यपि यहां कुछ विकल्प हैं। आप प्रत्येक अनुरोध को apikey पास कर सकते हैं, और प्रत्येक बार रहस्य और प्रत्येक अनुरोध पर इसे सत्यापित कर सकते हैं। या आपके पास कुछ प्रकार की श्वेतसूची हो सकती है कि एक बार जब आप पहली बार सत्यापित हो जाएंगे तो इसके बाद प्रत्येक अनुरोध को श्वेतसूचीबद्ध किया जाएगा, या विपरीत पर काले रंग सूचीबद्ध होगा।

आशा इस मदद करता है, डैनियल

+0

Thanx Daniel.I've एक वेब application.I वेब सेवाओं का उपयोग करके अपनी एप्लिकेशन के मोबाइल App (iPhone) लागू करना चाहते हैं। तो क्या आप मुझे कोई विचार सुझा सकते हैं? – siva565

+0

मेरा जवाब अपडेट किया गया। – Daniel

संबंधित मुद्दे