PhalApi(π框架) - PHP轻量级开源接口框架


PhalApi(π框架) - V1.4.0

PhalApi,简称π框架,是一个PHP轻量级开源接口框架,专注于接口开发,致力让接口开发更简单。它:

1、致力于快速、稳定、持续交付有价值的接口服务、关注于测试驱动开发、领域驱动设计、极限编程、敏捷开发

2、有众多的扩展类库,与更多开源项目一起提供高效便捷的解决方案

3、支持HTTP、SOAP和RPC协议,可用于快速搭建微服务、RESTful接口或Web Services

PhalApi代码开源、产品开源、思想开源,请放心使用。更多请访问PhalApi官网。再次感谢开源中国、各位贡献者和同学。

导读

本文内容主要分为三部分,即:

PART 1:安装、在线体验与在线接口文档

PART 2:快速开发、单元测试、目录结构、SDK包和Library扩展类库

PART 3:背景回顾、贡献者、许可与更新日记

更多请访问在线文档

1-1、安装

请从release分支拉取发布版本的代码

推荐部署于Linux服务器

建议PHP >= 5.3.3

将代码下载解压到服务器后,打开浏览器,访问安装向导(推荐使用nginx,并将根目录设置为Public):

http://localhost/PhalApi/Public/install/

访问默认接口服务,验证是否安装成功:

http://localhost/PhalApi/Public/demo/

更多其他创建项目的方式,请访问创建一个自己的项目

框架升级与框架共享

我们会尽最大的努力保证完美兼容性的升级。当框架有新版本需要升级时,只需要简单一步:更新替换./PhalApi/PhalApi核心框架目录即可。

如果需要多个项目共享使用PhalApi框架,可以把./PhalApi/PhalApi移到任何位置,然后对应修改./PhalApi/Public/init.php文件中引入路径即可(但会导致部分脚本命令不可用)。如:

require_once API_ROOT . '/path/to/PhalApi/PhalApi.php';

1-2、在线体验

默认的接口服务:

http://demo.phalapi.net/

带参数的示例接口:

http://demo.phalapi.net/?service=Default.Index&username=oschina

{

"ret": 200,

"data": {

"title": "Hello World!",

"content": "oschina您好,欢迎使用PhalApi!",

"version": "1.3.4",

"time": 1473863280

},

"msg": ""

}

故意请求一个非法的服务:

http://demo.phalapi.net/?service=Demo.None

{

"ret": 400,

"data": [],

"msg": "非法请求:服务Demo.None不存在"

}

1-3、在线接口文档(自动生成)

按框架指定的格式完成接口代码编写后,PhalApi会自动生成在线接口列表文档和在线接口详情文档,以方便客户端实时查看最新的接口签名和返回字段。

(1) 在线接口列表文档

访问对应项目路径下的listAllApis.php可查看此项目下全部的接口服务,如访问:

http://demo.phalapi.net/listAllApis.php

(2) 在线接口详情文档

访问对应项目路径下的checkApiParams.php,并传递?service=xxx.xxx参数即可查看具体的接口文档,如访问:

http://demo.phalapi.net/checkApiParams.php?service=Default.Index

2-1、快速开发

(1) 编写一个Hello World!接口

以下代码需要放置到接口类文件./Demo/Api/Welcome.php中:


class Api_Welcome extends PhalApi_Api {

public function say() {

$rs = array();

$rs['title'] = 'Hello World!';

return $rs;

}

}

(2) 访问接口

接口访问的格式为:接口域名 + 入口路径 + ?service=XXX.XXX,此示例中对应的链接为:

http://localhost/Public/demo/?service=Welcome.Say

(3) 接口返回

结果默认以JSON格式返回,即:

{"ret":200,"data":{"title":"Hello World!"},"msg":""}

(4) 运行截图

2-2、接口单元测试

不能被测试的代码,不是好代码。

在使用此框架进行接口开发时,我们强烈建议使用测试驱动开发(TDD),以便于不断积累形成接口测试体系,保证接口向前向后兼容。例如对接口/?service=User.GetBaseInfo&userId=1进行单元测试时,按:构造-操作-检验(BUILD-OPERATE-CHECK)模式,即:

/**

* @group testGetBaseInfo

*/

public function testGetBaseInfo()

