Вопрос по rest – Как предоставить RESTful веб-сервис с помощью Meteor

47

Как ты собираешься создать спокойный веб-сервис с помощью Meteor? Я хотел бы создавать приложения в Appcelerator, которые подключаются к одному и тому же бэкэнду.

Метеор может решить эту проблему?

По состоянию на 2015 год посмотрите на Ответ Гади для записи Метеоропедии по API REST и на ответ Кроссе сравнение пакетов REST API. Обсуждение для встраивания API REST в ядро на Hackpad. Dan Dascalescu
@ andrew-zielinski Считаете ли вы, что более поздний ответ будет правильным? Вы выбрали текущий полностью устаревший и сбивающий с толку людей, плохо знакомых с этой темой (таких как я). Обычно я не прокручиваю дальше, чтобы прочитать другие ответы, но, к счастью, в этом случае я нашел решение Дэна и ответ Гади. Метеор продвигается дальше. Благодарност a4xrbj1

Ваш Ответ

9   ответов
2

что вы, вероятно, могли бы создать службу RESTful с использованием Meteor, но на самом деле это не то, для чего предназначена среда - одно из главных преимуществ Meteor - тесное взаимодействие между клиентом и сервером, а веб-служба не имеет на стороне клиента. Я бы порекомендовал заняться написанием серверной части веб-сервиса в node.js или что-то вродеhttps: //github.com/intridea/grap если тебе нравится Руби.

Метеор предназначен для этого. Это просто еще не написано :) Это вполне естественно для отображения запросов и мутаций наMeteor.Collection к конечной точке REST, которую могут вызывать клиенты, написанные с использованием любой технологии. debergalis
Потрясающе. Есть идеи, когда эта функциональность появится? :) Andrew Zielinski
Согласен, это приятно слышать, и это имеет большой смысл. Очевидно, что довольно естественно создать уровень API, где только одно использование предназначено для веб-интерфейса, но тесная связь между пользовательским интерфейсом и сервером, по-видимому, сейчас является приятным местом Meteor. С нетерпением жду эволюции. Masonoise
33

http: //www.meteorpedia.com/read/REST_AP

В публикации рассматриваются все 6 вариантов создания интерфейсов REST: от самого высокого уровня (например, умных пакетов, которые все для вас обрабатывают) до самого низкого уровня (например, написание собственного connectHandler).

Кроме того, в статье рассказывается о том, как правильно использовать REST-интерфейс в Meteor, упоминаются инструменты тестирования Meteor REST и объясняются распространенные ошибки, такие как проблемы безопасности CORS.

Не могли бы вы добавить мой пакет к этой статье? Я только что опубликовал его, и он был вдохновлен RestStop2 и построен на Iron Router: Github.com / krose72205 / Метеор-restivus. Я действительно нашел RestStop2 через вашу статью, так что спасибо! kahmali
О, классно! Я добавлю это туда, когда у меня будет шанс. Еще раз спасибо за вашу работу над Метеорпедией. Это потрясающий ресурс! kahmali
@ krose, конечно, "рецензия" - это просто страница в вики ... редактируемая кем угодно gadicc
ссылка сейчас не работает Sunil Hirole
Спасибо, что дали мне знать, обратно! надеюсь, что вся информация по-прежнему актуальна сегодня. gadicc
22

Во, но подведем итог:

Для добавления методов RESTful поверх ваших данных посмотрите API-интерфейс Collection, написанный для Meteor:

https: //github.com/crazytoad/meteor-collectionap

Что касается аутентификации для доступа к базе данных, взгляните на этот проект:

https: //github.com/meteor/meteor/wiki/Getting-started-with-Aut

Оба, безусловно, инфантильны в разработке, но вы можете создать RESTful API и довольно легко интегрировать его с мобильным собственным клиентом.

Поскольку моя правкаStephanMuller поменял @, помните, что ответ в его нынешнем виде (9 июня 2015 г.) совершенно бесполезен. Пакет Collection API, связанный с ним, был заброшен в течение многих лет, а руководство по метеоритуру по внедрению Auth в Метеоре устарело с 2012 года. Ссылка даже перенаправляет с него. Но у нас есть правила модерации для применения на SO! Dan Dascalescu
Это совершенно неправильно в наши дни. downvoted. oligofren
@ StephanMuller Не могли бы вы объяснить, почему вы удалили редактирование Дэна? Ответ в его нынешнем виде совершенно неправильный, так зачем оставлять его с неточной информацией в качестве наиболее одобренного ответа? Это может ввести в заблуждение людей, которые ошибочно полагают, что системы голосования и модерации SO работают эффективно. kahmali
Meteor теперь поддерживает аутентификацию; есть ли шанс отредактировать ваш ответ? Dan Dascalescu
@ krose меняет первоначальное намерение автора, что является одной из причин, по которым SO предлагает отклонить отзыв при редактировании. Обновление, подобное тому, которое он опубликовал, должно быть размещено в комментарии и / или в новом ответе. Stephan Muller
17

