티스토리 뷰

Rails - Restful API 관계

- 기본적으로 RESTful 하게 API를 만들어줄 수 있도록 설계된 잘 짜여진 프레임워크라고 할 수 있음
- 주소 규칙 등을 만들 때에도 RESTful을 쉽게 정의할 수 있음

  (컨벤션을 이용해서 쉽게 사용할 수 있음)

 


Restful API

- RESTful: 어떤 경로와 메소드만으로 어떤 행위를 하는 것인지 개발자로 하여금 이해할 수 있게 해주는 규칙 
- RESTful API: 그런 규칙을 통해서 만들어진 API

 

 

마이크로소프트 API 디자인 지침 문서 참고

docs.microsoft.com/ko-kr/azure/architecture/best-practices/api-design

 

API 디자인 지침 - Best practices for cloud applications

웹 응용 프로그램은 클라이언트가 응용 프로그램과 상호 작용할 수 있도록 Api를 노출할 수 있습니다. 잘 설계 된 웹 Api는 플랫폼 독립성 및 서비스 발전을 지원 해야 합니다.

docs.microsoft.com

 

알아볼 것

1) POST / GET / PUT / DELETE 각각의 의미, 경로는 어떤식으로 설정하는지 알아보기! (각각 다름)

2) PUT과 PATCH의 차이점 알아보기! -> 실제 사용할 때 적절하게 사용하기

 

 

사용 방법 예시)

/customers라는 경로로 각 POSTGET / PUT / DELETE 요청을 보내는 경우 '새 고객 만들기'

 

 


Restful API 사용

 

api를 만들기 위해

rails s (server) 레일즈 서버 실행

 

vscode에서 파일 찾기: ctrl +p / ctrl + t

 

라우팅 추가 방법

config/ routes.rb

특정 경로를 관리하는 파일 (주소 규칙을 만들 수 있음)

get '/items' => 'items#index'

get 방식으로 이 경로에 요청이 들어왔을 때, 모든 item 검색 => items 컨트롤러의 index 액션으로 이동

-> CRUD 간단하게 만들기

 

=> resources :itemsCRUD 더 간단히 구현 가능(자동으로 위 액션들을 정의해줌)

(restful한 주소 경로를 미리 만들 수 있음)

 

 

rails g controller items (model과 다르게 controller는 반드시 복수로 입력)

controller

-> 이 경로로 특정 사용자(프론트엔드)에서 요청을 보냈을 때 적합한 상품리스트 데이터를 뿌려줘야함

 

app/ controllers/ items_controller.rb 생성

=> index 함수에서 결과 처리할 수 있도록 routes에 등록

하나의 라우팅 생성

 

 

주소 확인

rails routes|grep items

rails에 등록된 routes주소 중에 items 라는 key값 가진 데이터 다 불러냄

=> rails에 등록되어있는 routes 주소 중에 items key 값을 가지고있는 것들 모두 불러옴

(방식 / 경로 / items controller의 각 액션으로 이동)

 

일부 경로만 필요한 경우

resources :items, only: [:index, :show]

index, show 액션만 필요한 경우 (=>두가지만 나타남)

 

일부 경로만 제외할 경우

resources :items, except: [:index, :show]

index, show 액션 두 가지만 제외하고 주소 생성

 

 

do - end로 감싸기

특정 아이템의 옵션 리스트 조회 

ex) /customers/1/orders 리소스 사용하기

rails routes|grep options

 => 아이템 1번에 대한 모든 옵션 검색 (item_id를 받아서 생성되는 구조)

 

=> 아이템 아이디가 필요없는 경우

 

ex)

전체를 생성했을 때 -> 모든 경로에 item_id가 들어감

- 업데이트나 삭제할 경우 id가 필요없음

(특정 옵션을 삭제할 경우, option_id만 알아도 삭제할 수 있으므로 item_id 필요없음)

 

 

item_id가 필요 없을 때 item_id 제외한 채로 주소 생성

결과

 

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

컬렉션과 멤버 두가지 있음

멤버 주소에 적기: id 값을 받아오게됨 (특정 id 값을 받아와야 하는 경우)

그냥 단순한 값: member

 

댓글