w3cschool 编程狮,随时随地学编程
下载APP
|
登录
个人中心
首页
入门教程
编程课程
特色实战
畅学全站
首页
/
PhalApi - v1.3.4 官方开发文档
/
一、基础入门
一、基础入门
接口,从简单开始!
下载与安装
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录
前言
接口,从简单开始!
一、基础入门
开篇
下载与安装
创建一个自己的项目
在线体验
文档、帮助和官网
对PhalApi框架的抉择
开发手册
快速入门: 接口开发示例(源码+图文)
参数规则:接口参数规则配置
统一的接口请求方式:?sevice=XXX.XXX
统一的返回格式和结构:ret data msg
数据库操作:基于NotORM的使用及优化
配置读取:内外网环境配置的完美切换
日志纪录:简化版的日志接口
快速函数:人性化的关怀
DI服务速查:各资源服务一览表
DB操作:数据库基本操作速查
更多技艺
类的自动加载:遵循PEAR包的命名规范
签名验证:自定义签名规则
请求和响应:GET和POST两者皆可得及超越JSON格式返回
缓存策略:更灵活地可配置化的多级缓存
国际化翻译:为走向国际化提前做好翻译准备
数据安全:数据对称加密方案
精益开发:更富表现力的Model层和重量级数据获取的应对方案
COOKIE:对COOKIE原生态的支持及记忆加密升级版
开放与封闭:多入口和统一初始化
保持的力量:接口开发最佳实践
新型计划任务:以接口形式实现的计划任务
二、高级专题
思想与应用
核心思想:Di依赖注入 让资源更可控
海量数据:可配置的分库分表
接口调试:在线sql语句查看与性能优化
测试驱动开发:意图导向编程下的接口开发
演进:新型计划任务续篇
领域驱动设计:应对复杂领域业务的Domain层
微服务:Api接口服务层
定制化:资源服务的再实现
扩展库:可重用的扩展类库
约定编程:架构明显的编程风格
工具与实践
服务器统一部署方案简明版:CentOs + Nginx + php-fpm + MySql [+ Memcached]
更多工具:精英项目和团队建设
三、扩展类库
微信开发
代理模式下phprpc协议的轻松支持
基于PHPMailer的邮件发送
优酷开放平台接口调用
七牛云存储接口调用
新型计划任务
用户、会话和第三方登录集成
swoole支持下的长链接和异步任务实现
Auth 权限扩展 (由@黄苗笋提供)
基于FastRoute的快速路由(支持RESTful)
基于PhalApi的DB集群拓展Cluster (由@喵了个咪提供)
基于PhalApi的Redis拓展 (由@喵了个咪提供)
基于PhalApi的图片上传拓展 (由@Summer)
基于PhalApi的第三方支付拓展 (由@Summer)
PhalApi-Image -- 图像处理 (由@喵了个咪提供)
四、项目实践
利用扩展库进行微信服务号开发
模拟优酷开放平台接口项目开发
一个简单的小型项目开发(奔跑吧兄弟投票活动)
一个可能的大型项目开发(多终端多版本)
五、其他
架构与思想:Phal Api核心设计和思想解读
杂谈:扯一些phal Api的前世和今生
框架总结:术语表和PHP开发建议
许可
联系和加入我们
更新日志
致框架贡献者:加入PhalApi开源指南
附录1:接口文档参考模板
六、SDK包
基于接口查询语言的SDK包
SDK包(JAVA版)
SDK包(PHP版)
SDK包(object c版) 由@Aevit 提供
SDK包(javascript版) 由@喵了个咪 提供
SDK包(Ruby版)
七、教程
教程-入门篇
简单介绍以及环境搭建
把它玩起来
请求和返回
国际化高可用和自动生成文档
数据库操作和Model层
小技巧和浅谈API适用范围以及入门篇总结
教程-进阶篇
三层结构Api,Domain,和Model
DI依赖注入和单例模式
自动加载和拦截器
notrom进阶以及事务操作
数据库读写分离
解决大量数据存储数据库分表分库拓展
使用缓存以及用redis拓展解决实际问题
PhalApi能带来什么和进阶篇总结
八、视频教程
PhalApi视频教程
关闭
MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }