Imolog

技術的備忘録

Grapeを使ってみる

GrapeによるAPI開発 RailsAPI開発する上で便利フレームワークがあったので使い方を。 だいたいのことはgithubを読めば説明がされています。 [Grape](https://github.com/intridea/grape "Grape") APIJSON型でレスポンスを返すようにします。 ## インストール Gemfileに下記を追加 ``` gem 'grape' ``` ## 今回の構成 ディレクトリ構成はこんな形にしようと思います。 バージョンごとにディレクトリを分けて、更にresourceごとに分けています。 ![d9c3e30e540160cc66693d8ebeefec48.png](https://qiita-image-store.s3.amazonaws.com/0/39895/eff1f983-e6d8-01e2-478e-dc7365e5333b.png "d9c3e30e540160cc66693d8ebeefec48.png") ## 設定 `config/application.rb`に下記を追加 ``` config.paths.add File.join('app', 'apis'), glob: File.join('**', '*.rb') config.autoload_paths += Dir[Rails.root.join('app', 'apis', '*')] ``` `config/routes.rb` に下記を追加 ``` mount API::Root => '/' ``` これで準備は完了。 ## 実装 まず`app/apis/api/`に`root.rb`を新規作成します。 ``` module API class Root < Grape::API prefix 'api' mount API::V1::Root end end ``` `app/apis/api/v1`ディレクトリ配下にも`root.rb`を新規作成します。 ``` module API module V1 class Root < Grape::API version 'v1', using: :path format :json mount API::V1::Members mount API::V1::Note end end end ``` `app/apis/api/v1`に`members.rb`を作成します。 ``` module API module V1 class Members < Grap::API resource :members do params do requires :member_id, type: Integer, desc: 'Member ID.' end get do member = Member.find(params[:member_id]) { member_id: member.id name: member.name } end end end end end ``` Noteも同じようなこと書いているので割愛します。。 実際のAPIのURLはこんな感じになります。 `http://hogehoge/api/v1/members?member_id=1` これでmeberのidとnameが返却されてくるはずです。 `resouce`を記述することで、RESTにすることが出来ます。 `get` `post` `put` `delete`と記述するだけです。 `params do〜`で、paramsを指定します。 - requires - optional requresは必須パラメータ、optionalはオプションです。 と、今日はここまでで、、、 こんな感じで簡単にRailsAPIを作ることが可能です。