플밍

php 로 간단한 백엔드 만들기 본문

프로그래밍/PHP

php 로 간단한 백엔드 만들기

너구리안주 2019. 6. 1. 21:15

프론트엔드 작업을 하고 있는데 백엔드가 완성되지 않아

가상 API(mock 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];
}

 

Comments