RESTful 경로

안녕하세요, 저는 sinatra 웹 앱 내에서 각각의 동사와 동작을 설명하여 RESTFUL ROUTES에 대해 글을 쓸 것입니다.

Restful 경로는 개발자와 사용자가 코드를 더 잘 인식하고 더 잘 이해할 수 있으므로 데이터를 쉽게 조작할 수 있는 디자인 패턴입니다.
Restful 경로는 GET, POST, PUT, PATCH 및 DELETE와 같은 HTTP 동사를 CRUD로 잘 알려진 컨트롤러 작업(Create, Read, Update, Delete)에 매핑합니다.
브라우저의 현재 위치를 나타내는 URL에 의존하는 대신 Restful 경로는 HTTP REQUESTS를 사용하여 USER로부터 작업을 보내고 받습니다. 이러한 요청은 요청 수신, 검사, 컨트롤러에서 HTTP 메서드 및 URL 식별 및 USER에게 응답을 제공하는 작업으로 코드 실행 시 응용 프로그램과 함께 작동합니다.

PUT-PATCH-DELETE



HTML은 상태 비저장이므로 GET 및 POST 요청만 지원하므로 POST 요청이 브라우저로 보낸 숨겨진 요청입니다. 위의 세 가지 작업을 수행하기 위해 "사용 Rack::MethodOverride"미들웨어로 Rack::MethodOverride를 Config.ru 파일에 사용합니다. 이 작업을 수행하려면 지원되지 않는 메서드로 요청을 시뮬레이트하기 위해 html 형식의 post 메서드를 사용해야 합니다. 다음을 입력해야 합니다.

<input type="hidden">
팔로우

<input type="hidden" name="_method">
메소드의 이름은 값으로 포함되어야 합니다.

<form method="post" action="/logout">
  <input  type="hidden" name="_method" value="DELETE">
  <input type="submit" value="Log out">
</form>


내 웹 앱에서 만든 각 작업을 하나씩 설명하겠습니다.

인덱스 액션

get '/pets' do 
        authenticate 
        @pets = current_user.pets.all
        erb :'/pets/dashboard'
    end


이것은 '/pets' 경로에 대한 GET 요청에 응답하며 인덱스 작업입니다. 인스턴스 변수 @pets를 통해 데이터베이스의 모든 사용자 애완 동물에 대한 보기 액세스를 허용하고 이를 my erb에 렌더링합니다:'/pets/dashboard'

새로운 액션

get '/pets/new' do 
      erb :'/pets/new'
    end 


새 애완 동물을 만들기 위해 양식을 로드하기 위한 GET 요청입니다.
  • 액션 만들기

  • post '/pets' do
          @pet = Pet.new(name: params[:name],age: 
              params[:age],notes: params[:notes])
          if @pet.save
            current_user.pets << @pet
            redirect "/pets/#{@pet.id}"
          else  
            erb :'/pets/new'
          end 
    


    이것은 POST 요청에 응답하고 매개변수를 기반으로 새 애완동물을 생성하고 데이터베이스에 저장합니다. 애완 동물이 생성되면 이 작업은 show.erb로 리디렉션됩니다.

    액션을 보여주세요

     get '/pets/:id' do
          @pet = Pet.find_by(id: params[:id])
          erb :'/pets/show'
        end 
    


    컨트롤러 작업은 '/pets/:id' 경로에 대한 GET 요청에 응답합니다. 이 경로는 params 해시를 통해 뷰의 ID로 애완 동물에 액세스하는 동적 경로이기 때문입니다.

    편집 작업

    get '/pets/:id/edit' do
            @pet = Pet.find_by(id: params[:id])
            dont_edit 
            erb :'/pets/edit'
        end
    


    이 경로는 GET 요청을 만들어 브라우저에서 편집 양식을 로드합니다.

    patch '/pets/:id' do 
            @pet = Pet.find_by(id: params[:id])
           dont_edit
            @pet.update(name: params[:name],age: params[:age],notes: params[:notes])
            @pet.save
            redirect '/pets'
        end
    


    양식을 제출한 후 PATCH는 '/pets/:id' 경로에 요청합니다. 먼저 매개변수를 통해 이름, 나이 및 메모별로 애완 동물을 가져온 다음 애완 동물을 저장하고 대시보드 '/pets'로 리디렉션합니다.

    조치 삭제

    delete '/pets/:id' do 
            @pet = Pet.find_by(id: params[:id])
            dont_edit
            @pet.destroy
            redirect '/pets'
        end 
    


    이 양식은 DELETE 요청을 통해 '/pets/:id' 경로에 제출됩니다. 이 작업은 데이터베이스에서 ID로 애완동물을 찾고 삭제하고 '/pets'로 리디렉션합니다.

    읽어 주셔서 감사합니다!

    좋은 웹페이지 즐겨찾기