週刊とっしーぱんち

昭和生まれのブロガーが綴る、全力脱力系雑記帳

【趣味でたのしむRuby】RubMineさんとRailsで初歩的なAPIサーバを作った話 その3 HTTPPOST編

こんにちはー。

前回の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サーバを作ったので、今度はサーバに置いて動かしてみます。これで一通りの流れだけは抑えられそうです。

では、また!

osio-toshimasa.hatenablog.com

osio-toshimasa.hatenablog.com

osio-toshimasa.hatenablog.com