Подтвердить что ты не робот

Как лучше всего создать 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'))
4b9b3361

Ответ 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 за несколько дней. Серьезно.

Ответ 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 (на момент написания), имеет встроенный инструмент командной строки для генерации кода шаблона и в целом быстро выполняет задание.