2013-02-20 126 views
43

में एक रीस्टफुल एपीआई बनाने के लिए कैसे करें मैं नोड (और आम तौर पर सभी बैक-एंड वेब विकास) में एक नौसिखिया हूं, और मैंने नोड में एक रीस्टफुल एपीआई लिखना शुरू कर दिया है। कुछ चीजें हैं जो मैं अपने सिर को पाने की कोशिश कर रहा हूं।Node.js

मेरा एप्लिकेशन एक्सप्रेस और मोंगोस का उपयोग करता है, और मैं एपीआई संसाधनों के लिए आसानी से अपने सीआरयूडी मार्ग बनाने के लिए express-resource मॉड्यूल का उपयोग कर रहा हूं। लेकिन कुछ ऐसी चीजें हैं जिनसे मैं नाखुश हूं, और सोचता हूं कि मैं बेहतर कर सकता हूं।

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

दूसरा, मेरे संसाधन में बहुत सारे बॉयलरप्लेट कोड हैं। क्या यह वास्तव में Node.js में एक विश्वसनीय API बनाने का सबसे अच्छा तरीका है? क्या ऐसे अन्य मॉड्यूल हैं जो मुझे सीआरयूडी मार्ग बनाने में मदद करेंगे? मेरा मानना ​​है कि ऐसे तरीके हैं जिनसे आप बिना किसी कोड के अपने स्कीमा से सीआरयूडी मार्ग बना सकते हैं, लेकिन मुझे सच में यकीन नहीं है कि कैसे।

मैंने टॉवर.जेएस और कंपाउंडजेएस (औपचारिक रूप से रेलवेजेएस) जैसी परियोजनाएं देखी हैं जो ये व्यापक समाधान हैं जो यहां मेरे मुद्दों से कहीं अधिक हल करती हैं। शायद मुझे उनका उपयोग करना चाहिए, लेकिन मैं वास्तव में केवल Node.js एप्लिकेशन को एपीआई बनाना चाहता हूं और कुछ भी नहीं। मैं एपीआई के स्वतंत्र रूप से फ्रंट एंड से निपट रहा हूं।

कुछ संदर्भ प्रदान करने के लिए, यहां मेरी वर्तमान स्थिति है। वर्तमान में, मैं एक मॉडल नेवला में परिभाषित किया है:

var mongoose = require('mongoose') 
    , Schema = mongoose.Schema 
    , Link 

var LinkSchema = new Schema({ 
    uri: String, 
    meta: { 
    title: String, 
    desc: String 
    }, 
    shares: [{ 
    uid: Schema.Types.ObjectId, 
    date: Date, 
    message: String 
    }] 
}) 

Link = module.exports = mongoose.model('Link') 

इसके बाद, मैं CRUD मार्गों के लिए नियंत्रकों को परिभाषित:

var mongoose = require('mongoose') 
    , _ = require('underscore') 
    , Link = mongoose.model('Link') 

exports.load = function (req, id, fn) { 
    Link.findById(req.params.link, function (err, link) { 
    if (err) { 
     return res.send(err) 
    } 

    fn(null, link) 
    }) 
} 

exports.index = function (req, res) { 
    var filterByUser = req.query.user ? { 'shares.uid': req.query.user } : {} 

    Link.find(filterByUser, function (err, links) { 
    if (err) { 
     return res.send(err) 
    } 

    res.send(links) 
    }) 
} 

exports.create = function (req, res) { 
    var link = new Link(req.body) 

    link.save(function (err) { 
    if (err) { 
     // TODO: send 404 
     return res.send(err) 
    } 

    res.send(link) 
    }) 
} 

exports.show = function (req, res) { 
    res.send(req.link) 
} 

exports.update = function (req, res) { 
    req.link = _(req.link).extend(req.body) 

    req.link.save(function (err, link) { 
    if (err) { 
     return res.send(err) 
    } 

    res.send(link) 
    }) 
} 

exports.patch = exports.update 

exports.destroy = function (req, res) { 
    req.link.remove(function (err) { 
    if (err) { 
     return res.send(err) 
    } 

    res.send() 
    }) 
} 
अंत में

, मैं आवश्यक CRUD के लिए इन नियंत्रकों मैप करने के लिए express-resource मॉड्यूल का उपयोग एक्सप्रेस ऐप के शीर्ष पर मार्ग।

app.resource('api/links', require('../resources/links')) 

उत्तर

29

आप restify

ध्यान देना चाहिए आप एक्सप्रेस का उपयोग करना चाहते हैं, तो आप भी इस परियोजना है कि मैं बनाया बाहर की जाँच कर सकते हैं - node-restful कहा जाता है। https://github.com/jspears/mers

+0

