2016-03-16 7 views
11

मेरे पास पहले से ही लैरवेल वेब पेज हैं जहां मैं MySQL डेटाबेस से रिकॉर्ड जोड़/अपडेट/हटा/पढ़ सकता हूं। लैरावेल संस्करण 5.2.15लैरवेल एक्शन विधियों के साथ एंड्रॉइड ऐप इंटरैक्शन

अब, मुझे एंड्रॉइड ऐप के साथ डेटाबेस को एकीकृत करना होगा। ऐसा करने के लिए मुझे जेसन डेटा पोस्ट करना और पढ़ना है।

यहां प्रश्न है: क्या मेरे पास 2 सार्वजनिक कार्यवाही विधियां होनी चाहिए? वेब पेज के लिए सबसे पहले जो वेबपृष्ठ पर रिकॉर्ड दिखाएगा और दूसरा एंड्रॉइड में जेसन डेटा लौटाएगा।

मेरा मतलब था, जब मैं वेबपृष्ठ पर डेटा वापस करता हूं .. मुझे नीचे कोड लिखना होगा।

return View("View-Path", array("Data" => $Data)); 

लेकिन एंड्रॉइड ऐप के मामले में, मुझे जेसन डेटा का अनुरोध करना होगा।

कृपया सही दृष्टिकोण का सुझाव दें।

+0

मैं लार्वेल से परिचित नहीं हूं लेकिन मैंने 2 एंड्रॉइड ऐप बनाया है जो webservice (php) के साथ बीजिंग कर रहे हैं। मेरी पसंद एक ही डेटा पूल से 2 अलग डेटाटाइप का उपयोग करके 2 अलग-अलग ऐप की वजह से webservice है। (वेब ऐप के लिए MySQL, एंड्रॉइड ऐप के लिए एक्सएमएल) – HddnTHA

+0

क्या आपका ऐप केवल ऑनलाइन है या यह ऑफ़लाइन काम भी कर सकता है? –

+0

यह केवल ऑनलाइन काम करेगा। – Pankaj

उत्तर

2

आप एक Android ग्राहक से अपने एपीपी डेटा का उपयोग करने के लिए एक सरल एपीआई का विकास करना चाहिए:

मार्गों

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

प्रमाणीकरण

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

Laravel HTTP Basic Authentication

Laravel Json Web Token Authentication

Laravel OAUTH2

डेटा तक पहुंचने

में से कुछ हैं एक बार जब आप अपने मार्ग और प्रमाणीकरण को सेट कर लेंगे, तो आपको एपीआई मार्गों के माध्यम से अपना डेटा देना होगा। चूंकि आप अपने एपीपी मार्गों और एपीआई मार्गों में एक ही डेटा का उपयोग करते हैं, इसलिए आप डेटा बिल्डिंग के तर्क को लपेट सकते हैं और सेवाओं में पुनः प्राप्त कर सकते हैं और अपने एपीपी मार्गों और एपीआई मार्गों में डेटा प्राप्त करने के लिए सेवाओं का उपयोग कर सकते हैं।

एपीआई और एपीपी मार्गों के लिए विभिन्न नियंत्रकों का उपयोग करना, तुम हो:

//APP Controller method for route: www.app.com/app-route/users 
public function getUsers() 
{ 
    //wrap the logic to build the data inside the service 
    $service = App::make('your_service'); 

    //once is ready, get the built data from the service 
    $data = $service->getData(); 

    return View("View-Path", array("Data" => $data)); 
} 

//API Controller method for route: www.app.com/api/users 
public function getUsers() 
{ 
    //use the same service to build and get the data you need 
    $service = App::make('your_service'); 

    $data = $service->getData(); 

    return response()->json($data); 
} 

इस तरह से आप कर सकते हैं:

  • Encapsulate डेटा इमारत और सेवाओं में retrieveng, ताकि आप डॉन ' एपी और एपीआई मार्गों के बीच डेटा पुनर्प्राप्त करने के लिए कोड को डुप्लिकेट करने की आवश्यकता नहीं है

  • अलग-अलग सी है एपीपी या एपीआई मार्गों तक पहुंचने के लिए ऑनट्रॉलर; इसलिए यदि आप डेटा प्राप्त कर सकते हैं बदलने के रूप में आप की जरूरत है और या तो दृश्य या API क्लाइंट को

सेवा वर्ग

सेवा वर्ग मैं उल्लेख किया है के बारे में के बारे में करने के लिए यह काम करते हैं, यह हो सकता है बस एक या एकाधिक रैपर कक्षाएं जिन्हें आप एपीआई और एपीपी नियंत्रकों दोनों में कोड बनाने के बिना डेटा बनाने और प्राप्त करने के लिए उपयोग करते हैं। ऐसी कक्षाओं की संरचना इस बात पर निर्भर करती है कि आपका ऐप कैसे काम करता है।

