備忘録です
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
完成
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
# #参考
https://www.rubylife.jp/rails/controller/index7.html