2012-08-08 2 views
5

사용자가 게시물을 만들고 편집 할 수있는 간단한 CakePHP 응용 프로그램이 있습니다. 그리고 앞으로 어떤 시점에서 PhoneGap에 응용 프로그램을 가져올 것입니다.CakePHP를 사용하여 API 만들기

따라서 JSON을 AJAX 요청에 사용하도록 작성한 API를 만들었지 만 REST를 사용하지 않거나 다른 코드와 다른 점을 설정하기 때문에 잘못하고 있다고 느낀다. 컨트롤러에서.

(이를 위해 사용자 지정 경로를 만드는 것) 그때 사용하는 AJAX를 사용하여 호출 할 수있는 domain.com/api/posts/all :

class ApiController extends AppController { 

    function index() { 
     $posts= $this->Post->find('all'); 
     $this->set(compact('posts')); 
    } 
} 

이 같은 URL을 만들려면 (참고 : 나는이 예를 들어 JSON으로 선회에 대한 부분을 누락) 내 모바일 앱에서

이제 내 질문은 REST를 사용하여 다르게 수행하는 것이 무엇일까요? 나는 응용 프로그램을 구축하는 데 아주 초보자이고 내 강점은 백엔드 개발보다는 프론트 엔드에 있으므로 포인터를 사용하면 도움이 될 것입니다.

+0

PhoneGab 앱에서 Sencha Touch를 사용하는 경우 RESTful 대신 [Ext.Direct implementation] (http://banchaproject.org)을 사용할 수도 있습니다. –

답변

3

CakePHP에서 REST를 켜면 기본적으로 적절한 HTTP 메소드가 액션으로 라우팅됩니다. 따라서 GET 요청은 색인 또는보기 조치로 라우트되고, DELETE 요청은 h 제 조치로 라우트됩니다.

이렇게하면 API를 사용하는 사람들에게 매우 쉬운 끝점이 만들어집니다. 적절한 조치를 HTTP 메소드 케이크 의지 노선이에 따라,이 엔드 포인트를 호출 할 때 다음 (모든 HTTP 요청 구문 오류를 용서) : 루트가 /posts/index.json하는

// single endpoint 
http://example.com/api/posts 

GET 요청을

http://book.cakephp.org/2.0/en/development/rest.html

: 경로는 대부분의 질문에 응답 할이 독서

POST /api/posts/1.json HTTP/1.1 
Host: example.com 
Content-Type: application/x-www-form-urlencoded; charset=utf-8 
Content-Length: 24 

data[Post][name]=updated 

을 /posts/edit/1.json하는

GET /api/posts.json HTTP/1.1 
Host: example.com 

POST 요청

+0

좋습니다. REST를 사용하지 않고 컨트롤러에서 표준 메서드를 만드는 것과 어떻게 다른가요? 또한 이것은 다른 질문처럼 보일 수 있지만 DELETE 메서드는 POST 또는 GET 메서드에 대해 폼에 대해 무엇을 제공합니까? – Cameron

+0

하나는 개발자와 개발자 (문서 만들기)가 더 쉽습니다. 엔드 포인트가 적습니다. 둘째, 적절한 HTTP 메소드가 필요할 것이다. 예를 들어 더 이상 사용자가 브라우저에서'/ api/posts/delete/1'을 방문하여 게시물을 삭제할 수 없으면 실제로 적절한 방법을 사용하여 DELETE를 요청해야합니다. 또한, Cake의 REST 시스템은 당신이 다른 컨텐트 타입을 받아들이고 그것을 자동으로'$ this-> request-> data'에서 디코딩 할 수 있도록 해줄 것입니다.작동하지 않으면 RESTful API를 만드는 것이 적절한 방법입니다. – jeremyharris

3

귀하의 우려 사항이 나머지 교장에게 사실 인 경우. 웹 서비스

  • 웹 서비스에서 지원하는 데이터의 인터넷 미디어 유형에 대한

    • 자료 URI :

      그런 다음, 일반적으로 명심해야 할 4 점있다.
      이것은 종종 JSON, XML 또는 YAML이지만 다른 유효한 인터넷 미디어 유형이 될 수 있습니다.

    • HTTP 메서드 (예 : GET, PUT, POST 또는 DELETE)을 사용하여 웹 서비스에서 지원하는 작업 집합입니다.
    • API는 하이퍼 텍스트 자세한 내용은

    참조, http://en.wikipedia.org/wiki/Representational_state_transfer를 구동해야합니다.

    이제 위의 코드를 아래의 의사 코드에 가까운 것으로 변경하는 것이 좋습니다.

    1) 리소스의 존재가 중요합니다. 귀하의 게시물을 URI가 액세스 할 수있는 리소스 모음으로 생각하십시오.(인증 & 권한은도 처리 할 수있는 다른 문제이다) :

    api.domain.com/resources/posts는 작업 => 게시물

    2)의 컬렉션이 URI 점 세트가 당신이 HTTP 방법을 사용하여 지원하려는 것입니다/동사는 우리가이 작업을 수행하여 컬렉션의 한 멤버를 검색 할 수 있습니다 예를 들어, 정의해야합니다

    api.domain.com/resources/posts/12

    다음은 수신 헤더에서 찾을 수있는 본문 &입니다. 이 URI에 대한 요청 :

    하는 수락 : 응용 프로그램/JSON
    콘텐츠 형식 : 응용 프로그램/JSON
    요청 URL : http://api.domain.com/resources/posts/12
    신청 방법 : GET

    응용 프로그램의 유형을 처리 할 수 ​​있어야합니다

    : 요청,

    , 점 (1)에 우리를 다시 가져 오는 URI의 동작을 규정하는의 필요없이 오히려 URI는 이런 식으로 작성하는 것보다

    domain.com/api/posts/ 모든

    귀하의 URI가 이런 식으로 모델이어야한다 :

    자원/글/컬렉션에서 한 회원을 검색 할 수 (12) 자원/형/항목으로,
    리소스/게시물을 리소스/유형으로 전체 컬렉션에서 사용할 수 있습니다. 당신은 몇 가지 일반적인 작업을 구현할 수 여기

    공통 추상 클래스 :

    여기에 코드의 예입니다. 서비스 기반 구현 인 을 사용하는 경우 서비스를 통해이 작업을 수행 할 수도 있습니다.

    abstract class ResourcesController extends AppController { 
    } 
    
    
    class PostResourcesController extends ResourcesController { 
    
        /** 
        * By the time this method is called in your controller/class, you already know 
        * that the HTTP method is GET. 
        * 
        * @param Request\$_GET $request A request instance 
        * @param int   $postId The post ID to retrieve 
        * 
        * @return Response A reponse instance 
        */ 
        function getPost(Request $Request, $postId = null) 
        { 
         /** 
         * Here you can use the request object to get 
         * the response content type  
         * the requesting client accepts. Example JSON or XML. 
         */ 
    
         /** 
         * using the $postId you can then query your database 
         * to retrieve a post with that ID or use a sort of 
         * service. 
         */ 
    
         /** 
         * Once you implemented a you logic 
         * you can build a response to return. 
         */ 
        } 
    } 
    

    이 코드는 불완전하지만 난 당신에게 실제 평안한 API의 모양에 대한 아이디어를 제공 바랍니다.


    "응용 프로그램은 리소스의 식별자와 필요한 동작을 알면 리소스와 상호 작용할 수 있습니다."

    잘하면 도움이되었습니다.

  • 관련 문제