Slim framework rest api从v2更新到v3

时间:2016-09-05 13:15:43

标签: rest api slim php-5.5

您是我对苗条框架及其基础知识的新手,我发现了许多基于v2的rest apis示例(http://www.androidhive.info/2014/01/how-to-create-rest-api-for-android-app-using-php-slim-and-mysql-day-12-2/)I非常喜欢v2的代码分区和方法,但我可以不更新到v3 任何人都可以帮助我

    \Slim\Slim::registerAutoloader();
    $app = new \Slim\Slim();

    // ID utilisateur - variable globale
    $user_id = NULL;

    /**
     * Ajout de Couche intermédiaire pour authentifier chaque demande
     * Vérifier si la demande a clé API valide dans l'en-tête "Authorization"
     */
    function authenticate(\Slim\Route $route) {
        // Obtenir les en-têtes de requêtes
        $headers = apache_request_headers();
        $response = array();
        $app = \Slim\Slim::getInstance();

        // Vérification de l'en-tête d'autorisation
        if (isset($headers['Authorization'])) {
            $db = new DbHandler();

            // Obtenir la clé d'api
            $api_key = $headers['Authorization'];
            // Valider la clé API
            if (!$db->isValidApiKey($api_key)) {
                //  Clé API n'est pas présente dans la table des utilisateurs
                $response["error"] = true;
                $response["message"] = "Accès Refusé. Clé API invalide";
                echoRespnse(401, $response);
                $app->stop();
            } else {
                global $user_id;
                // Obtenir l'ID utilisateur (clé primaire)
                $user_id = $db->getUserId($api_key);
            }
        } else {
            // Clé API est absente dans la en-tête
            $response["error"] = true;
            $response["message"] = "Clé API est manquante";
            echoRespnse(400, $response);
            $app->stop();
        }
    }

    /**
     * ----------- MÉTHODES sans authentification---------------------------------
     */
    /**
     * Enregistrement de l'utilisateur
     * url - /register
     * methode - POST
     * params - name, email, password
     */
    $app->post('/register', function() use ($app) {
                // vérifier les paramètres requises
                verifyRequiredParams(array('name', 'email', 'password'));

                $response = array();

                // lecture des params de post
                $name = $app->request->post('name');
                $email = $app->request->post('email');
                $password = $app->request->post('password');

                // valider adresse email
                validateEmail($email);

                $db = new DbHandler();
                $res = $db->createUser($name, $email, $password);

                if ($res == USER_CREATED_SUCCESSFULLY) {
                    $response["error"] = false;
                    $response["message"] = "Vous êtes inscrit avec succès";
                } else if ($res == USER_CREATE_FAILED) {
                    $response["error"] = true;
                    $response["message"] = "Oops! Une erreur est survenue lors de l'inscription";
                } else if ($res == USER_ALREADY_EXISTED) {
                    $response["error"] = true;
                    $response["message"] = "Désolé, cet E-mail éxiste déja";
                }
                // echo de la repense  JSON
                echoRespnse(201, $response);
            });

function verifyRequiredParams($required_fields) {
    $error = false;
    $error_fields = "";
    $request_params = array();
    $request_params = $_REQUEST;
    // Manipulation paramsde la demande PUT
    if ($_SERVER['REQUEST_METHOD'] == 'PUT') {
        $app = \Slim\Slim::getInstance();
        parse_str($app->request()->getBody(), $request_params);
    }
    foreach ($required_fields as $field) {
        if (!isset($request_params[$field]) || strlen(trim($request_params[$field])) <= 0) {
            $error = true;
            $error_fields .= $field . ', ';
        }
    }

    if ($error) {
        //Champ (s) requis sont manquants ou vides
        // echo erreur JSON et d'arrêter l'application
        $response = array();
        $app = \Slim\Slim::getInstance();
        $response["error"] = true;
        $response["message"] = 'Champ(s) requis ' . substr($error_fields, 0, -2) . ' est (sont) manquant(s) ou vide(s)';
        echoRespnse(400, $response);
        $app->stop();
    }
}

/**
 * Validation adresse e-mail
 */
function validateEmail($email) {
    $app = \Slim\Slim::getInstance();
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $response["error"] = true;
        $response["message"] = "Adresse e-mail n'est pas valide";
        echoRespnse(400, $response);
        $app->stop();
    }
}

