2014-09-29 2 views
1

네임 스페이스 + 리소스 + 컬렉션을 사용하는 것이 성냥 사용과 어떻게 다른가요?레일 경로 : namespace + resource + collection vs match

예를 들어, 일부 엔드 포인트에 대해 모든 HTTP 메소드를 처리하려고한다고 가정하십시오. 여기

namespace :webhooks do 
    resources :some_service, only: :none do 
    collection do 
     get :some_action 
     post :some_action 
     put :some_action 
     patch :some_action 
     delete :some_action 
    end 
    end 
end 

# Compare to 

match '/webhooks/some_service/some_action', to: 'webhooks/some_service#some_action', via: :all 

rake routes에 따라 관련 경로입니다, 내가 다른 통해 하나의 방법을 선호해야하는 이유가 추론 라인 카운트 게다가

        Prefix Verb  URI Pattern          Controller#Action 

some_action_webhooks_some_service_index GET  /webhooks/some_service/some_action(.:format)  webhooks/some_service#some_action 
             POST  /webhooks/some_service/some_action(.:format)  webhooks/some_service#some_action 
             PUT  /webhooks/some_service/some_action(.:format)  webhooks/some_service#some_action 
             PATCH /webhooks/some_service/some_action(.:format)  webhooks/some_service#some_action 
             DELETE /webhooks/some_service/some_action(.:format)  webhooks/some_service#some_action 
     webhooks_some_service_some_action   /webhooks/some_service/some_action(.:format)  webhooks/some_service#some_action 

입니까?

답변

1

이 경우 match이 최선의 해결책입니다. 리소스 설정은 안식처 경로를 정의하기 위해 우선적으로 사용되어야하며 (일부 예외적 인 다른 경로를 제외하고) 키워드는 이미 일부 리소스가 끝점임을 의미합니다. 예 대신 AuhtService.perfom_sing_inSession#create를 사용합니다 (편안 자원으로 세션을 갖는 대신 서비스에 대한 RPC 호출을 수행하는) 당신은 모든 노선의 모든 REST 의미를 가지고하지 않는 귀하의 경우에는

을, 그래서 경기는 그냥

+0

[이 질문에 대한 답변] (http://stackoverflow.com/questions/2441962/what-is-restful-routing)은 편안한 결과 라우팅을 위해 다른 HTTP 메소드와 URL을 조합하여 사용하는 것이 좋습니다. 그렇다면 위의 두 예제가 모두 안정적이라고 생각합니다. 엔드 포인트에 리소스가 있다고 가정 해 보겠습니다. : all '을 사용하면 책 만들기, 책 업데이트, 책 삭제와 같은 작업을 할 수 있습니다 (만약 당신이이 책을 사용한다면'match '/ api/library/book' 적절한 HTTP 메소드, 그렇지 않으면 405 응답을 얻음). 'resources' 메소드는 지금 사용하는 것이 더 낫지가? – Dennis

+1

이 경우 나는 두 가지 방법으로 잘못된 점을 전혀 볼 수 없습니다. match가 정확히 이루어지기 때문에 ressources dsl을 non-restfull 라우트에 사용하는 것은 다소 번거로운 일입니다. 그러나 'match'는 간단한 빌딩 블록이며 더 우아하게 정의 할 수 있다면 restfull 라우트에 사용하는 것이 좋습니다. 그러나 누군가는 또한이 경우에 ressource dsl을 사용하는 것이 더 명확하고 따라서 resfull ressouce를 가지고 있음을 나타내는 자체 문서화 된 코드라고 주장 할 수 있습니다. –

+0

좋은 지적. 리소스 DSL이 분명히 더 명확하고 일치하는 라이너와 비교하여 명확한 의도를 제시한다고 생각합니다. 특정 HTTP 메소드를 지원하지 않으면 DSL 리소스를 사용할 때 해당 동사 옆에있는 인라인 주석 (예 : # 405)을 사용하여 말할 수 있습니다. – Dennis