Lei Zhang

时光已逝永不回,
往事只能回味。
... ...
春风又吹红了花蕊,
你已经也添了新岁。

▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 96%



基于 CodeIgniter 构建 JWT RESTfull API Server #1

2018-03-14 » PHP / CodeIgniter , JWT , Restfull , Tutorial

CodeIgniter

以 3.1.7 版本为例,下载地址:http://codeigniter.org.cn/ 。

下载后,解压至当前文件夹,你会得到一个 CodeIgniter-3.1.7 的文件夹,将它重命名为你喜欢的项目名,我的是 JWT-RESTfull-IN-CI-Tutorial ,如图所示:

启动项目

接下来,用 IDE 或者其他什么,例如 PhpStorm、NetBeans、Sublime 等打开这个 CI 项目,当然我这里用的 vscode,不过都差不多了。

打开 vscode 的终端,或者 cmd 都可以,只要可以跑命令行,启动 PHP 的内置服务器就行,确保你已经把 php 添加进了你的环境变量,在项目的根目录,就是 index.php 所在的目录下键入:php -S localhost:8000

 

OK,在浏览器中访问一下 http://localhost:8000 ,你就会看到 CodeIgniter Welcome Page :

如果你不想使用 PHP 内置 Web Server,你扔然可以使用 apache 或者其他的 Web Server 进行启动项目。

FIRBASE/PHP-JWT

首先,需要找到一个 PHP 的 JWT 轮子(package),这样我们只需要将这个轮子融入到 CI 项目中就可以直接使用了。

1. 访问 https://jwt.io ;

2. 点击 Libraries 导航,下面列出的就是各个语言所写的相关轮子;

3. CTRL + F,在当前页面中直接搜索“php”,找到 star 数最高的 firbase/php-jwt

4. 前往 https://github.com/firebase/php-jwt ,阅读下 README,对它有个大致了解。

PHP-JWT 除了可以直接通过 composer 安装,也可以将它的源码直接下载下来。

https://github.com/firebase/php-jwt/tree/master/src 这里有4个 php 文件,将它们下载或复制,放到 application/libraries/ 中:

由于我们不是通过 composer 安装的,所以在 JWT.php 中,我们需要手动去 require 一下另外3个文件:

除此之外,jwt 也需要给与一个密钥用于生成 token 值,既然这是一个配置,那么我们就在 CI 的配置文件目录 application/config/ 中创建配置文件:jwt.php 。

CODEIGNITER-RESTSERVER

https://github.com/chriskacerguis/codeigniter-restserver 这是专为 CI 所造的 restserver package,加入它之后,可以很方便的接收或者处理 GET、POST、PUT、DELETE 这类请求。

这个源码其实就是一个加入 RestServer 后的 CI 项目,它的实际源码总共有4个:

1. REST_Controller,RestServer 的主控制器,你需要将自己编写的业务控制器继承它,就和继承 CI_Controller 一样;

2. Format,用于格式化响应数据,可以格式化为 json、array、csv、html、php、xml,默认为 json;

3. rest,它是 RestServer 的配置文件,类似 CI 中的大部分配置文件;

4. rest_controller_lang,它是 RestServer 的国际化配置项,里面包含了10来种语言,这里我们暂时只选择 english。

和 PHP-JWT 一样,将它们分别放入对应的目录中:

它没有一个非常详细的文档,但是有一个简单的使用教程:https://code.tutsplus.com/tutorials/working-with-restful-services-in-codeigniter--net-8814

不过源码中的注释非常非常的详细,总的来讲还是很容易就能理解的。

基础表结构

为了真实的模拟 HTTP 请求,以及实际的业务场景,现在我们来建一个非常简单的 todos 表:

建表后,别忘了在 application/config/database.php 中填入你当前的数据库相关配置。


我们已经在 CI 中加入了 php-jwt、codeigniter-restserver,并建好了数据库表、配置了数据库链接。

Cool,所有准备工作已经就绪了,接下来,在 下一篇 教程我将模拟具体的业务场景:

1. 用户登录,服务端校验账户和密码,成功则返回当前这个用户的 json web token;

2. 用户可以对 todo 表进行 CRUD,在 CRUD 操作时,校验 json web token 是否合法;

展开选填信息