こんにちはー。
前回のGET編に続いてPOST編です。
Controllerにメソッドを追加する。
今回はcreateメソッドを追加しました。こんな感じ。
def create entry = OpenStruct.new({ :value => params[:value], :id => params[:id] }) # MemoryStoreにSaveされていれば取り出す。 entry_json = Rails.cache.fetch("/match/#{params[:id]}", expired_in: 1.hour) do # 一度もSaveされていない場合は、ここの値がSaveされる JSON.generate(entry.to_h) end puts entry_json # Json文字列をOpenStructに変換する。 result = JSON.parse(entry_json, object_class: OpenStruct) # OpenStructそのまま渡すと{"table":{"value":1,"id":1}}というで返却される。 # tableの部分が余計に感じたのでto_hでハッシュにして返却すると{"value":1,"id":1}のようになる。 render json: result.to_h end
いろいろごちゃごちゃやってますけど、前回のGET編と同じくなんやかんやでJSONで返しています。
POSTを送る
今回はブラウザ開くだけではテストできないので、POSTを送るものを別で用意しました。
ターミナルから以下を実行しました。今回はcurlというコマンドを使って試してみました。RubyMineからもHTTPPOSTできたのかも。
curl -X POST -H "Content-Type: application/json" -d '{"id":1, "value": 3}' http://127.0.0.1:3000/match/
そうすると、こんな感じでデータが表示されました。
{"value":3,"id":1}
Rails使うとAPIサーバが簡単に作れる
最初の段取り覚えると、あとはかなり簡単に作ることができてしまいますね。むしろRailsの流儀を覚えることの時間が長かったかもしれません。
ひとまず最低限のAPIサーバを作ったので、今度はサーバに置いて動かしてみます。これで一通りの流れだけは抑えられそうです。
では、また!