간단한 백엔드 만들기 클래스 > 개발자팁

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.

간단한 백엔드 만들기 클래스 정보

PHP 간단한 백엔드 만들기 클래스

본문

vue 프론트엔드 작업중인데 백엔드가 완성되지 않아서 목업api로 사용하려고 만들어 봤습니다.

간단하게 백엔드를 구성할 수 있습니다.

 

 

<?php
class App {
    
    private $params = array();
    
    // 생성자 (CORS 처리)
    public function __construct(){
        if (isset($_SERVER['HTTP_ORIGIN'])) {
            header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
            header('Access-Control-Allow-Credentials: true');
            header('Access-Control-Max-Age: 86400');
        }
        
        // OPTIONS 요청일때
        if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
            if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
                header("Access-Control-Allow-Methods: POST, GET, DELETE, PUT, PATCH, OPTIONS");

            if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
                header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

            exit(0);
        }
    }
    
    // json 타입으로 결과 뿌리는 함수
    public function print($arr, $code=200) {
        http_response_code($code);
        echo json_encode($arr, JSON_UNESCAPED_UNICODE);
        exit;
    }
    
    // 파라미터 가져오기 (post, patch, put... 모두 이걸로 얻어옴)
    public function getData() {
        return json_decode(file_get_contents('php://input'), true);
    }
    
    // URL 파라미터 구해오기
    public function getParams() {
        return $this->params;
    }
    
    // URL 분석
    private function route($pat) {
    
        $pat = '~^'.$pat.'$~i';
        
        $request = $_SERVER['REQUEST_URI'];
        $ret = preg_match($pat, $request, $mat);
        if (count($mat) > 1) {
            array_shift($mat);
            $this->params = $mat;
        }
        return $ret;
    }
    
    // METHOD 체크
    private function checkMethod($method) {
        $_method = strtolower($_SERVER["REQUEST_METHOD"]);
        if ($_method !== $method) return false;
        return true;
    }
    
    // GET 요청 분석
    public function get($pat) {
        if(!$this->checkMethod('get')) return false;
        return $this->route($pat);
    }

    // POST 요청 분석
    public function post($pat) {
        if(!$this->checkMethod('post')) return false;
        return $this->route($pat);
    }

    // PUT 요청 분석
    public function put($pat) {
        if(!$this->checkMethod('put')) return false;
        return $this->route($pat);
    }

    // PATCH 요청 분석
    public function patch($pat) {
        if(!$this->checkMethod('patch')) return false;
        return $this->route($pat);
    }

    // DELETE 요청 분석
    public function delete($pat) {
        if(!$this->checkMethod('delete')) return false;
        return $this->route($pat);
    }
}

 

 

 

 

<< 사용방법 >>


//--------------------------
// 객체생성
//--------------------------
$app = new App();


//--------------------------
// 라우터
//--------------------------
/*
POST
*/
if ($app->post('/signin')) {

    // URL 파라미터 구해오기(정규식부분에서 괄호 부분 순서대로 가져옴)

    $params = $app->getParams();

 

    // POST, PUT 등에서 보내온 데이타

    $data = $app->getData();

 

    //echo $data['user_id'];
    //echo $data['password'];

 

    // 결과출력
    $app->print(array(
        'user_id' => 'melong'.
        'name' => '메롱'
    ));

/*
GET
*/
} else if ($app->get('/users/([a-zA-Z0-9_])')) {
    /* "/user_id/melong" 을 호출시 */
    //echo $params[0]; // melong

/*
PUT
*/
} else if ($app->put('/users/([a-zA-Z0-9])')) {
    //echo $data['user_id'];
    //echo $data['password'];
    //echo $params[0];

/*
PATCH
*/
} else if ($app->patch('/users/([a-zA-Z0-9])')) {
    //

/*
DELETE
*/
} else if($app->delete('/users/([a-zA-Z0-9])')) {
    //echo $params[0];

/*
여러개의 URL 파라미터
*/
} else if ($app->get('/article/([0-9])/([0-9])/edit')) {
    //echo $params[0];
    //echo $params[1];
}

추천
4

댓글 1개

전체 5,352
개발자팁 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT