高性能的 PHP API 接口开发

学习与目标

  • API 的工程化建设及 API 性能

    • 如何对 API 项目中的公共技术抽离,建立有层级的 PHP API 项目
    • 如何做好异常处理及监控,保障 API 高效稳定地提供服务
    • 如何进行 API 性能测试
    • 如何定位性能瓶颈
    • 如何解决接口 QPS TPS 问题
  • PHP 常规实现的基本 API

    • 用户登录注册接口
    • 文章类别接口
    • 一些接口实现方法
    • 邮件接口
  • 第三方能力的整合系列接口

    • 短信发送
    • Push 消息
    • IP 地址转换
    • 支付
    • 其他
  • Yaf 框架的优点

    • 功能足够精简
    • 性能足够优秀
    • 适合做 API 层开发
    • 适合用 PHP 硬编码实现
  • 学习收获
    • 掌握 Restful API 接口的实现方法
    • 学习更多 PHP 基本语法、基本库的使用
    • 能够了解 API的分层实现方法
    • 与前端解耦,并行开发
    • 学会工程化抽离整理代码能力
    • 提升 API 性能问题的定位分析与解决能力

API 基础知识讲解

  • API 是无状态性的
  • API 的有状态性的实现方法
    • Session Cookie 实现
    • Json Web Token 实现
  • REST 与 SOAP、RPC 的区别
    • RPC 所谓的远程过程调用(面向方法)?
    • SOAP 所谓的面向服务的架构(面向消息)?
    • REST 所谓的面向资源?

周边知识与工具

  • API 常用传输格式:JSON
  • JSON 的可视化工具
  • API 调试工具:Postman

Yaf 框架

  • Yaf 的安装
    • wget “安装地址”
    • tar zxvf 安装包.tgz
    • phpize
    • ./configure –with-php-config=php-config
    • make
    • make test
    • make install

Yaf Codes Generator

1
php yaf_cg Sample

一些思考

  • 如何防止机器恶意注册与机器模拟用户登录
    • 提交特殊参数
    • 实现网站验证码
  • 如何实现密码找回功能
  • 如何实现数据分页效果
  • 如何收集发送出去的邮件的送达效果
  • 短信发送成功对账实现
  • 批量短信通知的场景如何高效发送
  • 在不能完全识别 IP 地址的时候如何做降级方案

文章类接口的实现

  • 文章信息的 CRUD
  • 让一个 API 接口做更多的事情
  • 文章类接口通用功能:分页功能的实现

Push 服务

  • 小米 Push
  • 华为 Push
  • 个推
  • 极光推送

IP 地址转换接口

  • 黑白名单
  • 访问来源统计
  • 小流量线上验证

API 接口的提炼

  • API 自测脚本
    • 作用
      • 项目部署上线前,验证调成过的项目代码
      • 有利于新的团队成员快速去了解代码功能
    • 安装
      • composer require curl/curl
  • API 公共 Lib 的抽离
    • SDK 抽离
    • Composer 管理
  • 建立数据操作层 DAO
  • 接口异常时的处理规范
    • 统一的 API 接口返回 - 错误信息字典
    • 统一的 API 异常处理 - 容错与降级
  • API 功能的整合
  • API 文档
    • PHPDocumentor

API 接口的性能

  • 接口性能信息收集
    • 关注接口的整体时间开销
      • grep ‘log_format’ ./ -r
    • Xhprof 收集 API 接口开销
  • API 时间开销定位与分析
  • API 上下游性能优化
    • MySQL 性能分析
    • 后端服务调优
      • 短信
      • 邮件
      • 微信推送
    • API 返回调优
  • API 服务稳定性 SLA
    • 服务监控
      • supervisor
      • supervisor 配置和使用
      • find / -name ‘supervisord.conf’
    • API 负载均衡
    • 服务报警