PHP:APP接口开发
环境简介
LNMP
1、Linux
2、Nginx
3、MySQL
4、PHP
APP接口
客户端与服务端数据的交换
HTTP通讯三要素
1、URL 地址
2、Method 方式
3、Params 内容
客户端传递参数
1、URl参数 GET
2、Request Body POST
(1)form-url
(2)form-data
(3)json
环境搭建
环境要求
PHP >= 7.0.0
全局安装composer
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
配置路径
cat ~/.bash_profile# composer
export PATH=$PATH:$HOME/.composer/vendor/bin
安装 Laravel
composer global require "laravel/installer"
创建新应用
laravel new blog
本地开发服务器
php artisan serve
http://localhost:8000
jquery.ajax
jQuery.ajax([settings])
type 类型:String
默认值: “GET”。请求方式 POST/GET/PUT/DELETE
url 类型:String
默认值: 当前页地址。发送请求的地址
contentType 类型:String
默认值: “application/x-www-form-urlencoded”。发送信息至服务器时内容编码类型。
data 类型:String
发送到服务器的数据
dataType 类型:String
预期服务器返回的数据类型。xml/html/script/json/jsonp/text
success 类型:Function
请求成功后的回调函数。
jsonp 类型:String
在一个 jsonp 请求中重写回调函数的名字
jsonpCallback 类型:String
为 jsonp 请求指定一个回调函数名
ajax发送各种请求
<html lang="en"><head><meta charset="UTF-8"><title>Document</title><script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head><body><h1>hello</h1><script>var data = {"name": "Tom","age": 23};// 发送GET请求$.ajax({type: "GET",url: "/api/get",dataType: "json",data: data,success: function(data) {console.log(data);}});// 发送POST请求 // Content-Type: application/x-www-form-urlencoded; charset=UTF-8$.ajax({type: "POST",url: "/api/post-form",dataType: "json",data: data,success: function(data) {console.log(data);}});// 发送POST请求 不编码// Content-Type: multipart/form-data; charset=UTF-8var formData = new FormData();formData.append("name", "Tom");formData.append("age", "23");$.ajax({type: "POST",url: "/api/post-form-data",dataType: "json",contentType: false,processData: false, data: formData,success: function(data) {console.log(data);}});// 发送json数据// Content-Type: application/json; charset=UTF-8$.ajax({type: "POST",url: "/api/post-json",dataType: "json",contentType: 'application/json; charset=UTF-8',data: JSON.stringify(data),success: function(data) {console.log(data);}});// 发送jsonp数据$.ajax({type: "GET",url: "/api/get-jsonp",dataType: "jsonp",data: data,success: function(data) {console.log(data);}});</script>
</body></html>
PHP后端接收参数
routes/web.php
Route::get('/', function () {// return view('welcome');return view('index');
});
routes/api.php
Route::get('/get', function () {$name = $_GET["name"];$age = $_GET["age"];echo json_encode([$name => $age]);
});Route::post('/post-form', function () {$name = $_POST["name"];$age = $_POST["age"];echo json_encode([$name => $age]);
});Route::post('/post-form-data', function () {$name = $_POST["name"];$age = $_POST["age"];echo json_encode([$name => $age]);
});Route::post('/post-json', function () {$ret = file_get_contents("php://input");$data = json_decode($ret, true);$name = $data["name"];$age = $data["age"];echo json_encode([$name => $age]); });Route::get('/get-jsonp', function () {$callback = $_GET["callback"];$name = $_GET["name"];$age = $_GET["age"];echo $callback . "(" . json_encode([$name => $age]) . ")";
});
Laravel 接收GET或POST参数
Route::get('/getOrPost', function (Request $request) {$name = $request->input("name");$age = $request->input("age");echo json_encode([$name => $age]);
});
XML和JSON
APP接口输出格式三要素
code 错误码
msg 错误码描述
data 接口数据
封装app接口数据格式
app/Http/Response/ResponseJson.php
<?phpnamespace App\Http\Response;/*** https://www.php.net/manual/zh/language.oop5.traits.php* traits 通过组合,代码复用*/
trait ResponseJson
{ /*** 接口数据错误时返回*/public function jsonData($code, $message, $data=[]){return $this->jsonResponse($code, $message, $data);}/*** 接口数据成功时返回*/public function jsonSuccessData($data=[]){return $this->jsonResponse(0, "success", $data);}/*** 封装接口数据格式*/private function jsonResponse($code, $message, $data){$content = ["code" => $code,"message" => $message,"data" => $data];return json_encode($content);}}
app/Http/Controllers/Controller.php
<?phpnamespace App\Http\Controllers;use Illuminate\Routing\Controller as BaseController;
use App\Http\Response\ResponseJson;class Controller extends BaseController
{use ResponseJson;public function index(){return $this->jsonSuccessData(["name" => "Tom"]);}
}
routes/api.php
Route::get('/index', "Controller@index");
访问测试
http://127.0.0.1:8000/api/index
{code: 0,message: "success",data: {name: "Tom"}
}
App接口鉴权
客户端需要带着凭证来调用APP接口
传统web cookie session鉴权
Json Web Token JWT
Header
Payload
Signature
Base64URL 算法:
Base64 有三个字符+、/和=,在 URL 里面有特殊含义,
所以要被替换掉:=被省略、+替换成-,/替换成_
问题:
Python binascii.Error: Incorrect padding
解决:
参数最后加上等于号"="(一个或者两个)
http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html
https://jwt.io/
composer require lcobucci/jwt
composer dump-autoload
错误码
错误码是用来描述当前接口处理的结果
错误码是前后端共同的一个约束
class ApiErrDesc
{/*** 通用错误码*/const SUCCESS = [0, "Success"];const UNKNOWN_ERR = [1, "位置错误"];/*** 其他错误码*/const URL_ERR = [2, "url错误"];
}ApiErrDesc::SUCCESS[0], ApiErrDesc::SUCCESS[1]
异常处理
设置默认的异常处理程序,用于没有用 try/catch 块来捕获的异常
set_exception_handler
用户信息接口
1、数据库用户信息设计
2、开发用户信息接口
3、使用redis缓存加速用户信息接口
用户表
id、name、sex、email、password、create_time、update_time
unique email
密码hash和密码校验
$ php -a
Interactive shellphp > $ret = password_hash("123456", PASSWORD_DEFAULT);
php > echo $ret;
$2y$10$6AOQgUCZ7ukn.MAnilB0uuWxu4vrveWCMdPzFg4UyDVI5G7QR.fki
php > echo password_verify("123456", $ret);
1
redis 缓存信息加快访问速度
PHP:APP接口开发相关推荐
- 感受-App接口开发课程讲解和总结
1.背景 今天有幸给学弟学妹们上了一节课,课程内容-- app接口开发.算起来在学校玩程序和软件已经有一年的时间了,这一年里学习到了很多东西,从接触编程语言到会做 安卓软件 ,再到 会写网站,付出了很 ...
- php app接口开发,「PHP开发APP接口实战005」基础示例接口的实现一
前一章,我们对接口参数基本定义做了一个简要说明.里面提到了几个示例接口,接下来,我们就来讲解这个几点个示例接口的具体实现. 「PHP开发APP接口实战004」基础响应参数说明 前言 由于我们的接口返回 ...
- APP接口开发(待完善)
1.接口版本管理 v1.v2 2.app版本管理,检测更新,强制更新.普通更新 3.异常收集,在做Android和ios的后端接口,需要设计一些接口,用来收集客户端收集客户端(A ...
- php接口调用实例源代码,小蚂蚁学习APP接口开发(7)—— APP接口实例——读取缓存方式开发APP接口的代码案例...
从数据库中直接读取数据,虽然时效性很强,但是对数据库造成很大压力,尤其是在高访问量的情况下.这时候可以通过缓存,来有效的缓解了这一压力,虽然时效性有些不足,但是服务器的抗压能力却达到了很大的提高. 读 ...
- app接口开发(php)
1.JSON方式封装通信接口: 封装: response.php <?php // JSON方式封装通信接口 // 定义 response类 class Response {// 定义一个静态方 ...
- 【APP接口开发】chrome浏览器DHC工具安装使用(亲测有效)
1.DHC文件获取地址:http://chromecj.com/web-development/2015-08/549/download.html 2.chrome安装DHC插件教程和步骤:http: ...
- 【APP接口开发】常用HTTP响应头状态码详解
1.200 OK,客户端请求城成功 2.400 Bad Request ,客服端请求语法错误,服务器无法理解和处理 3.401 unauthorized,请求未通过认证 4.403 permissio ...
- php通信软件培训,小蚂蚁学习APP接口开发(3)—— 统一调用入口方式封装通信接口...
在类文件中包含了json返回数据的方法和xml返回数据的方法,在调用的时候需要调用不同的方法来实现不同类型数据的返回,今天再增加一个show()方法,作为一个统一调用的入口,只需要给它传入不同的参数就 ...
- php app接口id参数类型过滤,PHP开发APP接口---返回数据的封装类
/** * app返回数据类 * 1.接受多维,缺少键名的数组, * 2.可由输入的format参数决定返回数据格式 * 例子:Response::show(200, 'success', $data ...
最新文章
- OpenCV 笔记(02)— 图像显示、保存、腐蚀、模糊、canny 边缘检测(imread、imshow、namedWindow、imwrite)
- 如何实现一个HTML5 RPG游戏引擎——第一章,实现地图类
- #react-native BUG#
- Jquery中使用ajax传json参数并从SpringBoot后台Controller返回消息
- urllib的实现---请求响应and请求头处理
- Hadoop安装(Ubuntu Kylin 14.04)
- ESFramework网络通信框架介绍之(5)――消息分派器IMessageDispatcher
- linux镜像文件_深度UI + Ubuntu系统,堪称最强最美Linux发行版!你敢升级吗?
- windows与ubuntu Centos系统下载站点整理(自用)
- php调用笛风接口,优雅的用PHP来实现解析抖音无水印视频!
- 九歌计算机在线作诗硬件原理,清华大学矣晓沅:「九歌」——基于深度学习的中国古典诗歌自动生成系统...
- 【Leetcode】1818.绝对差值和
- 秒杀各大网盘的不限速大文件传输工具
- 反垃圾邮件系统管理手册
- luogu P3527 [POI2011]MET-Meteors
- 如何理解 0.1+0.2
- Android股票列表联动
- 凤姐在投融界融资千万,谁敢掏钱?
- 供给云发布AI微信群助手,赋能企业私域运营
- 电动晾衣架的优点都有哪些?是否适合家庭选择?