2012-07-08 3 views
0

첫 API를 만들려고하는데 SOAP에서 RESTful API에 이르기까지 다양한 API 유형에 대해 많은 연구를 해왔습니다. 나는 그것이 내 요구에 가장 잘 부합하는 방법이라고 생각하여 HTTP 헤더로 RESTful 메소드를 사용하기로 결정했다.REST http scheme

RESTful API 체계가 작동하는 방식에 대해 많이 읽은 후에 누군가가 나를 도울 수 있기를 바란다는 의문이 생겼다. 퍼즐 조각이 누락 된 조각처럼 보입니다. app/user/{userid}/{property}하지만 내가 이해하지 못하는 것은 그가 서버 측에서 해석되는 방식입니다 -

은 내가 일반적으로 같은 특정 URL에 뭔가 하나 POST, GET, PUT, 또는 DELETE를 통해 데이터를 보낼 것이라는 점을 알고있다. 분명히 다양한 사용자를위한 끝없는 디렉토리가 없기 때문에 이러한 요청을 잡기 위해 htaccess 파일에서 일종의 조작이 있습니까? 누군가이 문제에 관해 밝힐 수 있습니까?

감사합니다.

답변

2

물론 POST/PUT에서 새로운 파일과 디렉토리를 만드는 거대한 디렉토리 구조를 유지하는 데 방해가되는 것은 없습니다. 그러나 이것은 번거롭고 오류가 발생하기 쉽습니다.

일부 서버 측 기술이 필요합니다. REST를 염두에두고 이상적으로 구축되었습니다. 이 기술/프레임 워크는 URL 패턴을 이해하고이를 컨트롤러/핸들러/코드 일부로 매핑하고 예에서 useridproperty과 같은 경로 변수를 추출 할 수 있습니다.

@Path("app/user/{userid}/{property}") 
public class UserResource { 

    @GET 
    public String getUserProperty(
     @PathParam("userid") int userId, 
     @PathParam("property") String property 
    ) { 
      //... 
    } 
} 

이 프레임 워크는 낮은 수준의 물건을 처리하는 방법을 잘 참조 : 예를 들어

당신은 당신이 쓸 수 표준이? 예를 들어 액세스 할 때마다 GET app/user/42/salary 당신을 위해 42salary을 추출하고 적절한 인수를 사용하여 getUserProperty으로 전화하십시오.

이러한 프레임 워크의 또 다른 장점은 원하는 Content-type을 기반으로하는 자동 정렬/비 정렬입니다. 라이브러리는 JSON/XML을 언 마샬링하고 객체를 컨트롤러 메소드에 전달하며 반환 된 객체를 일부 표현으로 마샬링합니다.

0

프레임 워크를 사용하여 쉽게 경로를 정의 할 수 있습니다. 현재 SILEX의 문서 http://silex.sensiolabs.org/

+0

볼 수 있습니다 당신은 다음 curl -X GET -i http://localhost/index.php/users/1

할 수있을 것입니다

// index.php require_once __DIR__.'/../vendor/autoload.php'; $app = new Silex\Application(); // If we stored users in an array ... $users = array( 1 => 'Adrien', 2 => 'John', ); $app->get('/users/{id}', function($id) use($app, $users) { return $users[$id]; }); $app->run(); 

:

예를 들어, 당신은 당신이 같은 경로를 정의 할 수있는, PHP에서 SILEX 사용할 수 있습니다 그렇지만 특정 URL에 CURL을 보내는 경우이 프레임 워크가 어떻게 데이터를 가져 와서 적절하게 지시합니까? 나는 Silex 응용 프로그램을로드하고 URL을 해석하는 데 사용할 수있는 단일 장소에 모든 데이터를 보내지 않고 있습니다. 실제로 특정 URL에 컬을 전송하고 있습니다. – ackerchez

+0

내 대답 – AdrienBrault

+0

아를 업데이트했습니다. 여전히 특정 페이지로 말리기를하고 목표 페이지 다음에있는 모든 것을 변수로 취급합니다. 이것은 수정 된 GET처럼 보입니다. – ackerchez