/**
 * Faisant écho à la réponse JSON au client
 * @param String $status_code  Code de réponse HTTP
 * @param Int $response response Json
 */
function echoRespnse($status_code, $response) {
    $app = \Slim\Slim::getInstance();
    // Code de réponse HTTP
    $app->status($status_code);

    // la mise en réponse type de contenu en JSON
    $app->contentType('application/json');

    echo utf8_encode(json_encode($response));
    }
$app->run();

1 个答案:

答案 0 :(得分:0)

深度搜索后,我将代码改为像这样

require '../libs/vendor/autoload.php';

$app = new Slim\App(  [
        'settings' => [
            'addContentLengthHeader' => false

        ]
    ]);

$verifyRequiredParams = function ($request, $response, $next) {

    $route = $request->getAttribute('route');
    $validators = $route->getArgument('validators');
    $error = false;
    $error_fields = "";
    $request_params = array();
    $request_params = $_REQUEST;
    // Manipulation paramsde la demande PUT
    if ($_SERVER['REQUEST_METHOD'] == 'PUT') {

        parse_str($request->getBody(), $request_params);
    }
    foreach ($validators as $field) {
        if (!isset($request_params[$field]) || strlen(trim($request_params[$field])) <= 0) {
            $error = true;
            $error_fields .= $field . ', ';
        }
    }

    if ($error) {
        //Champ (s) requis sont manquants ou vides
        // echo erreur JSON et d'arrêter l'application

        $resp=array();
        $resp['error']=true;
        $resp["message"] = 'Champ(s) requis ' . substr($error_fields, 0, -2) . ' est (sont) manquant(s) ou vide(s)';
        $response= $response->withJson($resp, 400);

    }else{    $response = $next($request, $response);}

    return $response;
};
$authenticate=function($request, $response, $next) {
    // Obtenir les en-têtes de requêtes
    $headers = apache_request_headers();
    $resp = array();


    // Vérification de l'en-tête d'autorisation
    if (isset($headers['Authorization'])) {
        $db = new DbHandler();

        // Obtenir la clé d'api
        $api_key = $headers['Authorization'];
        // Valider la clé API
        if (!$db->isValidApiKey($api_key)) {
            //  Clé API n'est pas présente dans la table des utilisateurs
            $resp["error"] = true;
            $resp["message"] = "Accès Refusé. Clé API invalide";
            $response=$response->withJson($resp, 401);
        } else {
            global $user_id;
            // Obtenir l'ID utilisateur (clé primaire)
            $user_id = $db->getUserId($api_key);
            $response=$response = $next($request, $response);
        }
    } else {
        // Clé API est absente dans la en-tête
        $resp["error"] = true;
        $resp["message"] = "Clé API est manquante";
        $response=$response->withJson($resp, 400);
    }
    return$response;
};
$app->post('/task', function ($request, $response, $args) {

    $resp = array();
    $task = $request->getParsedBody()['task'];

    global $user_id;
    $db = new DbHandler();

    //Création d'une nouvelle tâche
    $task_id = $db->createTask($user_id, $task);

    if ($task_id != NULL) {
        $resp["error"] = false;
        $resp["message"] = "Tâche créé avec succès";
        $resp["task_id"] = $task_id;
        $response=$response->withJson($resp, 201);
    } else {
        $resp["error"] = true;
        $resp["message"] = "Impossible de créer la tâche. S'il vous plaît essayer à nouveau";
        $response=$response->withJson($resp, 200);
    }



    return $response;
})->setArguments(['validators' => ['task']])->add($verifyRequiredParams)->add($authenticate);

$app->run();