2011-02-18 20 views
6

मैं स्क्रैच से एक PHP अनुप्रयोग बना रहा हूं (Kohana3 ढांचे का उपयोग कर)। मैं इसे आर्किटेक्ट करने जा रहा हूं ताकि मैं आंतरिक रूप से डेटा तक पहुंचने के लिए एपीआई का उपयोग कर सकूं। साथ ही, मैं अंततः इसे जनता को पेश करना चाहता हूं।मुझे एक एपीआई चाहिए। मुझे कहां से शुरू करना चाहिए?

मैं रीस्टफुल एक्सेस विधि का उपयोग करने की योजना बना रहा हूं। हालांकि, मुझे एपीआई को सही तरीके से सुरक्षित करने के बारे में स्पष्ट जानकारी खोजने में कठिनाई हो रही है। दूसरे शब्दों में, मैं एपीआई हस्ताक्षर और एक्सेस कैसे कार्यान्वित करूं?

उत्तर

5

आप frapi आजमा सकते हैं। यह आपको जल्दी से अपना रीस्टफुल एपीआई बनाने की अनुमति देगा, जिसे आप अपने एप्लिकेशन के लिए उपयोग कर सकते हैं, और बाद की तारीख में उसी एपीआई को सार्वजनिक रूप से बेनकाब कर सकते हैं।

+0

वाह फ्रैपी बहुत प्यारी लगती है, हालांकि एक बार जब आप चारों ओर क्लिक करना शुरू करते हैं तो उनकी साइट कहीं अधिक स्पष्ट होती है। – Justin

1

मुझे लगता है कि शुरू करने के लिए एक अच्छी जगह डिजिटल हस्ताक्षर के बारे में सामान्य जानकारी पर पढ़ा जाएगा। विकिपीडिया एक महान संसाधन http://en.wikipedia.org/wiki/Public_Key_Infrastructure या http://en.wikipedia.org/wiki/X.509 है।
एक बुनियादी स्तर पर मैं प्रत्येक ग्राहक को एक निजी कुंजी दूंगा। क्लाइंट लाइब्रेरी में मैं कुंजी एन्क्रिप्ट करूंगा। जब कोई ग्राहक अनुरोध करता है कि कुंजी उस व्यक्ति को जारी की गई है जिसे आपने उस विशेष ग्राहक को जारी किया है।

+1

इसे देखने का एक और लिंक http://www.oauth.net/ – NotMe

+1

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

0

मैंने मूल प्रमाणीकरण के साथ कोडइग्निटर का उपयोग करके एक PHP REST API बनाया है, (उपयोगकर्ता नाम/पासवर्ड के रूप में "कंपनी आईडी" और "एपीआई कुंजी" प्रदान करना)। बाद में हमने पाया कि सत्र कुंजी को प्रावधान करना आवश्यक था जो सीधे एपीआई कुंजी से संबंधित थे, केवल समाप्ति समय के साथ।

असल में, हमने URL में "विधि" प्रदान किए जाने के आधार पर हमारे डेटास्टोर (nosql विविधता :) में विभिन्न प्रकार के डेटा पूछे। हमने कोडइग्निटर द्वारा प्रदान की गई "सेगमेंट" क्षमता का उपयोग कर इसे एक्सेस किया।

फिर हमने प्रत्येक प्रतिक्रिया को "json_encode" के साथ लपेट लिया जो वापस लौटाया गया था और हमने सुरक्षा के लिए एक HTTPS कनेक्शन भी उपयोग किया था।

क्लाइंट क्लास के लिए हमने PHP क्लासिक-> get_my_data ($ api_key) को कॉल में सबकुछ लपेट लिया, PHP लिबकर्ल का उपयोग करके एक परत के साथ, जो बेसिक ऑथ प्रदान करने के लिए वास्तव में अच्छी तरह से काम करता है।

आशा इस मदद करता है,

CURL_GET

