PhalApi框架

π框架简介

在我们做小程序应用或者是一些前后端完全分离的项目里面(或者做一个单页应用、SPA :signal page application),一般我们后端PHP程序员都需要编写好相关的接口,同时还要写好相应的接口文档,以供前端的开发人员或者其他的项目团队进行使用。

前端程序员在做前后端分离的项目的时候,如果后端没有提供好相关 的即可,则前端可以使用一个 mock.js 脚本生成很多的测试数据。http://mockjs.com

一般的开发流程:

  1. 写接口,一个url地址就是一个接口(框架实现),一把来说我们接口都是返回json格式数据。

    现在很多企业的一些项目不再使用api接口(基于REST规范,落地产品为 RESTful,应用到实际项目为 RESTFul api),而是使用RPC,如谷歌的gRPC,远程过程调用的方式去获取相关数据 http://doc.oschina.net/grpc?t=60136

    • 单一从后端获取数据,一般这类接口都不需要做啥认证,请求方式一般都是get。
    • 需要将客户端的数据提交到后端进行入库保存,或者有部分的数据是需要做一定的认证操作后才可以查看,这一类的接口一般都要事先做好接口的认证工作,证明有权限去访问该接口,请求的方式一般都是POST。

  2. 接口一般都需要做一些认证,对于一些特殊的接口,例如对后端数据库会造成更改,都必须要做出一定的验证,事先写好一个认证接口,同时在服务器端需要保存一定的认证信息,然后将认证的信息返回给客户端,客户端在每次请求其他类型的接口的时候,必须先携带该凭证。

  1. 写接口的调用文档,一把来说我们写好了接口,都需要出示一份文档(接口说明书),给予前端人员使用。

    • url地址

    • 请求方式

    • 参数传递
    • 是否需要认证
    • 返回数据类型
    • 成功请求后的效果,示例代码,解释好每个字段的含义
    • 如果失败或者出错的时候,返回的信息,示例代码,一般都要有错误状态码,消息提示

