젠드 프레임 워크 1.12.3을 사용하여 API를 개발 중입니다. 이후,Zend Rest Route - 계층 적 URL을 만드는 방법?
- http://api.example.com/professors
- http://api.example.com/professors/:professorId
- http://api.example.com/professors/:professorId/subjects
- http://api.example.com/professors/:professorId/subjects/:subjectId
나는이 방법을 사용하는 고려 중이 야 : 계층 URL을 가지고 나는 Zend_Rest_Route를 사용하고 있지만, 내가 좋아하는 것 특정 교수에게 특정 과목을 할당해야하며이 스키마가 깔끔하게 해결할 수 있다고 생각합니다.
그러나 계층 적 URL을 얻는 데 어려움을 겪고 있습니다. 의 설정 .ini 파일에 체인으로
Zend_Controller_Router_Route를하지만 항상 같은 행동을 지적 http://api.example.com/professors/:professorId/subjects에 액세스 할 때, 즉 (지정할 수 컨트롤러와 액션 모두 이후 : 난 이미 시도했습니다 호출 메소드가 무엇이든 - POST, PUT, GET, DELETE - 항상 config .ini 파일에 지정된 작업을 가리 킵니다. 예를 들어, 설정 파일에서 getAction을 지정했다면, 체인을 사용하여 내가 사용한 메소드가 무엇이든 항상 getAction을 호출합니다. 현재 POST 호출이있을 때 실제로 postAction()을 호출합니다 (PUT, GET, DELETE, PATCH, HEAD 및 OPTIONS에 대해 유사하게 발생 함). 내 컨트롤러 파일은 다음과 같다 :
class V1_ProfessorsController extends REST_Controller { public function optionsAction() { // code goes here } public function headAction() { // code goes here } public function indexAction() { // code goes here - list of resources } public function getAction() { // code goes here } public function postAction() { // code goes here } public function putAction() { // code goes here } public function patchAction() { // code goes here } public function deleteAction() { // code goes here } }
- 가 Zend_Rest_Route 하위 클래스와 here을 지적 경기() 함수를 오버라이드 (override). 문제는
http://api.example.com/professors/:professorId/subjects
을 호출 할 때 작동하지만, 여전히http://api.example.com/professors
을 호출 할 때 사용되는 것과 동일한 ProfessorsController를 사용한다는 것입니다. 이 문제에 대해서는 잘 모르겠지만 자체 컨트롤러 (예 : ProfessorsSubjectsController)를 사용하는 것이 가장 좋을 것이라고 생각합니다.
또한 질문이 있습니다. 계층 적 경로는 어떻게 작동해야합니까? 다른 리소스/하위 리소스에 대해 서로 다른 컨트롤러를 갖는 것이 더 낫습니까? 예 : http://api.example.com/professors/:professorId
의 ProfessorsController와 http://api.example.com/professors/:professorId/subjects/:subjectId
의 ProfessorsSubjectsController가 있습니까?
이것에 대한 답변을 찾는 과정이 있습니까? 똑같은 문제로 고뇌. – Gabriel
@Gabriel 불행히도, 아직 없습니다. API의 다른 부분을 개발 중이므로 계층 구조 URL을 마지막으로 남겨 둘 것이라고 생각했습니다. 해결책을 찾으면 여기에 게시하겠습니다. 네가 그렇게한다면 나는 그것을 고맙게 생각한다. – Daniel
할 것입니다. 체인 루트를 사용할 솔루션이 있는지 확인합니다. – Gabriel