# app_server
**Repository Path**: albinwong/app_server
## Basic Information
- **Project Name**: app_server
- **Description**: APP interface
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2017-06-10
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#### PHP开发APP接口
#### 1. APP接口简介
- APP接口介绍
> PHP中面向对象接口定义
```
/**
* 定义一个接口
* 提供一个标准
*/
interface video{
public function getVideos();
public function getCount();
}
class movie implements video(){
public function getVideos(){
echo 1;
}
public function getCount(){
echo 2;
}
}
movie::getVideos();
```
> APP接口(通信接口)---请求APP接口地址---返回接口数据---解析数据---客户端
- 接口地址:(http://app.com/api.php?format=xml)
- 接口文件:(api.php处理一些业务逻辑)
- 接口数据
- APP如何进行通信
返回数据发送http请求(`http://api.com/index.php`)
客户端APP(C)====================================服务器(S)
返回数据(现目前xml和json)
- 通信格式区别
1. XML:扩展标记语言(Extensible Markup Language,XML),可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML格式统一,跨平台和语言,非常适合数据传输和通信
#### XML数据
```
-
test
test1
Peking
```
2. JSON:JSON(Javascript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.可在不同平台之间进行数据交换.JSON采用兼容性很高的、完全独立于语言文本格式
`{"title":"test","from":"\u5728\u7eb\u6559\80b2\u7f51","description":"test1","address":"Peking"}`
3. 通信数据格式xml/json区别
1. 可读性
2. 生成数据方面
3. 传输速度
- APP接口做的事
获取数据: 从数据库中缓存中获取数据,通过接口数据返回给客户端
提交数据: 通过接口提交数据给服务器,服务器入库处理,或者其他处理
#### 2. 封装通信接口方法
1. JSON方式封装接口数据方法
1. PHP生成JSON数据
方法:json_encode()
注: 该函数只能接受==UTF-8==编码的数据,如果传递其他格式的数据该函数会返回NULL
2. 通信数据标准格式
code 状态码(200.400等)
message 提示信息(邮箱格式不正确,数据返回成功等)
data 返回数据
3. JSON方式如何封装通信数据方法
2. XML方式封装接口数据方法
1. PHP生成XML数据
(1) 组装字符串
(2) 使用系统类
- DomDocument
```
createElement('test','This is the root element');
$dom->appendChild($element);
echo $dom->saveXML();
This is the root element
```
- XMLWriter
- SimpleXML
2. XML方式如何封装通信数据方法
- 封装方法 `xmlEncode($code,$message="",$data= [])`
- data 数据分析
1. array('index'=> 'api');
2. array(1,7,89);
3. 综合通信方式封装
封装方法: `show($code,$message,$data=[],$type='json');`
#### 3. 核心技术
1. 缓存技术
1. 静态缓存
保存在磁盘上的静态文件,用PHP生成数据放入静态文件中
2. Memcache.Redis缓存
1. Memcache和Redis都是用来管理数据的
2. 它们数据都是存放在内存里的
3. Redis可以定期将数据备份到磁盘(持久化)
4. Memcache只是简单的key/value缓存
5. Redis不仅仅支持简单的k/v类型的数据,同时还提供list.set.hash等数据结构的存储
- Redis
Redis数据操作
1. 开启redis客户端 `redis-server 6379.conf` 开启客户端`redis-cli`
2. 设置缓存之 `set index-cache '数据' `
3. 获取缓存数据 `get index-cache`
4. 设置过期时间 `setex key 10 'cache'`//10s
5. 删除缓存 `del key`
PHP操作Redis
1. 安装phpredis扩展
2. PHP连接Redis服务-connect('127.0.0.1',6379)
3. set 设置缓存
4. get 获取缓存
- Memcache
PHP操作Memcache
1. 安装Memcache扩展
2. PHP连接Memcache服务-connect('127.0.0.1',11211)
3. set 设置缓存
4. get 获取缓存
2. 定时任务
1. 定时任务服务提供crontab命令来设定服务
2. crontab -e //编辑某个用户的cron服务
3. crontab -l //列出某个用户cron服务的详细内容
4. crontab -r //删除每个用户的cron服务
格式:
分 时 日 月 星期 命令
* * * * * *
0-59 0-23 1-31 1-21 0-6 command
注: * 代表取值范围内的数字,/ 代表每
例: */1 * * * * php /data/www/cron.php 每分钟执行cron.php
50 7 * * * /sbin/service sshd start 每天7:50开启ssh服务
#### 4. APP接口实例
1. 单例模式连接数据库
单例模式三大原则:
1. 构造函数需要标记为非public(防止外部使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化
2. 拥有一个保存类的实例的静态成员变量$_instance
3. 拥有一个访问这个实例的公共的静态方法
2. 首页接口开发以及客户端APP演示
1. 读取数据库方式开发首页接口
从数据库获取信===>封装===>生成接口数据(应用场景:数据时效性,比较高的系统)
2. 读取缓存方式开发首页接口
从数据库获取信息===>封装(缓存)===>生成接口数据(用途:减少数据库压力)
3. 定时读取缓存方式开发首页接口
数据库===>crontab===>http请求/缓存==>封装并返回数据
3. APP版本升级以及APP演示
- 版本升级分析以及数据表设计
- 版本升级接口开发以及APP演示
> 接口传递参数
app_id | 客户端id 1 安卓pad
---|---
version_id | 版本号
did | 客户端设备号
version_mini | 小版本号
encrypt_did | 加密后did串
> 基本参数传递方法和获取方法
方式 | 获取
---|---
get | $_GET
post | $_POST
header头 | $_SERVER
4. APP错误日志接口
1. APP强退
2. 数据加载失败
3. APP潜在问题