दिलचस्प पोस्ट
कैसे संस्करण एक डेटाबेस में एक रिकॉर्ड को नियंत्रित करने के लिए सी # में विविध कीवर्ड का उपयोग वीबीए मैक्रो के साथ कार्यपुस्तिका के भीतर एक एक्सेल टेबल पर एसक्यूएल प्रश्नों को निष्पादित करना सीएलआई उपकरण के लिए डीजेन्गा का उपयोग करना क्या HTML5 स्क्रिप्ट टैग की आवश्यकता प्रकार = "javascript" है? Matplotlib तितर बितर साजिश किंवदंती मैं अलग डेटाबेस के कई संदर्भों के लिए ईएफ माइग्रेशन कैसे सक्षम करूं? एक स्थिर सरणी के आकार को चर क्यों नहीं बनाया जा सकता? कैसे RecyclerView में आइटम के बीच डिवाइडर और रिक्त स्थान जोड़ने के लिए? एक ही मशीन पर आधिकारिक कई पायथन संस्करण हैं? JCIFS स्ट्रीमिंग फाइलों के साथ एंड्रॉइड सर्वरसेटिंग प्रोग्रामिंग किसी स्थिति या कम पर सेट बिट्स को गिनने का कारगर तरीका क्या है? PHP घातक त्रुटि: कक्षा पुनर्व्याख्या नहीं कर सकता मैं गैर-समर्थित Jekyll साइट प्लगइन्स का उपयोग करने के लिए GitHub कैसे कॉन्फ़िगर करूं? WPF में XAML में DataContext सेट करना

प्ले पर शोकहारा! ढांचा

हम मुख्य रूप से मोबाइल एप पर सामग्री की प्रोजेक्ट की योजना बना रहे हैं, लेकिन एक वेबसाइट की आवश्यकता है।

मेरा प्रश्न यह है कि क्या हमारे मोबाइल एप्लिकेशन के लिए रीस्ट एपीआई विकसित करने के लिए जर्सी या रिस्टलेट का उपयोग करने के लिए समझदारी होती है, और फिर प्ले का उपयोग करें! वेबसाइट की सेवा के लिए

या क्या यह सिर्फ खेलने का उपयोग करने के लिए और अधिक समझ में आता है! यह सब करने के लिए? यदि हां, तो प्ले के साथ आराम कैसे करें! ढांचा?

Solutions Collecting From Web of "प्ले पर शोकहारा! ढांचा"

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

GET /user/{id} Application.user POST /user/ Application.createUser PUT /user/{id} Application.updateUser DELETE /user/{id} Application.deleteUser 

आप यहां किसी भी प्रकार की सामग्री निर्दिष्ट नहीं करते हैं। ऐसा करना IMHO केवल आवश्यक है जब आप विशिष्ट संसाधनों के लिए "विशेष" यूआरआई चाहते हैं एटम / आरएसएस में हमेशा से लौटने के लिए /users/feed/ लिए मार्ग की घोषणा करना।