一般我们可以使用一些网站提供的在线工具进行接口的编写;(https://www.showdoc.cc)

或者自己使用markdown的编辑器自己使用markdown语法进行编写。熟悉一下markdown语法。

本次打算使用π框架来编写小程序的接口,接口的验证。

官网https://www.phalapi.net/

img

版本介绍

img

在线体验

img

亮点

img

第三方集成

img

SDK

img

查看

img

下载

https://www.phalapi.net/download.html

π框架安装

文档 : 下载与安装

  1. 使用composer进行下载
1
> composer create-project phalapi/phalapi local.papi.com
  1. 安装后的目录结构,public 为站点根目录

img

  1. 配置一个虚拟主机

img

  1. 配置hosts文件

img

  1. 浏览器访问效果

img

文件目录结构

文档: 项目目录结构的差异

public目录

img

config目录

img

APP目录

img

源码

img

访问接口

文档: 运行Hello World >> 访问一个接口

img

  1. 在地址栏进行url访问

img

​ 访问规则:域名?s=App.控制器名称.方法名称&key=value&key2=value2....

  1. 对应的控制器和方法

    1538487671539

  1. 效果

img

访问参数验证

文档位置 : Api接口服务层 >> 接口参数规则配置

注意:在每个控制器里面都会存在一个getRules方法,该方法里面的用于对应的接口传递的参数行为约束。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
* 这个方法是做参数验证的
* @return [type] [description]
*/
/* 使用示例
public function getRules() {
return array(
'接口类方法名' => array(
'接口类属性' => array('name' => '接口参数名称', ... ... ),
),
);
}
*/
public function getRules() {

return array(
// 一维下标是接口类的方法名,对应接口服务的Action;
# '方法名' => array
'index' => array(
// 二维下标是类属性名称,对应在服务端获取通过验证和转换化的最终客户端参数;
// array()中是对该属性的一个修饰 ,属性的值从get传参过来
// 'name' : 指定接口参数名称,对应外部客户端请求时需要提供的参数名称。$_GET['username']
// 'desc': 描述,生成接口文档的时候使用
//
// $this->username = isset( $_GET['username'] ) ? $_GET['username'] : 'PhalApi'

# '属性名称' => array()
'username' => array('name' => 'username', 'default' => 'PhalApi', 'desc' => '用户名'),
),
);
}

1538487002273

TODO

文档生成

注释参考

注释与在线文档

在线文档

文档: 在线接口文档

π框架给我们提供了强大的文档生成方式,我们只需要在方法前面按照指定的格式编写注释,即可生成文档。

  1. 在方法前面编写注释

    1538490748083

  1. 通过 域名/docs.php 方式访问在线文档

img

  1. 点击展开

img

  1. 详情查看

img

离线文档

文档: 生成离线文档

π框架提供了离线文档,供开发者使用。

使用方式:

1
2
3
4
5
6
7
phalapi$  php ./public/docs.php 

Usage:
生成展开版: php ./public/docs.php expand
生成折叠版: php ./public/docs.php fold

脚本执行完毕!离线文档保存路径为:/path/to/phalapi/public/docs

注意: 根据实际补全路径信息,如 ./public/docs.php

  1. 执行如下的命令

img

  1. 目录查看

img

  1. 访问 域名/docs/

img

π框架的模型

文档: Model数据模型层与数据库操作

==注意==:π框架是没有视图、学习完成控制器之后,我们就可以学习模型,并且π框架里面的模型也不是自己写的,是使用别人开发的一个ORM框架(NotORM)。

数据库配置

1538491512850

模型的定义

文档参考:

NotORM是一个优秀的开源PHP类库,可用于操作数据库。PhalApi的数据库操作,主要是依赖此NotORM来完成。

NotORM官网:www.notorm.com

在src\app\Model目录下创建一个Movie.php文件

1538031807649

在src\app\Api\Site.php控制器文件实例化模型,获取数据

1538033770581

案例: 小程序轮播图

需求

需求:

需要为小程序提供一个轮播图的接口

img

分析

在传统网站开发里面,很多网站的首页里面也是会存在一个轮播图信息,那么如果我们要在传统网页里面实现一个轮播图,则我们可以使用一些插件快速的完成。

https://www.swiper.com.cn/

快速入门的案例:

https://www.swiper.com.cn/usage/index.html

我们的需求是在小程序里面实现一个轮播图功能,小程序内部存在一个组件可以实现轮播图效果,只需要给轮播提供素材即可。

效果:

1538033370889

分析:

  1. 请求方式:GET

  2. 是否认证:不需要(接口的认证)

  3. 返回数据类型 json

  4. 参数:

    • number代表需要几张轮播图
    • 设置一个默认值
    • position 轮播位(轮播图分类)
      • 首页有轮播图,详情页也有轮播图,所以需要对齐进行分类,才方便读取。
      • 上传轮播图的时候,需要给这些轮播图一个分类
  5. 轮播图点击之后跳转对应的业务

    • 后台我们上传轮播图的时候,需要为轮播图做一些相关业务的关联,一般的关联都是某件商品的展示。

建表

设计表

轮播图表

id url gid is_on create_time update_time xxxx
图片地址 关联商品id 表示轮播图是否上线 1代表上线,0代表没有上线

1538033551042

商品表

id name price number …. ..

1538034695579

接口编写示例

  1. 定义控制器,创建一个getRules方法

img

  1. 创建一个lst方法

img

  1. 创建一个transfer方法,用于数据的格式化

img

  1. 效果

img

轮播图接口

  1. 在src/Api/Banner.php控制器文件,创建一个getRules方法

1538037911505

  1. 在src/Model/Banner.php模型文件,获取轮播图信息

1538038013908

  1. 在src/Api/Banner.php控制器文件,创建一个lst方法

1538037932482

  1. 在src/Api/Banner.php控制器文件,创建一个transfer方法,用于数据的格式化

1538037945803

  1. 效果

1538038037612

商品详情接口

在src\app\Api\Goods.php文件编写商品详情接口

1538038776351

详情查看

当我们点击轮播图之后,则需要打开一个页面显示商品的详情信息

  1. 在pages/swiper/swiper.wxml文件为每个轮播项绑定点击事件

    1538038628665

  2. 在pages/swiper/swiper.js文件定义回调函数打开一个详情页

    1538038647842

  3. 在pages/detail/detail.js文件获取商品主键id,向商品详情接口发送网络请求获取数据

    1538038674478

  4. 在pages/detail/detail.wxml页面完成商品展示

    1538038716978

  5. 效果

    1538038688372

集成微信小程序

  1. 在config/config.js文件定义好url地址常量

    1538038334591

  2. 在pages/swiper/swiper.js文件,调用接口获取轮播图信息

    1538038397690

  3. 在pages/swiper/swiper.wxml文件完成布局

    1538038458458

  4. 效果

    1538038482324

其它

语言包

  1. 查看系统使用的默认语言包

img

  1. 配置自己的语言项

img

  1. 查看语言包函数

img

自定义异常类

  1. 自定义异常类

img

  1. 在轮播图信息为空的时候抛出异常

img

  1. 效果

img

小程序如何和PHP交互的?

1538039794609