Rails에서 JSON을 반환하는 간단한 WebAPI 만들기

6083 단어 WebAPIRailsJSON

비망록입니다.



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"
        }
    ]
}

사용법



구체적으로는. 얼굴, 화난 얼굴, 울고있는 얼굴, 이미지의 url을 반환하는 api입니다. 물론 웹에서도 액세스할 수 있어요. 이번에는 파라미터 등의 지정에 의한 복잡한 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

참고



JSON/XML 형식으로 출력

좋은 웹페이지 즐겨찾기