Grapeを使ってみる
GrapeによるAPI開発
RailsのAPI開発する上で便利フレームワークがあったので使い方を。
だいたいのことはgithubを読めば説明がされています。
[Grape](https://github.com/intridea/grape "Grape")
APIはJSON型でレスポンスを返すようにします。
## インストール
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はオプションです。
と、今日はここまでで、、、
こんな感じで簡単にRailsでAPIを作ることが可能です。