Как лучше всего создать RESTful API в Node.js
Я новичок в Node (и, как правило, весь внутренний веб-дизайн), и я начал писать RESTful API в Node. Есть несколько вещей, которые я пытаюсь развернуть.
Мое приложение использует Express и Mongoose, и я использую модуль express-resource
, чтобы легко создавать маршруты CRUD для ресурсов API. Но есть несколько вещей, в которых я недоволен, и думаю, что я мог бы сделать лучше.
Первый - Мангуст. Если я хочу написать тесты для своего API, у меня нет способа укоротить Mongoose, чтобы заставить его записывать данные в память. Тем не менее, все учебные пособия, похоже, указывают на Mongoose, и я действительно не уверен, что я должен использовать.
Во-вторых, у моего ресурса, похоже, много шаблонов. Это действительно лучший способ создать RESTful API в Node.js? Существуют ли другие модули, которые помогут мне создать мои CRUD-маршруты? Я считаю, что есть способы создать CRUD-маршруты прямо из вашей схемы, без кода больше, но я действительно не уверен, как это сделать.
Я видел проекты там, такие как Tower.js и CompoundJS (формально RailwayJS), которые кажутся такими всеобъемлющими решениями, которые решают гораздо больше, чем мои проблемы здесь. Возможно, я должен использовать их, но я действительно хочу, чтобы приложение Node.js было API и ничего больше. Я имею дело с интерфейсом независимо от API.
Чтобы обеспечить некоторый контекст, вот моя текущая ситуация. В настоящее время у меня есть модель, определенная в Mongoose:
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()
})
}
Наконец, я использую модуль express-resource
для сопоставления этих контроллеров с необходимыми маршрутами CRUD поверх приложения Express.
app.resource('api/links', require('../resources/links'))
Ответы
Ответ 1
Вы должны изучить restify
Если вы хотите использовать экспресс, вы также можете проверить этот проект, который я сделал, - node-restful.
Эта библиотека выглядит намного более зрелой и имеет больше возможностей: https://github.com/jspears/mers
Ответ 2
Strongloop Loopback - еще одна хорошая альтернатива для создания API Node/MongoDB. Он также может генерировать мокко тесты.
Ответ 3
Взгляните на Hapi свою конфигурационную структуру для создания веб-приложений и API-интерфейсов, которые используются в качестве успокоительной службы.
Другие параметры sails.js и actionhero
Ответ 4
Strapi - это новая (2015) структура.
Интерфейс администратора на своем веб-сайте позволяет вам создавать API и определять отношения между моделями. (Как можно видеть в их вступительном видео.)
Однако он предназначен для запуска на сервере Koa, а не в Express.
Ответ 5
Я рекомендую Baucis + Express. Тысячи пользователей, модельный дизайн на основе Mongoose, очень гибкий, совместимый со спецификацией, HATEOAS/Level 3 готов. Полностью удовлетворяет все мои потребности. Но тогда я автор:) https://github.com/wprl/baucis
Ответ 6
В настоящее время проблемы с фреймворками.
Когда вы приходите сюда из поисковой системы Google "лучший", "самый быстрый", "бла", "бла", люди откажутся от строки: "Эй, вы должны попробовать этот sails.js, перья, Derby и т.д."
Ок Вопрос:
- Вы просто для удовольствия с этими фреймворками - если да, вы можете легко получить список фреймворков, а затем начать сравнивать их.
- Я предполагаю, что большинство людей: "Я хочу создать продукт, построить сайт, который может заработать деньги в будущем или, по крайней мере, станет популярным";
Хорошо, все, что вы ищете по ключевым словам и внимательным здесь, неверно, попробуйте выполнить поиск "готово к производству", "готово к предприятию", "изучить случай" эти ключевые слова, или, возможно, перейти на Indeed.com и искать node.js, далее выкачайте, что node.js framework большинство компаний использует, ответ может просто просто сказать "выразить".
если это так, из node.js stack, рамки будут в значительной степени сужены несколькими из них: Hapi, Strongloop или даже не популярный Mojito из Yahoo
Для этих фреймворков, по крайней мере, вы можете сказать: "Они действительно готовы к производству или предприятиям", - потому что они использовали форму Walmart, от Yahoo, от других крупных гигантов с некоторого времени, некоторые даже в течение нескольких лет.
Может ли это объяснить, почему Ruby on rails и Django по-прежнему доминируют на рынках полного стека? даже вы видите множество "крутых" фреймворков, которые продолжают появляться на рынке, Meteor, Sails.js, Go Revel, Java Play Spark, что бы вы ни назвали - это не значит, что эти рамки хуже, чем два, просто означают, что им нужно время чтобы выиграть рынок.
Другие проблемы, существующие в нынешних рамках, - это нечто вроде "все-в-одном", клон "Ror"; От перспективы конечных пользователей им просто нужно что-то, чтобы помочь им добиться успеха, получить продуктивность, что-то нужно для работы от начала до конца, например Ruby on Rails, например MacOS, например Windows, как и все, что было протестировано к тому времени, ежедневно используется людьми.
Ответ 7
Проверьте это:
![введите описание изображения здесь]()
С Feathers вы можете создавать прототипы за считанные минуты и готовые готовые в реальном времени бэкэнды и REST API за несколько дней. Серьезно.
Ответ 8
Я использую Express для создания моих RESTful API на Node.js, а с добавлением Router в Express 4 его еще проще структурировать. Здесь подробно описано http://www.codekitchen.ca/guide-to-structuring-and-building-a-restful-api-using-express-4/
Ответ 9
Попробуйте https://hivepod.io/ и создайте свой пример в полном стеке MEAN. Hivepod построен поверх BaucisJS + ExpressJS + MongoDB + AngularJS.
Отказ от ответственности: я работаю над созданием Hivepod.
Ответ 10
Посмотрите на ссылку
Этот проект создается с использованием той же архитектуры проекта, за которой следует ASP.Net WebApi 2.0. Это означает, что с самого начала будут иметь контроллеры, механизм аутентификации и т.д. Все, что вам нужно сделать, это создать свои собственные контроллеры.
Ответ 11
Я удивлен, что никто не упомянул Nodal.
С веб-сайта:
Nodal - это веб-сервер для Node.js, оптимизированный для создания служб API быстро и эффективно.
Обладая собственной упрямой, явной, идиоматической и широко расширяемой структурой, Nodal заботится обо всех тяжелых решениях для вас и вашей команды. Это позволяет сосредоточиться на создании эффективного продукта за короткий промежуток времени при минимизации технического долга
Он активно поддерживается, имеет 3800+ звезд в Github (на момент написания), имеет встроенный инструмент командной строки для генерации кода шаблона и в целом быстро выполняет задание.