龙空技术网

如何使用PHP,Slim和MySQL创建REST API 第一部分

乐创物联 194

前言:

目前你们对“mampnginx404”大概比较重视,你们都想要学习一些“mampnginx404”的相关内容。那么小编也在网上搜集了一些有关“mampnginx404””的相关内容,希望看官们能喜欢,姐妹们一起来了解一下吧!

本教程提供了有关为初学者构建REST API的足够知识。我将其分为两部分。在第1部分中,我们将学习REST的基本概念并进行必要的设置。在第二部分构建实际的API(编写PHP和MySQL代码)。

1. REST API设计的基础知识

REST架构对于构建客户端/服务器网络应用程序非常有用。REST代表具象状态转移。与SOAP,CORBA,WSDL等其他方法相比,实现REST非常简单,它基本上适用于HTTP协议。

以下是构建REST API时应考虑的事项列表。

HTTP方法

设计良好的RESTful API应该支持最常用的HTTP方法(GET,POST,PUT和DELETE)。还有其他HTTP方法,如OPTIONS,HEAD,但最常使用这些方法。应根据您执行的操作类型使用每种方法。

GET To fetch a resource 获取资源

POST To create a new resource 创建新资源

PUT To update existing resource 更新现有资源

DELETE To delete a resource 删除资源

HTTP状态代码

响应正文中的HTTP状态代码告诉客户端应用程序应对响应采取什么操作。例如,如果响应代码200,则表示在服务器端成功处理了请求,您可以期待响应中的更新数据。如果状态代码为401,则该请求未被授权。401的示例原因可能是api密钥无效。

没有必要支持所有HTTP状态代码,但至少支持以下代码应该足够好。查看来自restapitutorial.com和Wikipedia的http代码列表。

200 OK

201 Created

304 Not Modified

400 Bad Request

401 Unauthorized

403 Forbidden

404 Not Found

422 Unprocessable Entity

500 Internal Server Error

URL结构

在REST设计中,URL端点应该格式良好,并且应该易于理解。应唯一标识资源的每个URL。如果您的API需要访问API密钥,则应将api密钥保存在HTTP标头中,而不是将其包含在URL中。

例如:

GET - 将提供id为11的任务的详细信息

POST -将创建一个新的任务

API版本

有一个巨大的讨论,对API的版本是否在URL或HTTP请求头保持API的版本。尽管建议应该在请求标头中包含版本,但我觉得将其保存在URL本身很舒服,因为在客户端从一个版本迁移到另一个版本非常方便。

例如:

V1 /任务

V2 /任务

内容类型

在HTTP头中的内容类型指定的种类的数据的应服务器和客户端之间传递。根据您支持的API所需的数据来设置内容类型。

例如,JSON Mime类型应为Content-Type:application / json,用于XML Content-Type:application / xml。

API密钥

如果您要构建一个私有API,您希望限制访问或限制私有访问,最好的方法是使用API密钥保护您的API。本文设计一个没有OAuth的安全REST(Web)API由Riyad Kalla提供保护您休息api的最佳方法。但是,由于本文针对初学者,我不会使用任何复杂的模型。所以现在我们可以为每个用户生成一个随机的api密钥。用户由api密钥标识,并且所有动作只能在属于他的资源上执行。

API密钥应保存在请求标头授权文件中,而不是通过URL传递。

Authorization授权: bf45c093e542f057caee68c47787e7d6

有关REST API设计的更多知识

以下链接将向您解释REST和其他原则的最佳实践。

1)RESTful Web服务:基础知识

2)Stackoverflow 讨论

2.先决条件

在深入学习本文之前,建议您具备PHP,MySQL,JSON解析。通过以下链接获取基本知识。

1)PHP基础

2)MySQL的预处理语句

3. Slim PHP Micro Framework

而不是从头开始开发新的REST框架,最好使用已经过验证的框架。然后我遇到了Slim框架并选择了它,原因如下。

1)它重量很轻,干净,初学者可以很容易地理解框架。

2)支持REST API所需的所有HTTP方法GET,POST,PUT和DELETE。

3)更重要的是,它提供了一个中间层架构,可用于过滤请求。在我们的例子中,我们可以使用它来验证API密钥。

下载Slim Framework

从这里

下载Slim框架(下载稳定版本)并将其放在一边。在完成所需的设置后,我们稍后会需要这一点。

