Coder Social home page Coder Social logo

phalapi / phalapi Goto Github PK

View Code? Open in Web Editor NEW
1.6K 94.0 373.0 14.64 MB

PhalApi开源接口框架,简称π框架,一个轻量级PHP开源接口框架,专注于接口服务开发。接口,从简单开始!

Home Page: http://www.phalapi.net

License: Apache License 2.0

PHP 3.61% Shell 0.01% C# 0.23% Java 0.25% HTML 0.11% JavaScript 39.02% Ruby 0.25% Go 0.10% Python 0.08% Objective-C 12.75% CSS 43.59% C 0.01%
phalapi php-framework restful microservice soap-web-services api phpapi api-framework

phalapi's Introduction

apic

读音:派框架,官网:https://www.phalapi.net/

Latest Stable Version Total Downloads Latest Unstable Version License

Stargazers over time

Stargazers over time

开发文档

专为PHPer准备的优雅而详细的开发文档,基本都能在文档找到你要的答案,请看:PhalApi 2.x 开发文档

在线示例

快速安装

composer一键安装

使用composer创建项目的命令,可实现一键安装。

$ composer create-project phalapi/phalapi

温馨提示:关于composer的使用,请参考Composer 中文网 / Packagist **全量镜像

手动下载安装

或者,也可以进行手动安装。将此Git项目代码下载解压后,进行可选的composer更新,即:

$ composer update

部署

Nginx配置

如果使用的是Nginx,可参考以下配置。

