事象発生日:2018-08-15
記事公開日:2018-08-16
アクセス数:5814
Ruby初心者,API作成初心者の人間が3日でRailsでAPIサーバーをつくるお勉強をしている.
DeNAのインターンシップに向けて,とりあえずSnippet的ななにかをここにどんどん追記していこうと思う.
トップ画像の出典はこちら.
Microsoft Windows 10 Home 1803 (64bit)
Ruby 2.5.1p57 (2018-03-29 revision 63029) [x64-mingw32]
gem 2.7.7
Rails 5.2.1
gem mysql2 0.5.2 x64-mingw32
MySQL Ver 8.0.12 for Win64 on x86_64 (MySQL Community Server - GPL)
このイメージを忘れないようにする.
コントローラ名 | items / rubyOnRails | ||
コントローラクラス名 | ItemsController / RubyOnRailsController | ||
ファイル名 | items_controller.rb / ruby_on_rails_controller.rb | ||
モデル名 | item ※ |
※ 1つのモデルを扱うためのコントローラの場合,モデルの複数形をコントローラ名にすることが多い.
モデル名 | title | ||
モデルクラス名 | Title | ||
テーブル名 | titles |
加えて,キーについて
主キーはid
,外部キーは${table_name[単数形]}_id
$ rails new ${app_name} --api -d mysql
アプリケーションルートで以下のコマンドを実行.
localhostの3000 portでWEBrickが動く.
$ rails server
普通にputs
すればできた.
def index json = {name: 'test', age: 5} render :json => json end
$ rails generate scaffold friend name:string address:string description:text $ rake db:create $ rake db:migrate
$ rails generate controller ${controller_name}
$ rails destroy controller ${controller_name}
許可したパラメタだけを受け取るセキュアな方法.
private def user_params params.require(:user).permit(:name, :email) end def user_arr_params params.require(:user).permit(:name, email: []) # 配列の場合 end
$ rake routes
以下をconfig/routes.rb
に追加.
resources :${resources}, :only => [:${action1}, :${action1}, ...]
resources :friends, :only => [:index, :create] do post 'hoge', :on => :member # POST /friends/1/hoge post 'fuga', :on => :collection # POST /friends/fuga end
app_root/config/database.yml
で,MySQLのusername, passwordを設定.
その後,アプリケーションルートで以下のコマンドを実行.
$ rake db:create
$ rails generate model ${model_name}
$ rake db:migrate
$ rake db:rollback STEP=${num}
$ rake db:seed
rake db:seed
を複数回実行すると,二重に登録される.
以下で空っぽにできる.
$ rake db:migrate:reset
$ rake db:drop
mysql> show databases mysql> use ${db_name} mysql> show tables; mysql> show columns from ${table_name}; mysql> select * from ${table_name};
> curl http://localhost:3000/friends -X GET > curl http://localhost:3000/friends/1 -X GET > curl http://localhost:3000/friends/2 -X DELETE
> curl http://localhost:3000/friends -X POST ^ -d "friend[name]=Tokugawa" ^ -d "friend[address]=saitama" ^ -d "friend[description]=hoge"
> curl http://localhost:3000/friends -X POST -H 'Content-Type:application/json' --data-binary "{\"friend\":{\"name\":\"Okita\",\"address\":\"kanagawa\",\"description\":\"fuga\"}}"
だと,Railsに{"{\"friend\":{\"name\":\"Okita\",\"address\":\"kanagawa\",\"description\":\"fuga\"}}"=>nil, "controller"=>"friends", "action"=>"create"}
と認識されて詰む.
Cygwinなら,
curl http://localhost:3000/friends -X POST -H 'Content-Type:application/json' -d '{"friend":{"name":"Okita","address":"kanagawa","description":"fuga"}}'
でOKだった.
JSONの中身を日本語でやったら,
Mysql2::Error: Incorrect string value: '\x8F\xAC\x90\xEC' for column 'name' at row 1
とか出て死亡.
PowerShellで以下でOKだった.
$json = '{"friend":{"name":"小川","address":"kanagawa","description":"fuga"}}' $ejson = [System.Text.Encoding]::UTF8.GetBytes($json) Invoke-RestMethod ` -Uri http://localhost:3000/friends ` -Method POST ` -ContentType 'application/json' ` -Body $ejson
名前
Email (※公開されることはありません)
コメント