2014-02-14 2 views
0

Laravel (PHP 초보자 경보)을 사용하여 방금 작업을 시작했으며이 프레임 워크에 내 REST JSON API를 구현하는 방법에 의문을 가지고 있습니다.여러 "중첩 된"작업 및 매개 변수가있는 Laravel 및 route

http://api.mysite.com/APIKEY/FUNCTION/(ARGUMENTS)* 

그러나 그것을 할 수있는 가장 좋은 방법은 무엇입니까 :

원하는 URL 경로가되어야 하는가?

각 기능 (인증, 검색 등)이 다른 경로에 있다고 가정하기 때문에 설명 가이드가 충분하지 않습니다. 내가 필요한 데이터 마이그레이션 및 모델을 만들 관리하고 나는 또한 경로 이런 식으로 설정 순간

는 :

Route::get('/{apikey}/{function}/{arg1}/{arg2}/{arg3?}', 
//The first two arguments are mandatory, the 3rd optional 
function($apikey,$function,$arg1,$arg2) 
{ 
     return Response::json(array(
     'status'=>'200'), 
     200); 
}) 
->where(array('function'=>'[A-Za-z]+')); 

이 올바른 행동 흐름해야하지만, 나는 몇 가지 의문이있다.

  1. 404 json 응답을 반환하지 않으면 apikey가 유효한지 확인하십시오. 그러한 함수를 어떻게 호출 할 것인가?
  2. 키 확인이 성공하면 어떤 기능이 필요한지 이해합니다 (스위치 구조를 사용해야합니까, 아니면 경로 그룹과 같이이를 구현할 수있는 더 좋은 방법이 있습니까?) Route::group이있는 모든 예에는 정적 접두사가 있지만 여기에는 접두사는 apikey, 변수 임)
  3. 데이터를 반환합니다 (사용 가능한 경우). 데이터베이스에서 가져옵니다. 각 함수에 대해 Models을 사용하여 데이터베이스에서 데이터를 가져 오는 특정 컨트롤러를 코딩해야한다고 가정합니다.

답변

1

1. 나는 아마 이것에 대한 경로 필터를 사용과 같이 거라고 생각 :

Route::filter('apikey', function(){ 
    if (Shared\API::checkIfKeyIsValid(Input::get('key') != true){ 
     return Shared\Errors::handleError("bad-api-key"); 
    } 
}); 

당신은 어떤 세션 변수가 설정과 일치, 그것은 아무것도 반환하는 경우, 즉 실패한 것 있는지 확인하기 위해 필터 점검을 볼 수 있으며, 경로가 정상적으로가는 사용자를 보내지 않습니다. 다음과 같이 경로에서 호출 할 수 있습니다.

Route::get('play/{id}', array('before' => 'loggedin', 'uses' => '[email protected]')); 

@ 2. 루트 그룹은 내가 구조화하는 방법이라고 생각합니다 (내가 무엇을 요구하는지 이해한다면).
편집 : 접두사가 변수 인 것과 관련하여 내가 대답 한 이후로 질문을 변경했습니다. API 키가 마지막에 그래서 나는 당신의 인수를 순서 것, 또는 당신은 당신이 원하는 것을 할 수있는, 이것 좀보세요 수 : 3 @https://github.com/jasonlewis/enhanced-router

Route::group(array('prefix' => 'api'), function() 
{ 
    //the routes for all API calls 
    Route::group(array('prefix' => '/v1'), function() 
    { 
     //for version 1 
     Route::group(array('prefix' => '/thing', 'before' => 'loggedin'), function() 
     { 
      //for things only 
      Route::get('/getThing/{id}', '[email protected]'); 
      Route::get('/getDifferentThing/{id}/{aux}/{optional?}', '[email protected]'); 
     }); 
    }); 
}); 

합니다. 데이터를 반환하는 작업은 컨트롤러에서 모델의 데이터를 사용하여 수행해야합니다. 보기로 반환하거나 다음과 같이 JSON 형식으로 반환하십시오.

+0

1 인증을 어떻게 처리합니까? true 또는 false를 반환하는 Controller 함수를 호출합니까? 전혀 명확하지 않습니다. 인증을 위해서 나는 단지 api 키를 보내고 그것에 대한 점검을하고 싶습니다. 인증 필터를 만들기 전에 인증 (키 체크) 기능을 정의해야하고 어떻게해야할지 모르겠다. :) 2 Ok 3 Ok – Vektor88

+0

@ Vektor88 # 1을 업데이트하여 잘 설명하도록 업데이트했습니다. 내 클래스가 Shared 폴더에 구조화되어 있고이 예제에서는 "API"라는 클래스가 있다고 가정합니다. 나는 그것을 들어 올리는 "checkIfKeyIsValid"라는 함수를 호출하고 키가 유효하면'true'를 리턴하고 그렇지 않으면'false'를 리턴합니다.필터는 그 함수가 무엇을 리턴 하는지를 체크하고'true'를 리턴하지 않으면 (사용자 정의) 에러를 던지고'return'이라고 말하기 때문에 필터가 실패하고 라우트 처리가 중지됩니다. – snollygolly

+0

편집 해 주셔서 감사합니다. 내가해야 할 일과 객체 지향 PHP 작동 원리를 이해하기 시작합니다. 그러나 요점 2는 처음부터 변수 접두사를 필요로했습니다. 나는 아무것도 변경하지 않았습니다! – Vektor88

관련 문제