что это старый поток, но на тот случай, если кто-нибудь наткнется на него, я опубликовал пакет для написания REST API в Meteor 0.9.0 +:

https: //github.com/kahmali/meteor-restivu

Это было вдохновлено RestStop2 и построен с Железный Маршрутизатор на стороне сервера маршрутизации. По моему не столь скромному мнению, это лучшее решение, чем все, что размещено здесь до сих пор.

ОБНОВИТЬ Чтобы выяснить, почемуI думаю, что это «лучшее» решение, чем упомянутое, я просто укажу на различия между ними:

CollectionAPI:
CollectionAPI ограничивается раскрытием самых базовых операций CRUD в ваших коллекциях. Для моего использования, которое использует REST API в мобильных приложениях, отправка целых документов может быть чрезвычайно расточительной, и большую часть времени мне требуется дополнительная обработка данных (например, отправка сообщения Google Cloud в виде Конечная точка REST для добавления друга, но только если он успешно добавлен). CollectionAPI дает вам ловушку, которая запускается до выполнения конечной точки, но, насколько я понимаю, непосредственно перед ответом ничего не происходит, поэтому у вас нет способа изменить возвращаемые данные. Для аутентификации CollectionAPI позволяет вам определить authToken, который должен передаваться с каждым запросом. Это действует больше как традиционный ключ API, так как кажется, что оно жестко запрограммировано в вашем приложении и поэтому будет одинаковым для каждого пользователя.

Restivus, поскольку он не ограничивается автоматизированной работой с коллекциями, дает вам полный контроль над конечными точками. Теперь он предоставляет все функциональные возможности, включенные в Collection API. Он также поддерживает аутентификацию пользователей и разрешения ролей, так что вы можете идентифицировать пользователя, выполняющего запрос (и легко получить доступ к этому пользователю из аутентифицированных конечных точек). Он также предоставляет конечную точку входа и выхода из системы, чтобы помочь с этим. В конце я приведу пример кода для Restivus.

HTTP.publish:
Из того, что я понимаю, это похоже на CollectionAPI в том смысле, что оно ограничено раскрытием базовых операций CRUD над коллекциями. Этот более конкретно связан с публикацией Метеора и позволяет использовать функцию публикации для обработки запросов GET. Я смущен документацией, но она может иметь или не иметь некоторую базовую аутентификацию. Я не использовал это раньше, но я не большой поклонник API для него, который кажется немного неуклюжим. Как только я буду публиковать более широко, я попытаюсь вернуться к нему. У той же команды есть еще один пакет, который называется HTTP.methods, который не дает вам доступа к функциям публикации, но имеет API, аналогичный Restivus, и в то же время схожую функциональность.

Restivus «лучше», потому что он не ограничивает вас в использовании ваших функций публикации, и, следовательно, позволяет более точно контролировать ваши конечные точки. Если вы просто хотите представить свои функции публикации внешнему API, я бы порекомендовал вам использовать HTTP.publish. Restivus также имеет более простой API и поддерживает метод HTTP PATCH (который, по-видимому, не существует ни в одном другом пакете). Их пакет HTTP.methods очень похож на Restivus, за исключением того, что в нем отсутствует поддержка PATCH, и, хотя он предлагает некоторую базовую аутентификацию, я полагаю, что у вас есть возможность только аутентифицировать все конечные точки, или ни одной. Restivus позволит вам контролировать это на уровне конечной точки (а не только на маршруте). Права доступа к ролям (например, пользователь, администратор) на конечных точках также доступны в Restivus, но я ничего не вижу по этому поводу для HTTP.methods.

Метеоритный маршрутизатор:
Это устарело в пользу Iron Router, см. Ниже.

Железный Маршрутизатор:
Iron Router великолепен, но он не предназначен специально для создания REST API. Недавно они добавили функции, соответствующие методам HTTP (GET, POST и т. Д.), Но они не поддерживают какую-либо форму аутентификации, и у вас есть доступ только к объектам запросов и ответов Node более низкого уровня, так что вы будете быть вынужденным научиться работать с ними. Как только вы это сделаете, вы обнаружите, что в каждой конечной точке необходимо выполнить некоторую повторяющуюся работу, например, создать ответы с соответствующими заголовками и кодами ответов. Вам также придется беспокоиться о соответствии CORS, если ваш API используется браузером.

Restivus фактически построен поверх Iron Router и обеспечивает уровень аутентификации на конечных точках. Это также абстрагирует от необходимости прямого взаимодействия с объектами запросов и ответов Node, хотя они все еще существуют на тот случай, если мы что-то пропустили. Так что он использует все возможности Iron Router с высокоуровневым API для вашего удовольствия от написания кода. Restivus хорош, если вы уже используете Iron Router, так как он не добавляет никакой дополнительной зависимости.