{

//Step 1. 构建请求URL

$str = 'service=User.GetBaseInfo&userId=1';

//Step 2. 执行请求(模拟接口请求)

$rs = PhalApi_Helper_TestRunner::go($url);

//Step 3. 验证

$this->assertNotEmpty($rs);

$this->assertArrayHasKey('code', $rs);

$this->assertArrayHasKey('msg', $rs);

$this->assertArrayHasKey('info', $rs);

$this->assertEquals(0, $rs['code']);

$this->assertEquals('dogstar', $rs['info']['name']);

$this->assertEquals('oschina', $rs['info']['from']);

}

运行效果:

对于框架的核心代码,我们也一直坚持着单元测试,其核心框架代码的单元测试覆盖率可高达96%以上。

2-3、主要目录结构

.

├── PhalApi        //PhalApi框架,后期可以整包升级

├── Library        //PhalApi扩展类库,可根据需要自由添加扩展

├── SDK            //PhalApi提供的SDK包,客户可根据需要选用

├── Public          //对外访问目录,建议隐藏PHP实现

│  └── demo        //Demo服务访问入口

├── Config          //项目接口公共配置,主要有:app.php, sys.php, dbs.php

├── Data            //项目接口公共数据

├── Language        //项目接口公共翻译

├── Runtime        //项目接口运行文件目录,用于存放日记,可软链到别的区

└── Demo            //应用接口服务,名称自取,可多组

├── Api            //接口响应层

├── Domain          //接口领域层

├── Model          //接口持久层

└── Tests          //接口单元测试

以下为一示例目录结构图解:

2-4、基于接口查询语言(ASL)的SDK包支持

目前已提供的SDK有:

JAVA版

Objective-c版

PHP版

C#版

JS版

Golang版

React-Native版

Ruby版

Python版

基于接口查询语言,可用一句话来描述接口请求,如JAVA的请求示例:

PhalApiClientResponse response = PhalApiClient.create()

.withHost("http://demo.phalapi.net/")

.withService("Default.Index")          //接口服务

.withParams("username", "dogstar")    //接口参数

.withTimeout(3000)                    //接口超时

.request();

2-5、PhalApi-Library扩展类库

PhalApi框架扩展类库,致力于与开源项目一起提供高效便捷的解决方案,更多请查看:PhalApi-Library

3-1、背景回顾

过去十年,是互联网时代;如今的十年,是移动时代。

在iOS、Android、Windows Phone、PC版、Web版等各种终端和各种垂直应用不停更新迭代的大背景下,显然很是需要一组乃至一系列稳定的后台接口支撑。接口,显然是如此重要,正如Jaroslav Tulach在《软件框架设计的艺术》一书中说的:API就如同恒星,一旦出现,便与我们永恒共存。

所以,这里希望通过提供一个快速可用的后台接口开发框架,可以:

一来,支撑轻量级项目后台接口的快速开发;

二来,阐明如何进行接口开发、设计和维护,以很好支持海量访问、大数据、向前向后兼容等;

三来,顺便分享一些好的思想、技巧和有用的工具、最佳实践。

如果您有接口项目开发的需要,又刚好需要一个PHP接口框架,欢迎使用!我们也致力于将PhalApi维护成像恒星一样:不断更新,保持生气;为接口负责,为开源负责!

3-2、加入我们

显然,这只是一个开始,我们要走的路还很长。PhalApi是我们(开发团队)的框架,更是我们(所有人)的框架。在一个人还年轻的时候,我觉得,就应该着手致力做一些对社会有意义的事情,一如开源。欢迎&期待你的加入!

在加入前,可先查看致框架贡献者:加入PhalApi开源指南。至此,感谢以下贡献者(排名不分先后):

Aevit

dogstar

George

Scott

Summer

zz.guo(郭了个治浩)

小艾

大蝉

冰霜

火柴

黄苗笋

文振熙(喵了个咪)

爱编程的小逗比

... ...

3-3、许可

PhalApi是开源框架,承诺永远免费,使用GPL协议,更多请访问许可

3-4、更新日记

更新日记,主要是为了说明,我们一直在努力更新和维护。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,110评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,654评论 18 139
  • 那天,我和孙记者约在小镇的茶楼见面。微风轻抚我的脸庞,带来小镇独特的古香;南巷的木制风车随风轻轻旋转,给稻田...
    墨楠钟阅读 220评论 0 1
  • 进步是一点点来的 今天干了一件大事,从萧山市心广场骑回了学校,悠悠的骑,脸颊通红,成了猴屁股。一路被他像赶着马匹似...
    fangyuanjili阅读 252评论 0 0
  • 对于不漂亮的姑娘,或许从来很少幻想能遇到王子,她们只想过平常人的生活,安心的做自己的灰姑娘。可是这个愿望一旦打破,...
    枫红云天阅读 458评论 0 0