前一部分如何使用PHP,Slim和MySQL创建REST API,我们已经学习了有关REST API的基本概念,并通过安装所需的工具来准备好您的开发环境。我希望每个人都对REST和其他技术领域有很好的了解。另外我假设你已经安装了所有必需的工具。

今天我们将学习如何设置PHP项目并编写REST API的实际代码。我们还将学习编写必要的SQL查询来执行数据库CRUD操作。

8.启动PHP项目

众所周知,IDE使开发过程更容易。因此,我建议您使用IDE来开发PHP项目,而不是使用普通的记事本。你可以去Eclipse,Aptana Studio,PhpStorm或Netbeans。PHP项目目录结构

下图将让您了解我们现在要开发的项目的目录结构。




mysql登录会话超时 mysql 会话_mysql登录会话超时


libs - 所有第三方库都在这里。在我们的例子中,我们将Slim库放在这里

include - 我们构建的所有助手类都放在这里

index.php - 负责所有API请求

.htaccess - url结构规则和其他apache规则

现在让我们开始PHP项目

1)转到安装WAMP的目录。通常,wamp将安装在C: wamp中。(如果您安装了任何其他软件而不是WAMP,则应该转到该软件推荐的目录)。

2)作为第一步,我们开始创建所需的目录。在wamp文件夹中,转到www文件夹(c: wamp www )并创建一个名为task_manager的文件夹。该文件夹将是我们项目的父目录。在task_manager内部再创建两个名为libs,include和v1的文件夹。

3)现在,粘贴Slim库里面的库文件夹。Slim的下载链接在前一部分中提供。

4)通常,当index.php包含在url中时,Slim框架会起作用,这会使url格式不正确。因此,使用.htacess规则,我们可以从url中删除index.php并制作一些友好的URL。在v1文件夹中创建一个名为.htaccess的文件并粘贴以下代码。(请注意,此文件名不应包含名称中的任何其他扩展名,例如.txt)

9准备助手类

首先,我们开始编写此项目中所需的一组辅助类。这些辅助类提供了与数据库交互所需的必要功能。

1)内部包含文件夹创建名为Config.php的文件,其中包含以下内容。此文件包含整个项目配置,如数据库连接参数和其他变量。

config.php文件
/**
 * Database configuration
 */
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');
define('DB_NAME', 'task_manager');
define('USER_CREATED_SUCCESSFULLY', 0);
define('USER_CREATE_FAILED', 1);
define('USER_ALREADY_EXISTED', 2);
?>
2)创建另一个名为DbConnect.php的类此类文件主要负责数据库连接。
DbConnect.php
/**
 * Handling database connection
 *
 * @author Ravi Tamada
 */
class DbConnect {
 private $conn;
 function __construct() { 
 }
 /**
 * Establishing database connection
 * @return database connection handler
 */
 function connect() {
 include_once dirname(__FILE__) . './Config.php';
 // Connecting to mysql database
 $this->conn = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
 // Check for database connection error
 if (mysqli_connect_errno()) {
 echo "Failed to connect to MySQL: " . mysqli_connect_error();
 }
 // returing connection resource
 return $this->conn;
 }
}
?>

3)加密密码

保护用户密码的最佳方法是不将它们存储为纯文本,而是在存储到db之前对所有密码进行加密。以下类负责加密用户密码。创建另一个名为PassHash.php的文件并粘贴以下代码。

PassHash.php
class PassHash {
 // blowfish
 private static $algo = '$2a';
 // cost parameter
 private static $cost = '$10';
 // mainly for internal use
 public static function unique_salt() {
 return substr(sha1(mt_rand()), 0, 22);
 }
 // this will be used to generate a hash
 public static function hash($password) {
 return crypt($password, self::$algo .
 self::$cost .
 '$' . self::unique_salt());
 }
 // this will be used to compare a password against a hash
 public static function check_password($hash, $password) {
 $full_salt = substr($hash, 0, 29);
 $new_hash = crypt($password, $full_salt);
 return ($hash == $new_hash);
 }
}
?>

4)现在创建另一个名为DbHandler.php的类。该类是我们项目中的重要文件之一,它提供了对数据库执行CRUD操作所必需的功能。每个函数都由它的名称和注释自我解释,我不必解释它们。

DbHandler.php
/**
 * Class to handle all db operations
 * This class will have CRUD methods for database tables
 *
 * @author Ravi Tamada
 */
class DbHandler {
 private $conn;
 function __construct() {
 require_once dirname(__FILE__) . './DbConnect.php';
 // opening db connection
 $db = new DbConnect();
 $this->conn = $db->connect();
 }
 /* ------------- `users` table method ------------------ */
 /**
 * Creating new user
 * @param String $name User full name
 * @param String $email User login email id
 * @param String $password User login password
 */
 public function createUser($name, $email, $password) {
 require_once 'PassHash.php';
 $response = array();
 // First check if user already existed in db
 if (!$this->isUserExists($email)) {
 // Generating password hash
 $password_hash = PassHash::hash($password);
 // Generating API key
 $api_key = $this->generateApiKey();
 // insert query
 $stmt = $this->conn->prepare("INSERT INTO users(name, email, password_hash, api_key, status) values(?, ?, ?, ?, 1)");
 $stmt->bind_param("ssss