Rails의 RESTful 규칙

RESTful 경로는 만들기, 읽기, 업데이트 및 삭제의 네 가지 일반 범주로 나뉩니다. 일반적으로 'CRUD' 작업이라고 합니다. 거의 모든 주요 웹사이트는 전체 CRUD를 사용하므로 사용자가 데이터베이스와 상호 작용할 수 있습니다.

이 네 가지 CRUD 작업을 데이터베이스에 구현하기 위해 아래와 같이 각 작업을 HTTP 동사와 결합합니다.
  • POST로 만들기
  • GET으로 읽기
  • PATCH 또는 PUT으로 업데이트
  • 삭제 및 파괴

  • 예를 들어, birds.rb 모델에 대해 전체 CRUD를 수행하려는 경우 Rails 프레임워크에서 다음과 같이 표시됩니다.



    리소스로 RESTful 경로 만들기



    Rails에서 전체 CRUD 작업을 설정하려면 먼저 route.rb에 일부 경로를 생성해야 합니다. 아래와 같이 리소스를 사용하여 이를 수행할 수 있습니다.

    # config/routes.rb
    
    Rails.application.routes.draw do
      resources :birds
    end
    


    애플리케이션이 네 가지 CRUD 작업을 모두 사용하지 않는 경우 필요한 작업만 포함하도록 경로를 사용자 지정할 수 있습니다. 예를 들어 웹사이트가 읽기 전용이고 index 및 show 컨트롤러 작업으로 GET 요청만 하면 route.rb는 다음과 같이 표시됩니다.

    # config/routes.rb
    
    Rails.application.routes.draw do
      resources :birds, only: [:index, :show]
    end
    


    외부 응용 프로그램에서 사용하지 않는 경로를 가지지 않는 것이 좋습니다. 따라서 위 구문을 사용하여 필요한 경로만 선택하는 것이 중요합니다. only:except: 로 교체하여 사용하지 않는 경로만 나열하는 옵션도 있습니다.

    Scaffold를 사용하여 Rails에서 CRUD의 빠른 설정



    Rails 스캐폴딩은 Rails 애플리케이션의 일부 주요 부분을 생성하는 빠른 방법입니다. 단일 작업으로 새 리소스에 대한 모델, 뷰, 컨트롤러를 생성하려는 경우 아래 예와 같이 스캐폴딩을 사용할 수 있습니다.

    $ rails g scaffold Bird name:string species:string
    


    터미널에서 위의 코드를 실행하면 전체 CRUD가 내장된 컨트롤러를 포함하여 Bird 모델에 대한 여러 파일이 생성됩니다. 그러나 또는 앱의 프런트 엔드에 보기를 사용하는 것처럼 파일을 설정합니다. 예를 들어 React.js를 사용하여 빌드된 프런트 엔드를 사용하는 경우 불필요한 파일이 생성될 수 있습니다.

    Resource를 사용하여 Rails에서 CRUD 설정



    React.js를 프런트엔드 라이브러리로 사용하는 앱에 불필요한 파일이 있는 위의 문제를 피하기 위해 대신 터미널에서 다음 코드를 실행할 수 있습니다.

    $ rails g resource Bird name:string species:string
    


    이렇게 하면 Bird 모델에 필요한 여러 파일이 생성됩니다. 그러나 컨트롤러에는 이미 빌드된 CRUD 작업이 없습니다. 따라서 아래와 같이 전체 CRUD에 필요한 코드를 수동으로 작성해야 합니다.

    # app/controllers/bird_controller.rb
    
    class BirdsController < ApplicationController
    
    #Error Handling
      rescue_from ActiveRecord::RecordNotFound, with: :render_not_found_response
    
      # GET /birds (show all birds)
      def index
        birds = Bird.all
        render json: birds # renders data in JSON format
      end
    
      # POST /birds (create a new bird)
      def create
        bird = Bird.create(bird_params)
        render json: bird, status: :created
      end
    
      # GET /birds/:id (show a specific bird)
      def show
        bird = find_bird
        render json: bird
      end
    
      # PATCH /birds/:id (update a specific bird)
      def update
        bird = find_bird
        bird.update(bird_params)
        render json: bird
      end
    
      # DELETE /birds/:id (delete a specific bird)
      def destroy
        bird = find_bird
        bird.destroy
        head :no_content
      end
    
      private # code below this line is private (secure)
    
      def find_bird
        Bird.find(params[:id])
      end
    
      def bird_params
        params.permit(:name, :species, :likes)
      end
    
    # Error handling
      def render_not_found_response
        render json: { error: "Bird not found" }, status: :not_found
      end
    
    end
    


    좋은 습관


  • 전용 메서드를 사용하여 강력한 매개변수 사용
  • 오류를 처리할 코드가 있음
  • route.rb에 사용하지 않은 경로가 없습니다.
  • 코드가 수행하는 작업을 설명하는 주석을 남김

  • 자원



    Rails Guides

    좋은 웹페이지 즐겨찾기