15

私はレールの世界に不慣れで、ユーザーの入力に基づいてアマゾンやそのようなサイトで物事を検索できるようにするアプリを構築しようとしています。

少し調べてみましたが、httparty gemから始めるのが良いと思いますか?これまでに見つかったドキュメントは最高ではありませんが。彼らは本当に私に多くの情報(コードを置く場所など)を与えません。

このことがどのように機能するかをよりよく理解するために使用または確認できる既存のチュートリアルやコード例はありますか?

4

1 に答える 1

31

私は今このようなアプリに取り組んでいるので、いくつか考えさせてください。

まず、Railsをまったく使用したことがない場合は、最初のステップとして、2つのトラックを使用して、問題に並行してアプローチすることをお勧めします。

  1. Railsについて学ぶ
  2. RubyでAPIを操作する方法(リクエストを作成してレスポンスを解析する方法)について学ぶ

これらは2つの別個の問題であり、最終的には一緒に実装することになるかもしれませんが、最初にそれらを分離して考えるのが最善です。

最初のアプリでは、最初にいくつかの簡単なアプリを作成して、物事がどのように機能するかを理解することをお勧めします。単純なアプリだけでも、ある程度のユーザー操作が必要になり、レコードをDBに保存するなど、APIからのデータの消費とは別の問題が発生する可能性があります。Railsには無限の数のチュートリアルがありますが、1つだけ言及すると、MichaelHartiのLearnWeb DevelopmentwithRailsを出発点として試すことができます。

2番目のポイントであるAPIデータの消費は、アプリ自体の設計の問題とは異なります。問題のこの側面についてさらに学ぶために、私が自分で使用しているHTTPartyのような人気のあるAPIクライアントgemを使用することをお勧めします。RailsアプリでHTTPartyメソッドをすぐに使用するのではなく、演習として、コンソール(irb)で少し遊んでみることをお勧めします。gem install httpartygem( )をインストールするrequire 'httparty'と、コンソールからgem()を要求し、すぐにAPIからのリクエストと解析応答を行うことができます。

例えば:

irb(main):001:0> require 'httparty'
=> true
irb(main):002:0> response = HTTParty.get('http://twitter.com/statuses/public_timeline.json')
=> ...

RailsとrubyのAPIへのアクセスにもう少し慣れたら、実際にアプリ自体を構築することに進むことができます。APIへのリクエストがどれほど複雑になるかに応じて、RailsアプリでAPIリクエストを構造化する方法についていくつかのオプションがあります。

  1. コントローラのアクションから直接、リクエストをRailsアプリ自体の一部にします。これは、限られた数のサービスで非常に限られた数のリクエストタイプ(単純な検索など)のみをサポートする場合にのみ、実際に問題ありません。より複雑なものを使用すると、コントローラーが太くなります。これは、MVCフレームワークではノーノーです。
  2. 別のrubyクラス(通常はAPIラッパーと呼ばれます)を作成して、APIからのリクエストを作成し、レスポンスを解析するためのメソッドをグループ化します。HTTPartyのようなgemを使用するinclude HTTPartyと、クラスに行を追加するだけでこれを実行できます。これにより、モジュールがクラスに追加されます。これを行う方法についてはたくさんの例がありますが、ここに1つあります。
  3. 特定のAPIにアクセスするための専用のgemを使用するか、1つ(または複数)を自分で作成します。TwitterLinkedinFlickrなど、最も人気のあるサービスのgemがあります。詳細については、このAPIクライアントgemのリストを参照してください。これにより、APIを操作する際の多くの手間が省けますが、すべてのサービスのサブセットに対してのみ機能します。

HTTPartyの使用を考えているとのことですが、私自身が使用しているのでお勧めできます。Faradayなどの代替手段があります(詳細については、このHTTPクライアントのリストを参照してください)が、ほとんどのタスクでHTTPartyが正常に機能することがわかります。ドキュメントは少しまばらかもしれませんが、作業できるがたくさんあります。

お役に立てば幸いです。

于 2012-10-29T04:20:56.933 に答える