라우팅 - RESTful

RESTful 인터페이스

RESTful 인터페이스는 REST의 특징을 가진 라우트를 말한다. REST는 HTTP 메서드와 CRUD를 대응시키는 것이라 생각하면 된다.

  • 추출: GET

  • 생성: POST

  • 변경: PATCH

  • 제거: DELETE

Rails는 원칙적으로 RESTful 인터페이스를 기반으로 라우트를 설계한다. 비RESTful적인 라우트를 설정할 수도 있지만, Rails에서 제공하는 form_for, url_for, link_to 등의 뷰 헬퍼는 RESTful 인터페이스를 전제로 설계되어 있으므로 왠만하면 RESTful적인 라우트를 사용하자.

resources 메서드

RESTful 인터페이스를 정의할 때는 routes.rb에서 resources 메서드를 호출한다.

예를 들어 아래 코드를 적으면 아래 표처럼 URL로 액션이 매핑된다.

Railbook::Application.routes.draw do
  resources :users
  ...
end

URL

액션

HTTP 메서드

역할

/users(.:format)

index

GET

사용자 목록 생성

/users/:id(.:format)

show

GET

각각의 사용자 상세 화면 생성

/users/new(.:format)

new

GET

신규 사용자 추가 화면 생성

/users(.:format)

create

POST

신규 사용자 화면으로부터의 입력을 받아 등록 처리

/users/:id/edit(.:format)

edit

GET

기존의 사용자 편집 화면 생성

/users/:id(.:format)

update

PATCH/PUT

편집 화면으로부터 입력을 받아 수정 처리

/users/:id(.:format)

destory

DELETE

목록 화면에서 선택한 데이터 제거 처리

또한 resources 메서드는 뷰 헬퍼(link_to 등)에서 사용할 수 있는 Url 헬퍼도 자동으로 생성한다.

헬퍼 이름(_path)

헬퍼 이름(_url)

리턴 값(경로)

users_path

users_url

/users

user_path(id)

user_url(id)

/users/:id

new_user_path

new_user_url

/users/new

edit_user_path(id)

edit_user_url(id)

/users/:id/edit

이러한 헬퍼를 사용하면 링크를 보다 직관적으로 사용할 수 있는 것은 물론, 라우트 정의에 의존하지 않을 수도 있다.

resource 메서드

resources 메서드가 여러 개의 리소스를 관리하는 RESTful 인터페이스를 생성한다면, resource 메서드는 하나의 리소스를 관리하는 RESTful 인터페이스를 생성할 수 있다.

예를 들어 아래 코드를 적으면 아래 표처럼 URL로 액션이 매핑된다.

Railbook::Application.routes.draw do
  resource :config
  ...
end

URL

액션

HTTP 메서드

역할

/config(.:format)

show

GET

설정 정보 화면 표시 상세 화면 생성

/config/new(.:format)

new

GET

신규 설정 추가 화면 생성

/config(.:format)

create

POST

등록 화면에서 입력을 받아 등록 처리

/config/edit(.:format)

edit

GET

기존 설정 수정 화면 표시

/config(.:format)

update

PATCH/PUT

수정 화면에서 입력을 받아 수정 처리

/config(.:format)

destroy

DELETE

지정된 설정 정보를 제거 처리

resources 메서드와 비슷하지만, index 액션이 정의되지 않았으므로 show, edit, delete 등에서 :id를 매개 변수로 받지 않는다는 점이 다르다.

  • 참고1) resource 메서드도 config 리소스가 ConfigsController로 매핑된다.

  • 참고2) http://localhost:3000/rails/info/routes로 접근하면 브라우저로도 라우트 정의를 확인할 수 있다.

Last updated