備忘録です。
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を使わないのでこれらは消す。

ウェブからアクセス

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