web-dev-qa-db-ja.com

REST API from Rails Application

私は最初のRailsアプリを構築していますが、REST APIからすべてを消費させたいと思っています。私がやりたいことは、Railsに私のWebアプリケーションを私のAPIのフロントエンドとして機能させることです。私が読んだ限り(今はRailsを見つめています)、RailsはORMとデータベースシステムへの直接アクセスに関して多くの可能性を秘めています。一方、私のプラットフォームは、定義されたインターフェース(この場合はREST API)を介してすべてのレイヤーにアクセスできるように設計されているため、どのクライアントからもデータベースは読み込まれず、それらのインターフェースを介して読み込まれます。

たとえば、私のAPIは次のリソースを公開します。

https://api.example.com/v1/users/feature-xxx [GET]

そして、私は私のウェブアプリに次のようなページを持たせたいです:

https://example.com/feature

したがって、ユーザーはこのURLにアクセスし、ログインすると、Railsアプリがデータを要求して、APIからこの動的コンテンツを生成します。

質問は:

  • Railsアプリケーションが使用するために必要な手順は何ですか データ HTTP/Restバックエンドから?そして、
  • これはRailsアプリに適した設計ですか?

ありがとう!

26
licorna

ActiveResourceは、Rails 4.0に含まれなくなりました。Wordは最近ではほとんど保守されておらず、RESTでないAPIエンドポイント用にカスタマイズすることは困難です「レイルズウェイ」に基づいて策定。

いくつかの調査の後、私は Faraday を使用することを強く支持しています。さまざまなHTTPリクエストアダプタを利用するためのサポートが含まれています。同時に使用する場合は、EventMachineを直接使用するか、Typhoeusなどのライブラリを使用できます。また、認証などをシームレスに含む、ラックのようなミドルウェアもサポートしています。

REST ORM in Railsこれは簡単に設定でき、比較的新しい(約1年前)) Her の場合、非常に有望に見え、ファラデーを利用しています。

更新

私は完全に<3 RestClient です。とても簡単。 ORMスタイルの機能が必要な場合は、より高いレベルの抽象化が必要になりますが、単純にAPIを利用するためには、その単純さに勝るものはありません。それはちょうどそれが大騒ぎせずに行うことになっていることを正確に行い、賢明なデフォルトがあり、認証ヘッダーなどの高度なオプションを設定する機能があります。

31
Duke

要件として ActiveResource を強くお勧めします。私の経験は本当に良かったです。使用する予定のAPIがreallyRESTである場合、REST APIを介してデータを使用するための明確な設計はないと思います。 READMEから

アクティブなリソース

アクティブリソース(ARes)は、ビジネスオブジェクトとREST(Representational State Transfer)Webサービスを接続します。 REST Webサービスのオブジェクトリレーショナルマッピングを実装して、クライアント(ActiveResource)とRESTfulサービス(ActionController :: ResourcesのSimply RESTfulルーティングによって提供される)の間に透過的なプロキシ機能を提供します。

哲学

Active Resourceは、REST Webサービスにコヒーレントなラッパーオブジェクトリレーショナルマッピングを提供しようとします。 Active Recordと同じ哲学に従いますが、その主な目的の1つは、これらのリソースにマップするために必要なコードの量を減らすことです。これは、Active Resourceが複雑な関係や構造を簡単に推測できるようにする、コードベースおよびプロトコルベースの多くの規則に依存することで可能になります。これらの規則は、ActiveResource :: Baseのドキュメントで詳細に説明されています。

概観

モデルクラスは、アクティブレコードがモデルクラスをデータベーステーブルにマップするのとほぼ同じ方法で、アクティブリソースによってリモートRESTリソースにマップされます。リモートリソースに対してリクエストが行われると、REST XMLリクエストが生成および送信され、その結果が受信されて使用可能なRubyオブジェクトにシリアル化されます。

構成と使用法

アクティブリソースを使用することは、アクティブレコードと非常に似ています。 ActiveResource :: Baseから継承するモデルクラスを作成し、それにサイトクラス変数を提供するのと同じくらい簡単です。

class Person < ActiveResource::Base  
  self.site = "http://api.people.com:3000/" 
end 

これでPersonクラスがREST対応になり、アクティブレコードが永続ストアに対して動作するライフサイクルメソッドを呼び出すのと非常によく似た方法でRESTサービスを呼び出すことができます。

# Find a person with id = 1 
ryan = Person.find(1) 
Person.exists?(1)  # => true 

ご覧のとおり、このメソッドは、データベースレコードを処理するためのActive Recordのメソッドと非常によく似ています。ただし、データベースレコードを直接処理するのではなく、HTTPリソース(データベースレコードの場合もそうでない場合もあります)を処理します。

詳細はこちら...

21
Chirantan

FaradyやHTTPartyなどのHTTPクライアントライブラリを使用しない場合は、open-uriを使用して、必要なエンドポイントからデータを取得し、JSONで解析できます。

要件:open-uriおよびjson

コントローラで:

@people = JSON.parse(open("http://api.people.com:3000/people").read, symbolize_names: true)

ビューで:

<% @people.each do |person| %>
    Name:<%= person[:name] %>
    Age:<%= person[:age] %>
<% end %>
7
Eric

はい、それは良いデザインになる可能性があります。

「Ruby And Railsを使用したサービス指向の設計: http://www.Amazon.com/Service-Oriented-Design-Rails-Addison-Wesley-Professional/dp/0321659368

それは、Restful Rubyアプリと同様に、スケーリングとパフォーマンスに重点を置いたアプリに焦点を当てています。また、さまざまなフレームワーク(Rack、Sinatra、Rails)とそれらが十分に満たす役割も調査します。

残念ながら、私自身は(まだ!)この戦略を実装していません。そのため、直接アドバイスすることはできません。

4
Alan Peabody