नोड-रेस्टफुल और मेर्स साझा करने के लिए धन्यवाद। दोनों अच्छे लग रहे हैं। आप क्यों कहते हैं कि मुझे आराम करना चाहिए? ऐसा लगता है कि एक्सप्रेस जितना करता है उतना ही करता है, अगर कम नहीं होता ... मुझे यकीन नहीं है कि यह कैसे मदद करता है। अगर आप समझा सकते हैं तो यह अच्छा होगा! –

+0

मैंने आराम के बारे में अच्छी बातें सुनी हैं, लेकिन इसे देखने के बाद ऐसा लगता है कि यह वास्तव में आपके लिए सीआरयूडी संचालन उत्पन्न नहीं करता है। ऐसा लगता है कि मर्स शायद सबसे अच्छा विकल्प होगा। – Benoir

+0

धन्यवाद। मैं यह प्रश्न देखने के लिए अभी खुला हूं कि मुझे कोई अन्य सुझाव मिल रहा है या नहीं। –

5

Strongloop Loopback नोड/MongoDB एपीआई पैदा करने के लिए एक और अच्छा विकल्प हो करने के लिए seeems:

इस पुस्तकालय अधिक परिपक्व हो सकता है और यद्यपि अधिक विशेषताएं हैं लगता है। यह भी mocha tests उत्पन्न कर सकता है।

+0

+! लूपबैक में आपके मॉडल को डिज़ाइन करने और जेनरेट किए गए मार्गों का निरीक्षण करने में सहायता के लिए लोकहोस्ट पर एक वेब इंटरफ़ेस है। यह डेटाबेस अज्ञेयवादी है, इसलिए आप इसके पीछे मोंगोडीबी या माईएसक्यूएल का उपयोग कर सकते हैं। और यह आपको यह सुनिश्चित करने के लिए [एसीएल नियम] (https://docs.strongloop.com/display/public/LB/Controlling+data+access) निर्दिष्ट करने की अनुमति देता है ताकि उपयोगकर्ता केवल उस डेटा तक पहुंच सकें जिसकी उन्हें अनुमति है। – joeytwiddle

2

मैं बोइस + एक्सप्रेस की सलाह देता हूं। मोंगोस पर आधारित हजारों उपयोगकर्ता, मॉडल संचालित डिजाइन, बहुत लचीला, spec-compliant, HATEOAS/Level 3 तैयार हैं। पूरी तरह से मेरी सभी जरूरतों को फिट बैठता है। लेकिन फिर, मैं लेखक हूं :) https://github.com/wprl/baucis

4

Hapi पर एक नज़र डालें, यह वेब अनुप्रयोगों और एपीआई बनाने के लिए एक कॉन्फ़िगरेशन-केंद्रित ढांचा है जो इसे आराम से सेवा के रूप में उपयोग किया जाता है।

अन्य विकल्प sails.js और actionhero

+1

सही। पर। इसने मेरे लिए एक पूरी नई दुनिया खोला, एक फ्रंट एंड डूड। धन्यवाद ट्रेविस! – Cody

0

हैं मैं एक्सप्रेस का उपयोग किया गया है Node.js पर और एक्सप्रेस 4 में रूटर के योग के साथ मेरी RESTful एपीआई के निर्माण के लिए, तो यह और भी यह संरचना करना आसान है।यह यहां विस्तृत है http://www.codekitchen.ca/guide-to-structuring-and-building-a-restful-api-using-express-4/

0

https://hivepod.io/ आज़माएं और एक पूर्ण मीन स्टैक में अपना उदाहरण बनाएं। Hivepod BaucisJS + ExpressJS + MongoDB + AngularJS के शीर्ष पर बनाता है।

अस्वीकरण: मैं बिल्डिंग हाइवपॉड का काम करता हूं।

3

Strapi एक नया (2015) ढांचा है।

उनकी वेबसाइट पर व्यवस्थापक इंटरफ़ेस आपको एक एपीआई बनाने और मॉडल के बीच संबंध निर्दिष्ट करने की अनुमति देता है। (जैसा कि उनके परिचय वीडियो में देखा जा सकता है।)

हालांकि यह एक्सप्रेस पर नहीं, कोआ सर्वर पर चलाने के लिए डिज़ाइन किया गया है।

0

इस link

इस परियोजना में एक देखो एक ही परियोजना archutecture जो ASP.Net WebAPI 2.0 द्वारा पीछा किया जाता का उपयोग कर निर्माण कर रहा है। इसका मतलब है कि इसमें शुरुआत करने के लिए नियंत्रक, प्रमाणीकरण तंत्र आदि होंगे। आपको बस अपने स्वयं के नियंत्रक बनाना है।

0

