前言:
目前你们对“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