web-dev-qa-db-ja.com

Meteorを使用してRESTful Webサービスを公開する方法

Meteorを使用して安らかなWebサービスを作成するにはどうしますか。同じバックエンドにフックするアプリをAppceleratorで作成したいと思います。

Meteorはこの問題を解決できますか?

47

Meteorを使用してRESTfulサービスを作成できると思いますが、実際にはフレームワークの目的ではありません。Meteorの主な利点の1つは、クライアントとサーバー間の緊密な相互作用であり、Webサービスにはありませんクライアント側。 node.jsでWebサービスバックエンドを単独で作成するか、Rubyが好きな場合は https://github.com/intridea/grape のようなものを検討することをお勧めします。

2
Masonoise

Meteorpediaでこれについて完全に書きました:

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

この投稿では、RESTインターフェースを作成するための6つのオプションすべてを、最高レベル(たとえば、すべてを処理するスマートパッケージ)から最低レベル(たとえば、独自のconnectHandlerの作成)まで)を確認します。

さらに、RESTインターフェースを使用することがMeteorで正しいか間違っているか、Meteor RESTテストツールを参照し、CORSのような一般的な落とし穴について説明しますセキュリティ上の問題。

33
gadicc

私はもともとこの質問に答えました here ですが、要約すると:

データの上にRESTfulメソッドを追加するには、Meteor用に作成されたCollection APIを調べてください。

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

データベースにアクセスするための認証については、このプロジェクトをご覧ください。

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

どちらも間違いなく開発段階にありますが、RESTful APIを作成して、モバイルネイティブクライアントと簡単に統合できます。

22
isyi

私はこれが古いスレッドであることを知っていますが、誰かがそれに出くわした場合に備えて、REST APIをMeteor 0.9.0+で書くためのパッケージを公開しました:

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

RestStop2 に触発され、 Iron Router のサーバー側ルーティングで構築されました。私のそれほど謙虚な意見では、これはこれまでにここに投稿されたものよりも良い解決策です。

UPDATE:理由を明確にするために[〜#〜] i [〜#〜]は「上記のソリューションよりも優れたソリューションであるため、それぞれの違いを指摘します。

CollectionAPI:
CollectionAPIは、コレクションに対する非常に基本的なCRUD操作の公開に制限されています。モバイルアプリでREST APIを使用しているため、ドキュメント全体を送信するのは非常に無駄であり、ほとんどの場合、データの追加処理を行う必要があります(インスタンス、REST友人を追加するためのエンドポイントで、ただし友人が正常に追加された場合のみ)に送信します。CollectionAPIは、エンドポイントが実行される前に実行されるフックを提供します。私が理解していることは、応答の直前には何もないので、返されるデータを変更する方法はありません。 、アプリにハードコードされているように見えるため、すべてのユーザーで同じです。

Restivusは、コレクションの自動化された作業に限定されないため、エンドポイントを完全に制御できます。 Collection APIに含まれるすべての機能を提供するようになりました。ユーザー認証とロール許可もサポートしているため、リクエストを行っているユーザーを識別できます(そして、認証済みエンドポイント内からそのユーザーに簡単にアクセスできます)。それを支援するために、ログインとログアウトのエンドポイントも提供します。最後にRestivusのコード例を示します。

HTTP.publish:
私が理解したことから、これはCollectionAPIに似ていますが、コレクションでの基本的なCRUD操作の公開に限定されています。これは、より具体的にはMeteorの公開に関連付けられており、GET要求の処理に公開機能を使用できます。私はドキュメントに戸惑っていますが、基本認証が利用できる場合とできない場合があります。私はこれを使ったことがありませんが、APIの大ファンではないので、少し不格好に感じます。もっと広範に公開したら、再訪してみます。同じチームにはHTTP.methodsと呼ばれる別のパッケージがあり、パブリッシュ機能へのアクセスは提供しませんが、Restivusに類似したAPIと、当時は類似した機能を備えています。

Restivusは、パブリッシュ機能の使用に制限されないため、「より良い」です。したがって、エンドポイントをよりきめ細かく制御できます。公開関数を外部APIに公開するだけの場合は、HTTP.publishを使用することをお勧めします。 Restivusには、よりシンプルなAPIもあり、HTTP PATCHメソッドをサポートしています(他のパッケージには存在しないと思われます)。彼らのHTTP.methodsパッケージは、PATCHサポートを欠いていることを除いてRestivusと非常に似ており、いくつかの基本認証を提供しますが、すべてのエンドポイントを認証するか、まったく認証しないことができると思います。 Restivusでは、ルートごとだけでなく、エンドポイントごとにそれを制御できます。エンドポイントのロールパーミッション(ユーザー、管理者など)もRestivusで使用できますが、HTTP.methodsについては何も表示されません。

流星ルーター:
これはIron Routerを支持して廃止されました。以下をご覧ください。

アイロンルーター:
Iron Routerは素晴らしいですが、REST APIを構築するために特別に設計されたものではありません。最近、HTTPメソッド(GET、POSTなど)に対応する関数を追加しましたが、どの形式の認証もサポートしておらず、アクセスできるのは下位レベルNode要求および応答オブジェクトだけなので、これらの操作方法を学ぶ必要があります。適切なヘッダーと応答コードを使用して応答を作成するなど、各エンドポイントで実行する必要のある反復作業がいくつかあることがわかります。また、APIがブラウザーから消費されている場合、CORS準拠についても心配する必要があります。 。

Restivusは実際にはIron Routerの上に構築されており、エンドポイントで認証のレイヤーを提供します。また、Node要求および応答オブジェクトとの直接的な対話の必要性を取り除きます。コーディングの楽しみのための高レベルAPI。既にIron Routerを使用している場合、Restivusは追加の依存関係を追加しないため、素晴らしいです。

RestStop2:
Iron Routerを支持して廃止されたとき、実際に取り組んでいるプロジェクトでRestStop2を使用していました。それらにはしっかりしたドキュメントがあり、私は他のAPIよりも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"}
          };
        }
      }
    });
  });
}
17
kahmali

