2013-08-30 2 views
2

RESTful API에서 각 리소스에 PHP 클래스가 있습니다. 요청 방법에 따라 올바른 기능을 호출하도록 라우팅됩니다. /api/users/을 할 수있는 모든 사용자 요청RESTful API 아키텍처 : 여러 리소스에 대한 쿼리

Class Users{ 
    public function get($params){ 
     // get information and return result 
    } 
} 

: 여기에 사용자의 GET 호출에 대한 예입니다. 단일 사용자 요청 /api/users/:id
지금까지 아무런 문제가 없습니다.

지금 내 질문 :이 /api/users/:id/posts 같은 것을 요청할 때 특정 ID로 사용자가 만든 모든 게시물을 반환해야 API 나는 PHP 클래스 구조에서이 호출을 구현하는 것이 어떻게

(Posts은 BTW 다른 자원) 위에 주어진?

리소스 Users에있는 get() 함수의 매개 변수를 사용하여 처리 하시겠습니까?
새 리소스를 추가하십시오 UsersPosts?
Users 클래스의 새 메서드에서 함수를 추가 하시겠습니까?

답변

1

요청에 따라 컨트롤러 클래스와 메소드가 호출되는 라우터 클래스를 만들어야합니다 (Symfony 또는 Kohana와 같은 일부 설정 프레임 워크가 아이디어 라우팅을 처리하는 방법을 확인하거나 사용하기도합니다). 거기에서 Users::getPosts($userId) 또는 Posts:getByUserId($userId) 중 어떤 것이 든 나에게 (클래스는 일종의 교차 참조를 나타내며 컨트롤러 나 모델의 가장 좋은 이름이 아닐 수 있습니다).

0

'사용자'를 동시에 2 개의 다른 리소스를 처리하는 것보다 posts 리소스에 대한 필터로 생각하는 것이 더 쉬울 것입니다. 다음과 같이 할 수

뭔가 :

/api/posts/by_user/user_id 

이런 식으로 당신은 API를 페이지 당 하나의 자원을 유지하고, 당신이 원하는만큼의 필터를 적용 할 수 있습니다.

/api/posts/by_user/USER_ID/category/videos/ 

는 개인적으로 나는 더욱 가서 URL 방식에서 order_by 또는 order_dir 같은 다른 CRITERIAS를 가지고 있고, 그들은 모두 서로에 추가 할 수 있으며, 같은 교환 :

/api/posts/category/videos/by_user/USER_ID/order_by/title/order_dir/asc/limit/5