LoginSignup
19
17

More than 5 years have passed since last update.

RailsでJSONを返すシンプルなWebAPIを作ってみる

Last updated at Posted at 2018-09-13

備忘録です。

Ruby on RailsでシンプルなJSONを返すWebAPIを作ってみようと思います。コントローラーに定義したjsonを返すだけのシンプルなapi(本当だったら、dbから取り出したデータとか?)です。下記のようにjsonを定義する。

personal = {

    "smile face":[
        {
            "url":"http://localhost:3333/face/smile/smile1.img"
        },
        {
            "url":"http://localhost:3333/face/smile/smile2.img"
        }
    ]
}

使い方

具体的には$ curlコマンドでapiを叩くと、画像のurlを取得できるapiを作ってみようと思います、下記のエンドポイントを指定してcurlを叩くことで、具体的には、笑ってる顔、怒ってる顔、泣いてる顔、の画像のurlを返すapiです。勿論webからもアクセスできますよ。今回はパラメーターなどの指定による、複雑なapi操作はなし。とにかくapiを叩いて結果を受け取る。

$ curl -i http://localhost:3333/face/angry
$ curl -i http://localhost:3333/face/sad
$ curl -i http://localhost:3333/face/smile

やり方

まずは、railsのプロジェクトを作る。

$ rails new api-test

プロジェクトに移動して

$ cd /Users/hujisawa/Desktop/api-test

プロジェクトに移動して、コントローラーとビューと、ルートを作る。今回はjsonを返すのでビューはいらないから後で消す。

$ generate controller Face smile sad angry

実装

下記のように記述することで、jsonを返すことができる。renderがわからないければググる。personalは作ってあるjsonデータ。

render :json => personal

完成

face_controller.rb

class FaceController < ApplicationController
  def smile

    personal = {

    "smile face":[
        {
            "url":"http://localhost:3333/face/smile/smile1.img"
        },
        {
            "url":"http://localhost:3333/face/smile/smile2.img"
        }
    ]
}
    render :json => personal

  end

  def sad

    personal = {

    "sad_face":[
        {
            "url":"http://localhost:3333/face/smile/sad1.img"
        },
        {
            "url":"http://localhost:3333/face/smile/sad2.img"
        }
    ]
}
    render :json => personal
  end

  def angry

    personal = {

    "angry_face":[
        {
            "url":"http://localhost:3333/face/smile/angry1.img"
        },
        {
            "url":"http://localhost:3333/face/smile/angry2.img"
        }
    ]
}
    render :json => personal

  end
end

ビューは消しとこ

今回はhtmlを使わないのでこれらは消す。

Screen Shot 2018-09-13 at 15.40.40.png

ウェブからアクセス

Screen Shot 2018-09-13 at 15.42.04.png

apiを叩く

$ curl -i http://localhost:3333/face/smile
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Referrer-Policy: strict-origin-when-cross-origin
Content-Type: application/json; charset=utf-8
ETag: W/"12078d41e23365917dee4fe08ad8508e"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 764425e8-8ed1-4aa4-a781-b0b98e8b19fd
X-Runtime: 0.005404
Transfer-Encoding: chunked

{"smile face":[{"url":"http://localhost:3333/face/smile/smile1.img"},{"url":"http://localhost:3333/face/smile/smile2.img"}]}f

参考

JSON/XML形式で出力する

19
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
17