[TIL 45] Ruby on Rails | Restful API (CRUD)와 Serializer

sunny·2021년 5월 13일
0
post-thumbnail

Routes

특정 endpoint에 대한 경로설정을 해주는 곳.
get '/items' => 'items#index'
-> /items로 get요청이 들어오면 items controller의 index로 가!


Controller

클라이언트가 특정 endpoint로 요청을 보내면 해당 요청에 맞는 데이터를 다시 돌려보내야하는데 그 역할을 하는게 컨트롤러!

컨트롤러 생성

rails g controller 테이블명
-> model 이랑 다르게 복수로 입력해야함
-> app/controller/items_controller 생성됨

rails routes|grap items
-> rails에 등록된 routes중에 items 관련된 endpoint를 다 보여줘!

resources :items -> 자동으로 get, post, patch, put, delete 생성

resources :items, only: [:index, :show]
-> index, show만 생성

resources :items, except: [:index, :show]
-> index, show만 제외하고 생성

resources :items, except: [:index, :show]  do
	resources :options, only: :index
end

-> item아이디를 받아서 options을 검색하고 싶을때

resources :items, shallow: true, except: [:index, :show]  do
	resources :options, only: :index
end

-> shallow: true설정을 하게 되면 update, destroy에서 item id가 붙는 것을 제거해준다.

커스텀한 주소 만들고 싶을때

  1. collection ~ do
  2. member ~ do -> 아이디값을 받아와야할때

postman으로 api요청보내보기

url이라는 변수에 localhost 주소 넣어주기

그런데 url 변수설정했는데도 적용이 안되는 것이였다.
알고보니까 여기 위에서 Environment를 설정해줘야하는 것이였다.

포스트맨 1일차의 삽질 👷🏻‍♀️
이제 login api로 요청을 보내보자

이번엔 500에러 ..!

뭐가 문제니 또..

redis를 설치안했다..😦
설치 후 서버 키고 다시 요청보내니까 바로 200OK!

redis-cli로 redis server console을 찍을 수 있다.

keys *를 찍어보면 방금 발급받은 토큰이 잘 저장되어있는것을 알 수 있다.
그럼 이제 발급받은 토큰으로 /items에 요청을 보내보자
여기서 Bearer는 토큰타입이라고 한다 (알려주신 백엔드 동기분들 감사)
아무튼 성공!
get방식은 header에 token없이도 데이터를 받아올 수 있는데 post는 header에 token필수!


Serializer

그런데 요청을 받아서 데이터를 보내줄 때 사용자가 요청한 데이터만 보내줄 수는 없을까? 예를 들어 create_at, update_at 같은 데이터는 굳이 사용자에게 보낼 필요가 없다.
그래서 필요한게 Serializer! Serializer로 데이터를 직렬화해서 보내줘야한다.

Serializer 생성

rails g serializer option_each
rails g serializer option

->options의 데이터를 serializer를 통해 직렬화한 후 같이 보내줄때 ItemEachSerializer에 이렇게 작성!

Controller에서 Serializer 사용

each_serialize -> 여러개 보내줄때
serialize -> 한개 보내줄때

profile
blog 👉🏻 https://kimnamsun.github.io/

0개의 댓글