server {
    listen 80;
    server_name dev.phalapi.net;
    # 将根目录设置到public目录
    root /path/to/phalapi/public;
    charset utf-8;

    location / {
        index index.php;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # 根据当前环境,选择合适的通讯方式
        # fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

配置时需要将网站根目录设置到public目录,配置保存后重启nginx。

温馨提示:推荐将访问根路径指向/path/to/phalapi/public。

数据库配置

如何使用的是MySQL数据库,参考修改./config/dbs.php数据库配置。

return array(
    /**
     * DB数据库服务器集群 / database cluster
     */
    'servers' => array(
        'db_master' => array(                       // 服务器标记 / database identify
            'type'      => 'mysql',                 // 数据库类型,暂时只支持:mysql, sqlserver / database type
            'host'      => '127.0.0.1',             // 数据库域名 / database host
            'name'      => 'phalapi',               // 数据库名字 / database name
            'user'      => 'root',                  // 数据库用户名 / database user
            'password'  => '',	                    // 数据库密码 / database password
            'port'      => 3306,                    // 数据库端口 / database port
            'charset'   => 'UTF8',                  // 数据库字符集 / database charset
            'pdo_attr_string'   => false,           // 数据库查询结果统一使用字符串,true是,false否
            'driver_options' => array(              // PDO初始化时的连接选项配置
                // 若需要更多配置,请参考官方文档:https://www.php.net/manual/zh/pdo.constants.php
            ),
        ),
    ),

    // 更多代码省略……
);

最后,需要给runtime目录添加写入权限。更多安装说明请参考文档下载与安装

使用

调用接口

在PhalApi,你可以通过service参数(短名字是s参数)指定需要调用的接口服务。例如,访问默认接口服务。

http://dev.phalapi.net/?s=App.Site.Index

接口请求后结果输出类似如下:

{
    "ret": 200,
    "data": {
        "title": "Hello PhalApi",
        "version": "2.4.2",
        "time": 1501079142
    },
    "msg": ""
}

对应执行的PHP代码在./src/app/Api/Site.php文件,源码片段如下:

<?php
namespace App\Api;
use PhalApi\Api;

/**
 * 默认接口服务类
 * @author: dogstar <[email protected]> 2014-10-04
 */
class Site extends Api {
    public function getRules() {
        return array(
            'index' => array(
                'username'  => array('name' => 'username', 'default' => 'PhalApi', 'desc' => '用户名'),
            ),
        );
    }

    /**
     * 默认接口服务
     * @desc 默认接口服务,当未指定接口服务时执行此接口服务
     * @return string title 标题
     * @return string content 内容
     * @return string version 版本,格式:X.X.X
     * @return int time 当前时间戳
     * @exception 400 非法请求,参数传递错误
     */
    public function index() {
        return array(
            'title' => 'Hello ' . $this->username,
            'version' => PHALAPI_VERSION,
            'time' => $_SERVER['REQUEST_TIME'],
        );
    }
}

运行效果,截图如下:

_20190201151943

查看在线接口文档

PhalApi会根据你编写的接口的参数配置和代码注释,自动实时生成在线接口文档。在线接口文档链接为:

浏览效果类似如下:

接口文档详情页效果类似如下:
支持在线接口测试、请求示例说明、生成离线版HTML接口文档、实时更新。

目录结构

./phalapi
├── README.md # 简介
├── bin # 脚本目录
├── config # 配置目录
│   ├── app.php # 应用配置
│   ├── dbs.php # 数据库配置
│   ├── di.php # 依赖服务配置
│   └── sys.php #系统配置
├── data # 数据库
│   └── phalapi.sql # 数据库安装时的文件
├── language # 翻译包
├── public # 对外访问的目录
│   ├── docs # 离线生成的HTML接口文档
│   ├── docs.php # 在线版接口文档访问入口
│   ├── index.php
│   ├── init.php # 全局初始化文件
│   ├── static # 静态资源
│   ├── uploads # 上传目录(需要有写入权限)
│   └── phalapi_logo.png # logo图片
├── runtime # 运行目录
│   ├── cache # 文件缓存
│   └── log # 文件日志
├── sdk # SDK包
├── src # 项目源代码,非常重要
│   ├── app # 接口源代码(遵循ADM模式)
│   │   ├── Api # 放置接口源代码,相当于控制器层
│   │   ├── Common # 公共代码目录,放置工具等
│   │   ├── Domain # 领域业务层,负责业务逻辑和处理
│   │   ├── functions.php # 公共函数库
│   │   └── Model # 数据源层,负责数据持久化存储及操作
│   └── view # 页面模板目录(如接口文档)
├── tests # 单元测试
└── vendor # composer包,不需要手动修改,通过composer install/update可进行安装和更新

翻译

修改./public/init.php文件,可设置当前语言。

// 翻译语言包设定-简体中文
\PhalApi\SL('zh_cn');

// Setting language to English
\PhalApi\SL('en');

一张图告诉你如何使用PhalApi 2.x

phalapi-install

2020视频教程

子项目

PhalApi composer 扩展

温馨提示:以上扩展需要先通过composer安装再使用。更多扩展类库的使用和开发,请参考文档:PhalApi框架扩展类库

PhalApi应用插件

温馨提示:应用插件和composer扩展的区别在于,应用插件颗粒度更大,功能更具体,可能不仅有数据库、接口、界面、还可能配合其他终端,并且不受composer的规范约束,是PhalApi自主发明和设计的开发方式。更多请参考:第三方应用插件开发教程

推荐产品

温馨提示:以上产品均使用了PhalApi开源框架,并为官方自主研发的产品,欢迎个人/团队/企业使用。

还有问题,怎么办?

如发现问题,或者任何问题,欢迎提交Issue到这里
如果喜欢,请帮忙在Github码云给个Star,也可以对PhalApi进行捐赠哦 ^_^。

开源许可协议 / Licence

Apache 2.0,Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。

由 广州果创网络科技有限公司 长期维护升级。

phalapi's People

Contributors

254059780 avatar aevit avatar axiosleo avatar djcn avatar dogstartest avatar ederth avatar fishersyu avatar gaoyiping avatar harry-1012 avatar ishwy avatar johnzhao1208 avatar kai-oss-code avatar ledccn avatar linjie-guo avatar mythg avatar phalapi avatar prettyyjnic avatar shaoyikai avatar wenzhenxi avatar williamjiangsa avatar wuxyyin avatar xubing6243 avatar zhao-github avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

phalapi's Issues

apache .htaccess

我看官方文档没有apache相关配置,我这两天有用到 apache 的虚拟主机,刚好参考 wordpress 的写了一份。

目录结构

htdocs
├── phalapi
└── .htaccess

.htaccess内容

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /

    RewriteCond %{HTTP_HOST} ^dev.phalapi.net$

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteCond %{REQUEST_URI} !^/phalapi/public/
    RewriteRule ^(.*)$ /phalapi/public/$1
    RewriteRule ^(/)?$ index.php [L]
</IfModule>

可否添加一个“是否在不匹配时显示正则内容”的开关?

假设 getRules 中的正则如下:

'regex' => "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i",

我故意输入一个:email=asd,然后会提示:

非法请求:email无法匹配/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i

一般来说,这样的提示不应该只在开发环境下才会有的么?生产环境暴露正则的具体内容,可能会导致正则被绕过,从而引发安全问题。

这个提示是 StringFormatter#filterByRegex 发出来的,我没有在里面找到关闭它的方法。

升级后发现子类重写问题

Strict standards: Declaration of Lib\Desc\CustomApiList::render() should be compatible with PhalApi\Helper\ApiOnline::render($tplPath = NULL) in /newdata/cpssapi.izaodao.com/lib/Desc/CustomApiList.php on line 6

SDK(PHP)中超时设置无效

SDK/PHP/PhalApiClient/PhalApiClient.php文件中定义的超时设置为
protected $timeoutMs
image

而在超时设置方法里(withTimeout)却是
$this->timeoutMS = $timeoutMS
image

也就是timeoutMs在两处大小写不一致,而在发起接口请求方法request中调用doRequest时是使用
$this->timeoutMs
如下:
$rs = $this->doRequest($url, $this->params, $this->timeoutMs); 此时 $this->timeoutMs`
的值仍然为空,从而导致超时设置无效

@dogstar

app发送的post请求参数接收不到

同事用app发送postpost请求,这边参数接收不到,但是我自己写html或者用curl或浏览器插件这些都可以拿到参数,是不是app(安卓和ios)发送的post请求不标准还是类型不一样,拿不到参数?

关于配置多个数据库

我在框架中配置了两个数据库dba和dbc,两个数据库里有表名称一样的表tb_a,请问我在操作这个表的时候怎么指定是操作哪个数据库中的tb_a?

关于接口参数规则配置

我有一条这样子的配置并且为必要参数。

'cip'=>array('name'=>'REMOTE_ADDR','type'=>'enum','require'=>1,'range'=>array('IP1','IP2),'desc' => '服务IP地址限制!','source'=>'server'),

像这种不需要填写的参数是否可以不让它显示在接口文档里面?并且在不符合条件时能否不让它有明显的提示信息?现在会有提示IP地址范围,我希望能修改它的提示信息可以吗?

还是我必须使用callable/callback类型来实现自定义?

无法访问啊

访问默认路径的测试接口出现错误
Fatal error: Class 'PhalApi\Api' not found in D:\wamp64\www\phalapi\src\app\Api\Site.php on line 11

phalapi使用postgresql时lastInsertId不能正常获取ID值

PhalApi/NotORM/NotORM/Result.php中
方法:
function insert_id(){
return $this->notORM->connection->lastInsertId();
}
返回最后插入行的ID,或者是一个序列对象最后的值,取决于底层的驱动。比如,PDO_PGSQL() 要求为 name 参数指定序列对象的名称.。未传入序列对象的名称导致该问题的发生。

关于多数据库访问

我有一组服务器A,B,C,D数据库结构完全一样.

我有时需要访问服务器A的,有时需要访问的是服务器B的.

除了为每个服务器的数据库建不同名的MODEL,有没有什么更好的方法?

我目前是使用同一个MODEL,但在使用之前先判断当前要访问的是哪个数据库,预先修改默认服务器指向.

但是这样子无法同时调取两个服务器的数据.

用 PhalApi\Request 获取header参数有BUG

环境:windows+php5.6.27+NGINX1.11.5
用 PhalApi\Request 获取header参数有BUG、Postman header 发送参数key为headparam 用request类的getHeader方法获取参数 $request->getHeader('headparam')返回为空!
经过断点发现getallheaders()函数返回的数组key为Headparam首字母变大写了![](url)
可以用array_change_key_case( getallheaders()) 返回!

在线接口文档乱码

在线接口文档,没有规定响应头,在非UTF-8编码的服务器上,页面会乱码,但是在docs.php加入header之后就可以了。
希望在配置中能够加入响应头部编码信息。

Response返回data,200为对象,其他为数组

Response返回data,200为对象,其他(400,401等)为数组
这样会造成app端 json解析有问题,
查看源代码发现,data默认为array,而返回400的时候没有对data进行赋值

{ "ret": 200, "data": { "title": "Hello PhalApi", "version": "2.2.0", "time": 1519691269 }, "msg": "", }

{ "ret": 400, "data": [], "msg": "非法请求:用户不存在." }

建议在PhalApi类中,第54行增加
$rs->setMsg((object)[]);
对默认值的类型进行修改.

关于Soap扩展

刚接触PhalApi几天,这就是我想要的,足够简单并且易于扩展,感谢!

使用过程中由于需要提供WebService功能,查了一下发现以前的soap扩展是针对旧版的,
所以就学习了一下修改了一个版本。

https://github.com/chenall/phalapi-soap

有需要的可以安装使用

composer require chenall/phalapi-soap

PS: 第一次写composer扩展,自己测试使用正常。

请问选择NotORM之前有没有比较过LessQL?

因为我之前关注过LessQL
其实它和NotORM非常相似,
LessQL官网上也写着:

LessQL is heavily inspired by NotORM which presents a novel, intuitive API to SQL databases.

按道理后来者应该比前辈更强才对,
具体性能我没对比过,
所以想问一下有没有对比过NotORMLessQL
据我所知NotORM上一次提交是2014年,
LessQL上一次提交是2016年。

关闭&__debug__的debug信息

看了文档,上面显示增加&__debug__可以显示debug信息,那岂不是任何人都可以这样查看接口的debug信息吗?
找了半天没看到关闭这个debug的操作。

引用有误

“有的时候宁愿付钱让你一周在床上待着,也不想让你用这周剩下的时间去调试你在周一所写的代码。 --丹·所罗门”
这句话不是 丹·所罗门 说的啊,看着好难受.

在线文档类名重复时有丢失显示

吞吞小猴 2017/9/8 14:24:47
2.0接口文档有bug,文件名重名,接口文档只显示一个

吞吞小猴 2017/9/8 14:24:47
$allApiS[$apiClassShortName] 这样设置key是不是太简单了重名被覆盖了

关于请求参数规则(意见)

使用这个框架有一段时间了,目前有一个小问题,就是关于参数规则的.

个人觉得目前的参数规则的编写方式应该还有改进的余地,我的考虑主要有两点(主要还是懒^_^)

  1. 复用(可能好几个API里面有参数都是一样的).
  2. 编辑器友好(API参数传递给D之后我希望在D里面可以有代码提示,知道有哪些参数)

当然了这些只有个人的想法,不知有没有人愿意去实现?

使用composer安装出现错误找不到Phar

composer create-project phalapi/phalapi

Fatal error: Class 'Phar' not found in D:\phpStudy\tools\composer\composer.phar on line 23

我用的是傻瓜式PhpStudy里面的 composer

使用demo中的CURD请求模拟时NotORM一直提示错误

r wstw 048z c ax 0a6

Uncaught Error: Class 'NotORM_Structure_Convention' not found in /data/wwwroot/zqwq/phalapi/vendor/phalapi/kernal/src/Database/NotORMDatabase.php:115\nStack trace:\n#0 /data/wwwroot/zqwq/phalapi/vendor/phalapi/kernal/src/Model/NotORMModel.php(126): PhalApi\Database\NotORMDatabase->__get('curd')\n#1 /data/wwwroot/zqwq/phalapi/vendor/phalapi/kernal/src/Model/NotORMModel.php(41): PhalApi\Model\NotORMModel->getORM(NULL)\n#2 /data/wwwroot/zqwq/phalapi/src/app/Domain/Examples/CURD.php(12): PhalApi\Model\NotORMModel->insert(Array)\n#3 /data/wwwroot/zqwq/phalapi/src/app/Api/Examples/CURD.php(56): App\Domain\Examples\CURD->insert(Array)\n#4 [internal function]: App\Api\Examples\CURD->insert()\n#5 /data/wwwroot/zqwq/phalapi/vendor/phalapi/kernal/src/PhalApi.php(48): call_user_func(Array)\n#6 /data/wwwroot/zqwq/phalapi/public/index.php(9): PhalApi\PhalApi->response()\n#7 {main}\n thrown in /data/wwwroot/zqwq/phalapi/vendor/phalapi/kernal/src/Database/NotORMDatabase.php on line 115

你好,我安装2.x版本的,用你代码中的CURD模拟请求一直提示这个。

关于dbs默认配置的问题

初学phalapi,确实很容易上手,谢谢,在使用过程中发现一个小问题
我原以为有__default__之后其它的表可以不用设定map db项,可以直接使用默认值
刚开始使用如下配置,使用的时候会报错,没有默认db route. 把后面表的map项补上就正常了.

'tables' => array(
        //通用路由
        '__default__' => array(
            'prefix' => 'tbl_',
            'key' => 'id',
            'map' => array(
                array('db' => 'db_master'),
            ),
        ),
  'tab1'=>array('key'=>'mainid'),
  'tab2'=>array('key'=>'sx'),

我目前是自己修改了NotORMDatabase.php里面的部份代码,增加了判断.

服务白名单时,全局接口参数不需要再验证

东子:

还是在纠结那个 全局接口参数 和 白名单 的问题

假设个场景:
有1个参数叫签名,基本上所有接口都需要转。
但是有些特殊接口,就不需要

上面这个场景正常的思路:
把签名添加到 全局接口参数
把不需要签名参数的接口添加到 白名单  就可以了

但是目前派框架在验证客户参数取需要参数时,不是这么干的!
是的你说可以把 签名 参数设置为可选,那这 签名 还有什么意义,
难度在大部分的需要签名的参数都加上验证变量是否存在?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.