티스토리 뷰

[Rails] 웹 API를 위한 JSON, XML 응답


보통 웹 API를 작성할 때 응답 형태를 JSON 혹은 XML 형태로 제공한다. Rails에서는 Model의 객체를 손쉽게 JSON 혹은 XML로 변환할 수 있게 제공해준다.


아래 코드의 posts_controller가 왜 api 하위 디렉토리에 있는지, module Api 가 무엇인지 궁금하다면 아래 글을 참고하세요. (일반 controller 에서 사용하신다면 그냥 무시해도 좋습니다.)

2015/07/06 - [Ruby&Rails/Rails] - [Rails] Rails에서의 subdomain 설정하기



app/controller/api/posts_controller.rb

module Api

class PostsController < ApplicationController

posts = Post.all

render json: posts

end

end


위와 같이 render 시 json으로 해주면 해당 객체의 값이 JSON으로 변형되여 출력해준다. 혹은 as_json 메서드를 이용하여 처리할 수 도 있다.


XML로 출력하고 싶으면 다음과 같이 수정하면 된다.


app/controller/api/posts_controller.rb

module Api

class PostsController < ApplicationController

posts = Post.all

render xml: posts

end

end



혹은 to_xml 메서드를 이용할 수 도 있다.


나아가 좀 더 나은 처리를 위해서 HTTP 응답코드를 추가하는 것이 바랍직하다.


app/controller/api/posts_controller.rb

module Api

class PostsController < ApplicationController

posts = Post.all

render json: posts, status: 200

end

end


이렇게 하면 200 OK 응답을 해준다. 혹은 status: :ok 로 적어도 같은 응답을 해준다.


리눅스 계열의 경우 curl 명령어로 응답을 확인할 수 있다.


$ curl http://api.example.com:3000/posts


[{"id":1, "name":"Juliet", "age":123, "created_at":"2015-01-....", ...}, {...}]


와 같이 출력이 될 것이다.


-I 옵션(대문자 i)을 주면 HTTP 응답형태를 확인해볼 수 있다.

$ curl -I http://api.example.com:3000/posts


HTTP/1.1 200 OK

X-Frame-Options: ..

....


댓글