मुझे आश्चर्य है कि कोई भी Nodal का उल्लेख नहीं किया गया है।

वेबसाइट से:

नोडल Node.js के लिए एक वेब सर्वर, जल्दी से और कुशलता एपीआई सेवाओं के निर्माण के लिए अनुकूलित है।

अपनी राय, स्पष्ट, बेवकूफ और अत्यधिक विस्तारणीय ढांचे को बढ़ावा देना, नोडल आपके और आपकी टीम के लिए सभी कठिन निर्णयों का ख्याल रखता है। यह है, तो आप एक छोटी समयावधि में एक प्रभावी उत्पाद बनाने पर ध्यान केंद्रित करने के लिए है, जबकि तकनीकी ऋण

यह सक्रिय रूप से बनाए रखा है कम से कम की अनुमति देता है (लेखन के समय) Github पर 3800 + सितारों है एक कमांड लाइन उपकरण अंतर्निहित है बॉयलरप्लेट कोड उत्पन्न करने के लिए, और कुल मिलाकर नौकरी जल्दी हो जाती है।

1

इस की जाँच करें: enter image description here

पंख के साथ आप दिन में मिनट और उत्पादन के लिए तैयार वास्तविक समय बैकेंड में प्रोटोटाइप का निर्माण और एपीआई आराम कर सकते हैं। गंभीरता से।

2

आजकल ढांचे के बारे में मुद्दे यहां दिए गए हैं।

जब आप गूगल से यहाँ आया खोज "सर्वश्रेष्ठ", "सबसे तेज" ढांचे बकवास, बकवास, लोगों को एक लाइन छोड़ देंगे कहते हैं, "अरे, आप इस sails.js, पंख, डर्बी आदि की कोशिश करनी चाहिए ..."

ठीक है सवाल यह है: - क्या आप केवल उन ढांचे के साथ मज़ेदार हैं - यदि हां, तो आप आसानी से ढांचे की एक सूची प्राप्त कर सकते हैं और फिर उन्हें बेंचमार्क करना शुरू कर सकते हैं।

  • मुझे लगता है कि ज्यादातर लोग "मैं एक उत्पाद बनाना चाहता हूं, एक साइट बनाना भविष्य में पैसा कमा सकता हूं, या कम से कम यह लोकप्रिय हो जाएगा";

ठीक है, आप खोजशब्दों और ध्यानों को यहां खोजते हैं, गलत है, "उत्पादन तैयार", "एंटरप्राइज़ तैयार", "केस स्टडी" उन खोजशब्दों को खोजने की कोशिश करें, या शायद वास्तव में जाएं।कॉम और सर्च node.js, और अधिक खुदाई करें कि node.js फ्रेमवर्क ज्यादातर कंपनियों का उपयोग करते हुए, जवाब शायद बस "एक्सप्रेस" कहें। नहीं लोकप्रिय एक Mojito याहू

से Hapi, Strongloop, या यहाँ तक कि उन चौखटे के लिए कम से कम आप बता सकते हैं:

अगर ऐसा है, Node.js ढेर से, चौखटे काफी संकुचित हो जाएगा एक उनमें से कुछ - "वे वास्तव में उत्पादन या उद्यम तैयार हैं" - क्योंकि वे कुछ समय से अन्य बड़े दिग्गजों से याहू से फॉर्म वॉलमार्ट का उपयोग कर रहे हैं, कुछ कुछ वर्षों तक भी।

क्या यह समझा सकता है कि क्यों रेल पर रूबी और Django अभी भी पूर्ण ढेर ढांचे के बाजारों पर हावी है? यहां तक ​​कि आप बाजार में आने के दौरान बहुत सारे "शांत" ढांचे को देखते हैं, उल्का, सेल्स.जेएस, गो रीवेल, जावा का प्ले स्पार्क जिसे आप नाम दे सकते हैं - इसका मतलब यह नहीं है कि ये ढांचे दो से भी बदतर हैं, बस इसका मतलब है कि उन्हें समय चाहिए बाजार जीतने के लिए।

एक और समस्याएं वर्तमान ढांचे के बहुत सारे एक प्रकार हैं, "रोर" के क्लोन; अंत उपयोगकर्ता की संभावना से, उन्हें केवल चीजों को पूरा करने में मदद करने के लिए एक चीज की आवश्यकता होती है, उत्पादक की आवश्यकता होती है, शुरुआत से अंत तक काम करने की ज़रूरत होती है, जैसे रॉबी ऑन रेल, जैसे मैकोज़, विंडोज़ की तरह, जैसे कुछ भी परीक्षण किया गया है उस समय, लोगों द्वारा दैनिक उपयोग किया गया है।

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

  • कोई संबंधित समस्या नहीं^_^