4.安装WAMP服务器(Apache,PHP和MySQL)

WAMP允许您使用单个安装程序安装Apache,PHP和MySQL,从而减少单独安装和配置它们的负担。或者,您可以使用XAMP,LAMP(在Linux上)和MAMP(在MAC上)。WAMP还为您提供了phpmyadmin,可以轻松地与MySQL数据库进行交互。

从下载并安装WAMP 。选择适合您操作系统的正确版本(32位或64位)。安装后,从“ 开始” - >“所有程序” - >“Wamp Server” - >“启动WampServer”打开该程序。

5.安装Chrome Advanced REST客户端扩展以进行测试

Chrome Advanced REST客户端扩展提供了一种测试REST API的简便方法。它提供了很多选项,例如添加请求标头,添加请求参数,在访问URL时更改HTTP方法。在Chrome浏览器中安装高级REST客户端扩展。安装后,您可以在Chrome应用程序或右上角的图标中找到它。

或者,如果您更喜欢使用firefox,可以使用Poster插件来测试API。

我使用的是Postman插件。

6.任务管理器应用程序的REST API

为了演示REST API,我正在考虑具有非常小功能的任务管理器应用程序的示例。

1)用户相关的操作,如注册和登录

2)与任务相关的操作,如创建,读取,更新和删除任务。所有与任务相关的API调用都应包含Authorization标头字段中的API密钥。

以下是我们将在本教程中构建的API调用列表。您可以注意到,相同的url端点用于多个api调用,但区别在于我们用于访问URL的HTTP方法的类型。假设我们使用POST方法命中/ tasks,将创建一个更新的任务。如果我们使用GET方法命中/任务,则将列出所有任务。

API网址结构

URL Method Parameters Description

/register POST name, email, password User registration 用户注册

/login POST email, password User login 用户登录

/tasks POST task To create new task 创建新任务

/tasks GET Fetching all tasks 获取所有任务

/tasks/:id GET Fetching single task 获取单个任务

/tasks/:id PUT Updating single task 更新单个任务

/tasks/:id DELETE task, status Deleting single task 删除单个任务

7.创建MySQL数据库

对于这个应用程序,我们不需要复杂的数据库设计。在这个阶段我们只需要三张表。如果要扩展功能,可以随时添加更多表。我创建了三个表 users, tasks和user_tasks。

用户users - 所有与用户相关的数据都将存储在此处。当新用户在我们的应用程序中注册时,将插入一行。

任务 tasks- 所有用户任务数据将存储在此表。

user_tasks中 - 用于存储用户与其任务之间关系的表。基本上我们将用户ID和任务ID存储在此表中。

从http:// localhost / phpmyadmin打开phpmyadmin并执行以下SQL查询。如果您熟悉phpmyadmin,也可以使用phpmyadmin图形界面来创建表格。

我用的是Navicat。

CREATE DATABASE task_manager;

USE task_manager;

CREATE TABLE IF NOT EXISTS `users` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(250) DEFAULT NULL,

`email` varchar(255) NOT NULL,

`password_hash` text NOT NULL,

`api_key` varchar(32) NOT NULL,

`status` int(1) NOT NULL DEFAULT '1',

`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`),

UNIQUE KEY `email` (`email`)

);

CREATE TABLE IF NOT EXISTS `tasks` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`task` text NOT NULL,

`status` int(1) NOT NULL DEFAULT '0',

`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)

);

CREATE TABLE IF NOT EXISTS `user_tasks` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`user_id` int(11) NOT NULL,

`task_id` int(11) NOT NULL,

PRIMARY KEY (`id`),

KEY `user_id` (`user_id`),

KEY `task_id` (`task_id`)

);

ALTER TABLE `user_tasks` ADD FOREIGN KEY ( `user_id` ) REFERENCES `task_manager`.`users` (

`id`

) ON DELETE CASCADE ON UPDATE CASCADE ;

ALTER TABLE `user_tasks` ADD FOREIGN KEY ( `task_id` ) REFERENCES `task_manager`.`tasks` (

`id`

) ON DELETE CASCADE ON UPDATE CASCADE ;

结果:

到目前为止,我们已经完成了让您的系统为开发做好准备。下一篇文章如何使用PHP,Slim和MySQL创建REST API - 第2部分介绍了启动和完成PHP和MySQL项目的整个过程。

标签: #mampnginx404