2013-08-12 2 views
0

저는 RESTFul API에서 laravel로 작업 중이며 프로젝트에서 콘텐츠 협상을 사용하려고하지만이를 수행하는 방법을 모르겠습니다. 저는 API 버전으로 컨트롤러를 분리 시켰습니다. API 버전을 구별하고 버전에 따라 올바른 컨트롤러를 사용하고 싶습니다.Laravel 4 콘텐츠 협상을 사용하는 RESTful API

내 API 라우터는 다음 각 컨트롤러에, 어쩌면

Route::group(array('prefix' => 'api'), function() { 
    Route::resource('users', 'API\V1\UsersController'); 
}); 

나는 나의 경로 그룹에서 사용할 수있는 api.type 필터를 만들어야합니까 아니면 경로 그룹 clousure에서 그렇게해야 나?

답변

3

응용 프로그램 논리를 라이브러리 클래스로 분기하는 것을 두려워하지 마십시오. Laravel의 주어진 폴더 구조 안에 모든 것을 넣을 필요는 없습니다.

실제로 클래스의 네임 스페이스 그룹에 추가하는 것이 큰 이점이 될 수 있습니다. creating your own application library here에서 일부 설정을 볼 수 있습니다.

설정을 완료하면 반환 할 콘텐츠 유형을 결정하는 책임을지는 클래스를 만들 수 있습니다. 이는 Accept 헤더, URL 매개 변수 또는 사용자가 정의한 모든 것을 기반으로 할 수 있습니다 (API 작성자는 귀하에게 달려 있음).

아마도이 클래스는 Accept 헤더를 사용하고 "json", "xml"및 "html"과 같은 것으로 정규화합니다.

Accept 헤더를 통해 수행하는 경우 요청 클래스에 도움이되는 somemethods이 있습니다.

그래서, 의사 코드 (! 따라야 할 구문 오류)에, 컨트롤러가 같은 것을 할 수 있습니다

당신이 할 수있는 무엇을 단지 생각
/* GET /api/users */ 
public function index() 
{ 
    // Might return "json" or "xml" or "html" 
    $contentType = \My\ContentType\Class->getContentType(); 

    $users = User::all(); 

    // Not shown here is logic to set `content-type` header in the returned response (json vs xml vs html) 
    // Perhaps a method to go into your implementation of \My\ContentType\Class 
    return View::make('users.'.$contentType)->with(array('users' => $users)); 


} 

. 요점은 비즈니스 로직을 구현할 수있는 라이브러리에서 작업하는 것입니다.이를 통해 비즈니스 로직을 애플리케이션에 추가하는 방법을 시작할 수 있습니다.

희망이 있습니다.

+0

감사합니다. @fideloper, 훌륭합니다. 내 자신의 API를 사용하는 웹 응용 프로그램을 개발 중입니다. API와 응용 프로그램 논리가 모두 동일한 프로젝트에 있습니다. 라이브러리 또는 패키지의 컨트롤러와 API 부분을 분리하는 것이 더 좋다고 생각하십니까? – ramdemon

+1

경고 : 당신에게 ** 의견 **을 주려고합니다 : 당신은 그것들을 분리 할 수 ​​있습니다, 그러나 당신이 유스 케이스에 의존 할 필요가 있는지 여부를 결정해야합니다. 개발자라면 개발자를 분리하지 않을 수도 있습니다. 팀이 있다면 팀을 분리하는 것이 합리적 일 수 있습니다. devs의 삶을 편하게 만드는 것으로 가십시오. 분리는 모두 유지 보수 가능성에 관한 것입니다 (향후 코드 변경 및 팀 작업 모두) – fideloper