はじめに
ゆる〜く学ぶ。みんなのWeb勉強コミュニティー。 「にゅ〜ぶる会」を運用中です。
https://newburu.github.io/
そこで、何か教育用のコンテンツが欲しいなぁ〜と思い立ち、今回の企画をスタートしました!
Railsで基本情報技術者試験の過去問題サイトを作ります!
最終目標
- 問題・回答の登録は、Scaffoldで簡易でOK
- APIを用意して、ランダムに問題を抽出する機能を追加する
- TwitterBOT、LINEBOT、SlackBOTが出来たら良いな
履歴
1:構築編
https://qiita.com/newburu/items/ed59f47ac645b19620f6
2:日本語化(i18n)編
https://qiita.com/newburu/items/4f12fdb61bf6cd601545
3:親子関係、登録編
https://qiita.com/newburu/items/f2a20289be5ec1fc1b77
4:親子関係、参照編
https://qiita.com/newburu/items/51b11bd02691efc2cc0d
5:API編
本ページ
6:SlackBOT編
https://qiita.com/newburu/items/aeeb9acb453da786bd59
7:Herokuデプロイ〜自動化編
https://qiita.com/newburu/items/0a8bb02e1e8c8fe737c7
今回やる事
- 登録された問題を返すAPIを作ります
APIを作ります
1. gem 'jbuilder'を追加します。
JSONを戻すAPIにするため、JSON用のGEMを追加します。
gem 'jbuilder', '~> 2.5'
2. APIの口を作ります
routes.rbに、以下を追加します。
# API用(JSONを返すため、formatを指定する)
namespace :api, { format: 'json' } do
namespace :v1 do # APIのため、バージョンを意識して作る
get 'questions/:id', to: 'questions#show'
end
end
3. API用のコントローラーを追加します。
API用、V1用と分けているため、ディレクトリもそれに合わせて階層を作成します。
class Api::V1::QuestionsController < ApplicationController
def show
@question = Question.find(params[:id])
end
end
4. ViewでJSONを返す様に設定します。
json.data do
json.question @question, :category1, :category2, :category3, :msg
json.answers do
json.array! @question.answers, :msg, :correct
end
end
jbuilderの使い方は、こちらあたりを参照にしたら良いかと思います。
https://qiita.com/ryouzi/items/06cb0d4aa7b6527b3645
5. 確認します。
まずは、画面から確認します。
「http://localhost:3000/questions/1」にアクセスします。
API用のURLにアクセスします。
「http://localhost:3000/api/v1/questions/1」にアクセスします。
※最後の1は、idです。
こんな感じの文字列が表示されればOKです!
{"data":{"question":{"category1":"あ","category2":"い","category3":"う","msg":"え"},"answers":[{"msg":"お","correct":true},{"msg":"か","correct":false}]}}
今回はここまで
ありがとうございました!
次回は、ランダム取得用のAPIを追加して、問題集APIっぽくするよ!