2013-04-11 1 views
3

나는이 "api-centric"개념에 대해 머리를 감싸려고 노력하고 있습니다. 여러 가지 이유로 (거꾸로 뒤집은 후) 나는 대답을 찾을 수 없습니다. 내 자신, 그래서 당신이 나를 도울 수 있기를 바랍니다 :)Api-Centric 응용 프로그램 만들기, 내 ​​자신의 의문점

여기는 개인 프로젝트의 일부로 소셜 응용 프로그램 웹 사이트와 같은 것을 만들 필요가 있습니다. 단지 "작은 프로젝트"이기 때문에 "좋아요"라고 말합니다. 너무 멋져.

내가 생각하는 생각은 내가 휴식 서비스를 만들고, 리소스 (생성/삭제/업데이트/읽기)에 필요한 모든 방법을 가지고 http://api.domain.com/v1/ 같은 것을 말하는 것입니다.

이제이 서비스가 생성 된 후 내 웹 사이트를 만들어야합니다 (예 : http://www.domain.com/).이 웹 사이트는 각 작업에 대해 내 api.domain.com과 통신합니다. 새로운 사용자가 등록하면 API 서버에 데이터를 보내고 처리하고 응답을 반환합니다.

그런 다음 웹 사이트를 만든 후 phonegap을 사용하여 iphone 및 Android 용 기본 응용 프로그램을 만들 계획입니다. 이러한 모바일 응용 프로그램은 기본적으로 내 웹 사이트처럼 작동하여 API 서버에 연결하고 다양한 작업을 수행합니다.

인증이 필요하지 않으면 매우 간단합니다. 따라서 API 끝점을 아는 사람이라면 모든 리소스를 관리 할 수 ​​있습니다. 사용자가 추측 하듯이 내가 원하지 않는 일을 구현해야합니다. 권한 부여 메커니즘 및 나는 무엇을 사용해야할지 잘 모르겠습니다. OAuth2를 구현하여 내 API가 oauth 공급자 역할을하도록하고 내 웹 사이트/모바일 앱이 API에 연결하고 권한을 얻은 다음 작업을 수행 할 것으로 생각합니다. 좋은 접근인가, 어떤 생각인가?

다음으로 oauth를 고수하고 모든 것이 정상적으로 작동한다고 가정 해 보겠습니다. 내 사용자에게 자신의 앱을 만들어 다른 사용자/자신의 데이터에 대한 정보에 액세스 할 수있게하려면 어떻게해야할까요? API를 사용하지 않는 것이 좋습니다), 앱을 설치할 사용자는 자신의 정보에 액세스하려면 앱을 승인해야합니다. 나는 oauth (페이스 북/트위터/다른 사람들이 그랬던 이래로)가 가능하다는 것을 안다. 문제는 단순한 사용자 생성 앱과 내 자신의 앱 (웹 사이트 및 모바일 앱)을 구별하는 방법이다. 이 분리는 퍼심을 요청할 때 다양한 "범위"를 제공함으로써 가능합니까? 그렇지 않은 경우 어떤 다른 접근 방법을 사용해야합니까?

나는 oauth에 익숙하지 않으므로 어쩌면 질문 중 일부가 약간 잘못되어 잘하면 내 문제의 요점을 알 수 있습니다.

도움이된다면 Yii 프레임 워크, Apache 2 (mod ssl available), MySQL과 함께 PHP 5.4를 사용하겠습니다.

감사합니다 :)

답변

0

YII는 CWebService (SOAP)을, 당신이 사용하거나 실제로 자신의 REST API를 만들 수 있습니다.

내가 원하는대로 API를 직접 만들었습니다. 내가 API를 사용자 이름과 CUserIdentity를 사용하여 API를 암호로 로그인하고있어 안전을 위해

는 : POST 데이터가 응용 프로그램에서 오는

if (Yii::app()->apiuser->isGuest) { 

       if (!empty($_POST['apiUser']) && !empty($_POST['apiPassword'])) { 

       $identity = new ApiUserIdentity($_POST['apiUser'],$_POST['apiPassword']); 
       $identity->authenticate(); 

       if($identity->errorCode===ApiUserIdentity::ERROR_NONE) 
       { 

        Yii::app()->apiuser->login($identity); // Login for 30 minutes 
        $responseData['success'] = 1; 
        $responseData['sessionId'] = Yii::app()->session->sessionID; 

       } else { 

        $responseData['error'] = 'Incorrect username and/or password'; 

       } 

       } 

      } 

그것은 API를 사용합니다. SessionId는 앱으로 다시 전달되므로 다음 로그인은 필요하지 않습니다.당신은 API 요청을 만들기 위해 CURL을 사용하는 경우에는 사용하여 다음 API 요청으로 다시 세션 ID를 보낼 수 있습니다

$strCookie = "PHPSESSID=".$sessionId."; path=/"; 
// Set the COOKIE files 
curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
curl_setopt($ch, CURLOPT_COOKIE, $strCookie); 

이 방법 세션마다 다음 요청을 유지한다.

+0

네,하지만 REST가 의미하는 바를 모두 깨뜨린 이유는 세션을 사용하여 로그인 상태를 유지하기 때문에 더 이상 상태가 유지되지 않습니다. – Twisted1919

관련 문제