उदाहरण के लिए मान लीजिए कि आप प्रत्येक उपयोगकर्ता की परियोजना के लिए कुछ डेटा की गणना करने की जरूरत है लगता है, एक चर में संग्रहीत और फिर viev पर भेज दें:

public function getUsers($request) 
{ 
    $user = Users::with('projects')->find($request->user_id)->get(); 

    $data = []; 
    foreach ($user->projects as $p) 
    { 
     //compute some data you need and store it in $data; 
    } 

    return View("View-Path", array("Data" => $data)); 
} 

अब अगर एपीआई में एक ही बात करना चाहता हूँ नियंत्रक, परियोजनाओं को प्राप्त करने और डेटा बनाने के लिए आपको इस कोड को दोबारा जवाब देना होगा। इससे बचने के लिए, आप एक सेवा वर्ग में डेटा का उपयोग 'लपेट' सकता है, और वाह नियंत्रकों में एक ही कक्षा का उपयोग करें:

सेवा वर्ग

public class UserDataBuilder 
{ 
    protected $user; 

    public function setUser(Authenticatable $user) 
    { 
     $this->user = $user; 
    } 

    public function getData() 
    { 

     $user = Users::with('projects')->find($this-user->id)->get(); 

     $data = []; 
     foreach ($user->projects as $p) 
     { 
      //compute some data you need and store it in $data; 
     } 

     return $data; 
    } 

} 

और दोनों एपीआई में एक ही कक्षा का उपयोग करें और एपीपी नियंत्रक:

//APP controller: get the data and pass to the view 
public function getUsers($request) 
{   
    $service = App::make(UserDataBuilder::class); 
    $service->setUser(User::find($request->user_id)->get()); 

    return View("View-Path", array("Data" => $service->getData()); 
} 

//API controller: get the data and convert to JSON 
public function getUsers($request) 
{  
    $service = App::make(UserDataBuilder::class); 
    $service->setUser(User::find(1)->get()); 

    return response()->json($data); 
} 
+0

क्या आपके पास कोई लिंक है जो '$ सेवा = ऐप :: मेक (' your_service ') के बारे में पूरी तरह से बताता है; '? क्या आपके पास कोई लिंक है जो सृजन के उपयोग और वेबसाइट और एंड्रॉइड से टोक्यो भेजने के लिए एपीआई भेजता है? – Pankaj

+0

@PankajGarg: '$ service' एक सामान्य उच्च स्तरीय कक्षा है जिसे आपको निर्धारित कार्यवाही के लिए पुनर्प्राप्त डेटा को लपेटने के लिए बनाना चाहिए: इसके बारे में कोई लिंक नहीं है, क्योंकि आपको इसे अपने आर्किटेक्चर के आधार पर बनाना चाहिए। मेरे पास टोकन प्रमाणीकरण के लिए कोई विशिष्ट लिंक नहीं है, लेकिन आप Google पर आसानी से जानकारी ढूंढ सकते हैं। या, एक बार आपके पास एक और विशिष्ट प्रश्न हो, तो स्टैक ओवरफ़्लो पर खोजें या पूछें – Moppo

+0

क्या मुझे एक ही प्रोजेक्ट या एक अलग प्रोजेक्ट के अंदर एक एपीआई विकसित करना चाहिए? – Pankaj

0

एंड्रॉइड के लिए आपको एक अलग वेब सेवा लिखनी है।

+2

क्या आप इसे उदाहरण के साथ अधिक जानकारी में वर्णित कर सकते हैं? यह एक टिप्पणी की तरह दिखता है। – Pankaj

0

आप ऐसा करने के लिए एक विधि का उपयोग कर सकते हैं। उदाहरण

public function someMethod(Request $request){ 

    $Data = ['laravel','is','awesome']; 

    // If the request has the content type is json return a json response 
    // So you android request will be true for this request 
    // else return data to webpage 
    if($request->isJson()){ 
     return response()->json($Data); 
    } 

    return View("View-Path", array("Data" => $Data)); 

} 
+0

यहां समस्या है मेरे सभी यूआरएल मिथवेयरवेयर के माध्यम से संरक्षित हैं और उनमें से अधिकतर प्रशासन प्राधिकरण भी मिडलवेयर लागू किए गए हैं, इसलिए जब मैं किसी विशेष मार्ग का उपयोग करके अनुरोध भेजूंगा ... मुझे केवल लॉगिन पृष्ठ मिलेगा। – Pankaj

+0

उपसर्ग और एपीआई मिडलवेयर के साथ एक और मार्ग समूह बनाएं लेकिन उसी संसाधन को इंगित करें – oseintow

+0

प्रत्येक विधि में, मैं डेटा के साथ दृश्य वापस कर रहा हूं, लेकिन, मेरे मामले में, मुझे बस 'json' वापस करने की आवश्यकता है। तो, मैं डेटा का सामान्य उपयोग कैसे कर सकता हूं? – Pankaj

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