특정 endpoint에 대한 경로설정을 해주는 곳.
get '/items' => 'items#index'
-> /items로 get요청이 들어오면 items controller의 index로 가!
클라이언트가 특정 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가 붙는 것을 제거해준다.
collection ~ do
member ~ do
-> 아이디값을 받아와야할때url이라는 변수에 localhost 주소 넣어주기
그런데 url 변수설정했는데도 적용이 안되는 것이였다.
알고보니까 여기 위에서 Environment를 설정해줘야하는 것이였다.
포스트맨 1일차의 삽질 👷🏻♀️
이제 login api로 요청을 보내보자
이번엔 500에러 ..!
뭐가 문제니 또..
redis를 설치안했다..😦
설치 후 서버 키고 다시 요청보내니까 바로 200OK!
redis-cli
로 redis server console을 찍을 수 있다.
keys *
를 찍어보면 방금 발급받은 토큰이 잘 저장되어있는것을 알 수 있다.
그럼 이제 발급받은 토큰으로 /items에 요청을 보내보자
여기서 Bearer는 토큰타입이라고 한다 (알려주신 백엔드 동기분들 감사)
아무튼 성공!
get방식은 header에 token없이도 데이터를 받아올 수 있는데 post는 header에 token필수!
그런데 요청을 받아서 데이터를 보내줄 때 사용자가 요청한 데이터만 보내줄 수는 없을까? 예를 들어 create_at, update_at 같은 데이터는 굳이 사용자에게 보낼 필요가 없다.
그래서 필요한게 Serializer! Serializer로 데이터를 직렬화해서 보내줘야한다.
rails g serializer option_each
rails g serializer option
->options의 데이터를 serializer를 통해 직렬화한 후 같이 보내줄때 ItemEachSerializer에 이렇게 작성!
each_serialize
-> 여러개 보내줄때
serialize
-> 한개 보내줄때