private function curl_get($url, $apikey, $co) 
    { 
     $curl_handle = curl_init(); 
     curl_setopt($curl_handle, CURLOPT_URL, $url); 
     curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2); 
     curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE); 
     curl_setopt($curl_handle, CURLOPT_USERPWD, $co.":".$apikey); 
     curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($curl_handle, CURLOPT_DNS_USE_GLOBAL_CACHE, FALSE); 

     $buffer = curl_exec($curl_handle); 
     $error = curl_error($curl_handle); 
     curl_close($curl_handle); 
     // check for success or failure 
     if (empty($buffer)) { 
     //echo 'Something went wrong :(error: '.$error.'<Br>'; 
     } else { 
     return $buffer; 
     } 
    } 
+0

क्लाइंट क्लास द्वारा, क्या आपका मतलब मुख्य इंटरफ़ेस है जो क्लाइंट रीस्टफुल यूआरएल के साथ बात करते हैं? जैसे, क्लाइंट [नियंत्रक], get_name [method] जैसे URL: site.com/api/client/123?apikey=12345 जो $ क्लाइंट-> get_name ('123', apikey) को निकालता है? – Andres

+0

हां ठीक है, तो क्लाइंट कक्षा को शामिल कर सकता है और उसे php फ़ाइल के अंदर एक्सेस कर सकता है, मैं अपना उत्तर CURL के लिए "get" फ़ंक्शन के उदाहरण के साथ अपडेट करूंगा। –

0

आपका प्रश्न थोड़ा इस से भी बड़ा है, लेकिन मैं आरईएसटी के बारे में एक छोटा अवलोकन प्रदान कर सकता हूं।

मुझे आरईएसटी के साथ मिला है, यह है कि प्राकृतिक कुंजी के बजाय अंतर्निहित डेटा मॉडल के लिए कृत्रिम कुंजी का उपयोग करना सबसे अच्छा है। https://server/yourApp/viewUser/1234.html इस आईडी 1234. साथ उपयोगकर्ता को दिखाने हैं लेकिन यदि आप प्राकृतिक चाबी इस्तेमाल आप इस https://server/yourApp/viewUser/Bob.html जैसी URL कुछ है या बजाय बॉब की अगर इसकी "बॉब एक्स" या बुरा हो सकता है ":

उदाहरण के लिए, RESTfull यूआरएल पर विचार बॉब? कुंजी = मूल्य "। आप अमान्य यूआरएल उत्पन्न करने के बारे में सोचना नहीं चाहते हैं।

+0

धन्यवाद, लेकिन वह जवाब नहीं जिसे मैं ढूंढ रहा था। मैं प्रमाणीकरण कुंजी की तलाश में हूं ... प्रकार। – Andres

+0

मुझे फ्रैपी के उस भाग को समझ में नहीं आया (मुझे नहीं लगता कि वे कहां परिभाषित करते हैं कि "एपीआई कुंजी" क्या है। मैंने विषयों और प्राधिकरणों के संदर्भ में अपना अभिगम नियंत्रण किया। आप HTTP बेसिक/एसएसएल या एसएसएल का उपयोग कर सकते हैं एक विषय आईडी स्थापित करने के लिए पारस्परिक लेख, और जो भी आप प्राधिकरण के लिए चाहते हैं। – Justin

2

ओएथ एक अच्छा विकल्प होगा। तो एक ही कुंजी/मूल्य जोड़ी होगी। आप Mashape पर भी देखना चाहते हैं लेकिन पूरी तरह से यह सुनिश्चित नहीं है कि आप जो भी करने की कोशिश कर रहे हैं वह ठीक है।

1

ऐसा करने के लिए 3 स्केल (http://www.3scale.net/) पर एक नज़र डालें - यह प्रमाणीकरण, अभिगम नियंत्रण, नीतियों, दर सीमा आदि को संभालता है और महत्वपूर्ण यातायात के लिए स्वतंत्र है। इन सुविधाओं को सक्षम करने के लिए सिस्टम में प्लगइन करने के लिए हमारे पास एक PHP मॉड्यूल है। (अस्वीकरण - मैं वहां काम करता हूं - लेकिन उम्मीद है कि यह उपयोगी है!)

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