RestStop2:
Я фактически использовал RestStop2 в проекте, над которым я работаю, когда он устарел в пользу Iron Router. У них была солидная документация и API, который я предпочел выше остальных. По их предложению я создал новый пакет поверх Iron Router, который очень вдохновлен RestStop2. Restivus теперь одобряется на странице RestStop2 GitHub, поэтому я думаю, что они согласны с тем, что это достойная замена.

Вот небольшой фрагмент кода из раздела «Быстрый старт» документации Restivus:

if(Meteor.isServer) {
  Meteor.startup(function () {
    // Global configuration
    Restivus.configure({
      useAuth: true,
      prettyJson: true
    });

    // Generates: GET, POST on /api/users and GET, DELETE /api/users/:id for
    // Meteor.users collection
    Restivus.addCollection(Meteor.users, {
      excludedEndpoints: ['deleteAll', 'put'],
      routeOptions: {
        authRequired: true
      },
      endpoints: {
        post: {
          authRequired: false
        },
        delete: {
          roleRequired: 'admin'
        }
      }
    });

    // Maps to: POST /api/articles/:id
    Restivus.addRoute('articles/:id', {authRequired: true}, {
      post: {
        roleRequired: ['author', 'admin'],
        action: function () {
          var article = Articles.findOne(this.urlParams.id);
          if (article) {
            return {status: "success", data: article};
          }
          return {
            statusCode: 400,
            body: {status: "fail", message: "Unable to add article"}
          };
        }
      }
    });
  });
}
Не забудьте улучшить свой ответ (а также продать его немного больше), чтобы заявить, почему он лучше, чем остальные? dayuloli
@ dayuloli: Извините за мою начальную лень. Я обновил свой пост. Если мне нужно что-то уточнить, просто дайте мне знать. kahmali
4

HTTP.publish. Вместо того, чтобы изобретать новый API, как другие, он просто добавляет протокол HTTP к существующему Meteorpublish интерфейс. Это означает, например, чтоMeteor.allow а такжеMeteor.deny работает автоматически как для HTTP, так и для DDP.

Пример

Если передать коллекцию и функцию публикации, тоHTTP.publish будет подключаться по следующим URL-адресам и методам:

GET - / api / list - все опубликованные данные
POST - / api / list - вставить документ в коллекцию
GET - / api / list /: id - найти один опубликованный документ
PUT - / api / list /: id - обновить документ
DELETE - / api / list /: id - удалить документ

myCollection = new Meteor.Collection('list');

// Add access points for `GET`, `POST`, `PUT`, `DELETE`
HTTP.publish(myCollection, function(data) {
  // this.userId, this.query, this.params
  return myCollection.find({});
});

Оно делает еще не обработал аутентификацию полностью.

Я не понимаю твой комментарий. Это «HTTP-запрос API», тогда как мы говорим о предоставлении службы REST. David Braun
Да, посмотрите на: Docs.meteor.com / # HTTP Justin
2

что это старая тема, но вместо использования какого-либо внешнего пакета вы можете использовать пакет Meteor WebApp:https: //docs.meteor.com/packages/webapp.htm.

Надеюсь, это поможет

12

зацените Метеоритный Маршрутизатор умный пакет, который предоставляет методы для маршрутизация на стороне сервера полезен при создании интерфейсов RESTful.

Meteor.Router.add('/404', [404, "There's nothing here!"]);

Чтобы помочь вам в будущих поисках, обязательно посмотрите наhttps: //atmosphere.meteor.co - интеллектуальное хранилище пакетов. А такжеМетеори - довольно удобный инструмент CLI для управления версиями и пакетами.

это было обновлено до отличного Iron Router lib Iron-meteor.github.io / железо-маршрутизатор Victor Ferreira
2

вы можете выставить конечные точки REST с помощью Meteor с помощью частного API. Функциональность скоро станет общедоступной, но пока что смотрите Могу ли я смонтировать другой обработчик маршрута через ____meteor_bootstrap____.app.

1

что обновлю разговор на 2014 год. Я до сих пор не нашел идеального способа внедрения REST-сервисов в Метеоре, и я надеюсь, что кто-то может указать мне другое направление для расследования. Я протестировал 3 проекта, и у каждого есть свои недостатки:

Метеор-маршрутизатор Я работал с meteor-router, но на странице github говорится, что он будет только исправлять ошибки и использовать Iron Router во всех новых проектах. Я все еще рассматриваю возможность его использования, поскольку, если он работает для меня как есть, обновления не нужны, за исключением некоторого типа аутентификации.

Железо-маршрутизатор У меня есть простой пример сервиса, созданного с использованием Iron Router, но он, кажется, поддерживает сервисы REST даже меньше, чем meteor-router, и вызывает сбой сервера, если кто-то отправляет недопустимый json на конечную точку отдыха.

Метеор-collectionapi Предоставляет API REST для основных операций CRUD, но не поддерживает запросы, кроме идентификатора.

Пожалуйста, ознакомьтесь с моим ответом ниже и дайте мне знать, подходит ли этот пакет для ваших нужд REST API. kahmali

Похожие вопросы