2012-06-26 2 views
1

이 주제에 대해 잠시 동안 살펴 보았지만이 특정 질문의 방식에는별로 도움이되지 않습니다. 나는 내 질문에 대한 대답이라고 생각하는 수백 개 중에서 one answer을 찾았지만 그 점을 확실히하고 싶다. 내 질문은 REST URI 서버 측을 처리하는 가장 좋은 가장 일반적인 방법은 무엇입니까?클래스/메소드에 대한 REST URI 구문 분석

URI를 가지고 있다면 www.example.com/resources/resourceID를 처리하기 위해 .htaccess 파일을 설정하고 올바른 위치로 지정해야한다는 것을 알고 있습니다. 단순히 URI를 구문 분석하고 특정 클래스 (예 : 모든 HTTP 메소드를 처리하는 일부 거대한 switch 문과 소비자가 사용할 수있는 모든 요청 조합)에 대한 요청을 보내는 PHP 디스패처를 사용하는 것이 더 깔끔한 지 여부는 확실하지 않습니다. .htaccess가 그들을 파싱하도록합니다. 즉, .htaccess 파일을 사용하여 예제 URI를 라우팅하여 restHandler.php라고 말하거나 그냥 정규식으로 구문 분석하여 'Resources'클래스로 이동합니다.

이것은 내 자신의 질문에 대한 대답 일지 모르지만 .htaccess 메서드의 문제점은 www.example.com/resources1/resource1ID/resources2/resource2ID와 같은 것이 정규 표현식에서 캡처하기가 어렵다는 것입니다. 파일이므로 PHP에서 처리기를 사용합니다. 하지만 내가 허용하는 각각의 가능한 조합을 처리하기 위해 'ol switch/ifelse'명령문을 사용하는 것이 여전히 깔끔하게 보이지는 않습니다. 이것은 정말로 가장 깨끗한 방법입니까?

답변

1

가장 용액의 혼합물 인 두 : 전체 /resources1/resource1ID/resources2/resource2ID 부분을 캡처하고이 매개 변수로 전달되는 고정 된 엔트리 포인트로 리디렉션 .htaccess 사용 -

example.com/dispatch.php?route=/resources1/resource1ID/resources2/resource2ID 

, 예를 들어 그런 다음 PHP 코드는 런타임시 수집 할 수있는 정보 (예 : reflection)를 포함하여 원하는 정보를 활용하여이 정보로 수행 할 작업을 결정할 수 있습니다. 일반적으로이 디스패처는 라우팅 ¹을 사용하여 호출해야하는 컨트롤러와 작업을 결정한 다음 바인딩 ² 유형의 매개 변수 유형을 사용하여 해당 매개 변수로 해당 작업을 호출합니다.

거대한 switch 문을 통해 수행 할 수도 있지만 이는 최선의 방법은 아닙니다. ;-)


¹ 라우팅 : URL 패턴을 컨트롤러 동작에 매핑합니다. ASP.NET에 적용 here's relevant reading하지만 개념은 모든 MVC 프레임 워크에 공통

² 바인딩 : 알아내는 방법 컨트롤러 액션을 구현하는 방법의 형식 매개 변수에 대한 URL 맵에 존재하는 매개 변수

0

필자는 .htaccess를 사용하여 PHP 라우터에 모든 요청을 다시 쓰고 URI를 무시하고 PHP의 자동로드를 사용하여 적절한 컨트롤러를로드합니다 (URI의 나머지 RESTful 부분 전달). 그런 다음 각 컨트롤러는 URI에서 액션/매개 변수가 무엇인지 판단해야합니다.

아직 더러워졌지만 더 작은 조각으로 나뉩니다.

관련 문제