अनुप्रयोग नियंत्रक इस तरह दिखता है:

 public static void createUser(User newUser) { newUser.save(); user(newUser.id); } public static void updateUser(Long id, User user) { User dbUser = User.findById(id); dbUser.updateDetails(user); // some model logic you would write to do a safe merge dbUser.save(); user(id); } public static void deleteUser(Long id) { User.findById(id).delete(); renderText("success"); } public static void user(Long id) { User user = User.findById(id) render(user); } 

जैसा कि आप देख सकते हैं कि मैंने केवल getUserJSON विधि को हटा दिया है और getUser विधि का नाम बदल दिया है। विभिन्न सामग्री प्रकारों के लिए आपको काम करने के लिए अब कई टेम्पलेट बनाए हैं प्रत्येक इच्छित सामग्री प्रकार के लिए एक। उदाहरण के लिए:

user.xml:

 <users> <user> <name>${user.name}</name> . . . </user> </users> 

user.json:

 { "name": "${user.name}", "id": "${user.id}", . . . } 

user.html:

 <html>...</html> 

यह दृष्टिकोण ब्राउज़र को हमेशा एचटीएमएल दृश्य देता है, क्योंकि सभी ब्राउज़रों ने एक पाठ / एचटीएमएल सामग्री प्रकार उनके स्वीकार हेडर में भेजते हैं। अन्य सभी क्लाइंट (संभवतः कुछ जावास्क्रिप्ट-आधारित एजेएक्स अनुरोध) अपनी इच्छित सामग्री प्रकार को परिभाषित कर सकते हैं। JQuery के AJAX () विधि का उपयोग करके आप निम्न कर सकते हैं:

 $.ajax({ url: @{Application.user(1)}, dataType: json, success: function(data) { . . . } }); 

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

यदि आप विकास के लिए ग्रहण का उपयोग कर रहे हैं तो मुझे सुझाव है कि आप REST क्लाइंट प्लगइन का उपयोग कर सकते हैं जो आपको अपने मार्गों और उनके संबंधित सामग्री प्रकार का परीक्षण करने देता है।

यह अभी भी एक लोकप्रिय सवाल है, लेकिन सबसे ज्यादा वोट वाले उत्तर नाटक के वर्तमान संस्करण के साथ अद्यतित नहीं हैं। यहां 2.2.1 खेलने के साथ काम कर रहे एक उदाहरण:

conf / मार्गों:

 GET /users controllers.UserController.getUsers GET /users/:id controllers.UserController.getUser(id: Long) POST /users controllers.UserController.createUser PUT /users/:id controllers.UserController.updateUser(id: Long) DELETE /users/:id controllers.UserController.deleteUser(id: Long) 

एप्लिकेशन / नियंत्रक / UserController.java:

 public static Result getUsers() { List<User> users = Database.getUsers(); return ok(Json.toJson(users)); } public static Result getUser(Long id) { User user = Database.getUser(id); return user == null ? notFound() : ok(Json.toJson(user)); } public static Result createUser() { User newUser = Json.fromJson(request().body().asJson(), User.class); User inserted = Database.addUser(newUser); return created(Json.toJson(inserted)); } public static Result updateUser(Long id) { User user = Json.fromJson(request().body().asJson(), User.class); User updated = Database.updateUser(id, user); return ok(Json.toJson(updated)); } public static Result deleteUser(Long id) { Database.deleteUser(id); return noContent(); // http://stackoverflow.com/a/2342589/1415732 } 

प्ले का उपयोग करें! यह सब करने के लिए प्ले में बाकी सेवाओं को लिखना बहुत आसान है

सबसे पहले, मार्ग फाइल ने उन मार्गों को लिखने के लिए सरल बनाता है जो REST दृष्टिकोण के अनुरूप हैं।

फिर, आप अपने एपीआई पद्धति के लिए नियंत्रक में अपने कार्यों को लिखते हैं, जिसे आप बनाना चाहते हैं।

आप परिणाम (XML, JSON आदि) को कैसे वापस करना चाहते हैं इसके आधार पर, कुछ तरीके हैं जिनका आप उपयोग कर सकते हैं उदाहरण के लिए, रेंडरजेएसओएन पद्धति का उपयोग करते हुए, परिणामों को बहुत आसानी से प्रदान किया जा सकता है। यदि आप एक्सएमएल को रेंडर करना चाहते हैं, तो आप ऐसा ही कर सकते हैं जैसे आप अपने व्यू में एक HTML दस्तावेज़ बनाएंगे

यहाँ एक स्वच्छ उदाहरण है

मार्ग फ़ाइल

 GET /user/{id} Application.getUser(format:'xml') GET /user/{id}/json Application.getUserJSON POST /user/ Application.createUser PUT /user/{id} Application.updateUser DELETE /user/{id} Application.deleteUser 

एप्लिकेशन फ़ाइल

 public static void createUser(User newUser) { newUser.save(); renderText("success"); } public static void updateUser(Long id, User user) { User dbUser = User.findById(id); dbUser.updateDetails(user); // some model logic you would write to do a safe merge dbUser.save(); renderText("success"); } public static void deleteUser(Long id) { // first check authority User.findById(id).delete(); renderText("success"); } public static void getUser(Long id) { User user = User.findById(id) renderJSON(user); } public static void getUserJSON(Long id) { User user = User.findById(id) renderJSON(user); } 

getUser.xml फ़ाइल

 <user> <name>${user.name}</name> <dob>${user.dob}</dob> .... etc etc </user> 

जेएक्स-आरएस कार्यान्वयन के साथ एकीकृत करना, Play के अंतर्निहित HTTP रूटिंग का उपयोग करने के लिए एक संभावित वैकल्पिक दृष्टिकोण है। एक आरामदायक उदाहरण के लिए, आराम से खेलते देखना ! मॉड्यूल

यह दृष्टिकोण समझ में आता है अगर आप पहले से ही जेएक्स-आरएस में निवेश कर चुके हैं, या आपको कुछ उन्नत सुविधाओं की आवश्यकता है जो कि जेएक्स-आरएस सामग्री वार्ता के रूप में प्रदान करता है। यदि नहीं, तो HTTP अनुरोधों के जवाब में सीधे JSON या XML सेवा देने के लिए सीधे Play का उपयोग करना आसान होगा।

आप पर एक नजर रखना चाहिए

http://www.lunatech-labs.com/open-source/resteasy-crud-play-module

यह एक मॉड्यूल है जो स्वचालित रूप से एक आराम इंटरफ़ेस का निर्माण करता है, जैसे कि क्रूड मॉड्यूल स्वचालित रूप से एक व्यवस्थापक क्षेत्र बनाता है …

ऐसा लगता है कि यह दृष्टिकोण प्ले संस्करण 1.2.3 में टूट गया है। यदि आप @seb द्वारा किया गया स्रोत डाउनलोड करते हैं और पहले https://github.com/sebhoss/play-user-sample का उल्लेख किया है, तो JSON ऑब्जेक्ट के साथ POST का उपयोग करते हुए एक नए उपयोगकर्ता ऑब्जेक्ट का निर्माण अब संभव नहीं है।

जेसन और एक्सएमएल पोस्ट्स के साथ इस्तेमाल किए गए निर्माण के लिए आपको विशिष्ट तरीकों की आवश्यकता है। यहां उल्लिखित: https://groups.google.com/forum/#!topic/play-framework/huwtC3YZDlU