티스토리 뷰
[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: ..
....