これ(2013+)に出くわした人は、 Meteor Router スマートパッケージをチェックアウトしてください。このパッケージは、RESTfulインターフェイスの作成に役立つ サーバー側ルーティング のメソッドを提供します。

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

今後の検索を支援するために、必ず https://atmosphere.meteor.com -スマートパッケージリポジトリをご覧ください。そして、 メテオライト は、バージョンおよびパッケージ管理のための非常に便利なCLIツールです。

12
papercowboy

最もエレガントなソリューションは HTTP.publish のようです。他のような新しいAPIを発明するのではなく、既存のMeteor publish インターフェイスにHTTPプロトコルを追加するだけです。これは、たとえば、Meteor.allowおよびMeteor.denyは、HTTPおよびDDPに対して自動的に機能します。

例:

コレクションと公開関数を渡した場合、HTTP.publishは、次のURLおよびメソッドにマウントされます。

GET-/ api/list-すべての公開データ
POST-/ api/list-コレクションにドキュメントを挿入します
GET-/ api/list /:id-公開されたドキュメントを1つ検索します
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({});
});

まだ認証を完全に処理していない

4
David Braun

はい、プライベートAPIを使用してMeteorでRESTエンドポイントを公開できます。機能はまもなく公開されますが、その間、 ____ meteor_bootstrap____.appを介して別のルートハンドラをマウントできますか? ?

2
Dan Dascalescu

これは古いトピックですが、外部パッケージを使用する代わりに、Meteor WebAppパッケージを使用できます: https://docs.meteor.com/packages/webapp.html

それが役に立てば幸い!

2
Clément Arnaud

2014年の会話を更新するつもりだった。まだMeteorでRESTサービスを実装する完璧な方法を見つけていないし、誰かが私を調査する別の方向に向けてくれることを望んでいる。 3つのプロジェクトをテストしましたが、それぞれに欠点があります。

meteor-router私はmeteor-routerで作業しましたが、githubページでは、バグを修正して使用するだけだと書かれていますすべての新しいプロジェクトのアイロンルーター。そのまま使用できれば、何らかの認証を除いてアップグレードは必要ないため、これを使用することを検討しています。

iron-routerIron Routerを使用して構築された簡単なサンプルサービスがありますが、REST meteor-routerよりも少ないサービスで、誰かが無効なjsonをレストエンドポイントに投稿すると、サーバーがクラッシュします。

meteor-collectionapiREST基本的なCRUD操作のAPIはサポートされていますが、サポートされていませんID以外のクエリをサポートしていないようです。

1
Matthew