环境简介

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接口开发相关推荐

  1. 感受-App接口开发课程讲解和总结

    1.背景 今天有幸给学弟学妹们上了一节课,课程内容-- app接口开发.算起来在学校玩程序和软件已经有一年的时间了,这一年里学习到了很多东西,从接触编程语言到会做 安卓软件 ,再到 会写网站,付出了很 ...

  2. php app接口开发,「PHP开发APP接口实战005」基础示例接口的实现一

    前一章,我们对接口参数基本定义做了一个简要说明.里面提到了几个示例接口,接下来,我们就来讲解这个几点个示例接口的具体实现. 「PHP开发APP接口实战004」基础响应参数说明 前言 由于我们的接口返回 ...

  3. APP接口开发(待完善)

    1.接口版本管理    v1.v2     2.app版本管理,检测更新,强制更新.普通更新     3.异常收集,在做Android和ios的后端接口,需要设计一些接口,用来收集客户端收集客户端(A ...

  4. php接口调用实例源代码,小蚂蚁学习APP接口开发(7)—— APP接口实例——读取缓存方式开发APP接口的代码案例...

    从数据库中直接读取数据,虽然时效性很强,但是对数据库造成很大压力,尤其是在高访问量的情况下.这时候可以通过缓存,来有效的缓解了这一压力,虽然时效性有些不足,但是服务器的抗压能力却达到了很大的提高. 读 ...

  5. app接口开发(php)

    1.JSON方式封装通信接口: 封装: response.php <?php // JSON方式封装通信接口 // 定义 response类 class Response {// 定义一个静态方 ...

  6. 【APP接口开发】chrome浏览器DHC工具安装使用(亲测有效)

    1.DHC文件获取地址:http://chromecj.com/web-development/2015-08/549/download.html 2.chrome安装DHC插件教程和步骤:http: ...

  7. 【APP接口开发】常用HTTP响应头状态码详解

    1.200 OK,客户端请求城成功 2.400 Bad Request ,客服端请求语法错误,服务器无法理解和处理 3.401 unauthorized,请求未通过认证 4.403 permissio ...

  8. php通信软件培训,小蚂蚁学习APP接口开发(3)—— 统一调用入口方式封装通信接口...

    在类文件中包含了json返回数据的方法和xml返回数据的方法,在调用的时候需要调用不同的方法来实现不同类型数据的返回,今天再增加一个show()方法,作为一个统一调用的入口,只需要给它传入不同的参数就 ...

  9. php app接口id参数类型过滤,PHP开发APP接口---返回数据的封装类

    /** * app返回数据类 * 1.接受多维,缺少键名的数组, * 2.可由输入的format参数决定返回数据格式 * 例子:Response::show(200, 'success', $data ...

最新文章

  1. OpenCV 笔记(02)— 图像显示、保存、腐蚀、模糊、canny 边缘检测(imread、imshow、namedWindow、imwrite)
  2. 如何实现一个HTML5 RPG游戏引擎——第一章,实现地图类
  3. #react-native BUG#
  4. Jquery中使用ajax传json参数并从SpringBoot后台Controller返回消息
  5. urllib的实现---请求响应and请求头处理
  6. Hadoop安装(Ubuntu Kylin 14.04)
  7. ESFramework网络通信框架介绍之(5)――消息分派器IMessageDispatcher
  8. linux镜像文件_深度UI + Ubuntu系统,堪称最强最美Linux发行版!你敢升级吗?
  9. windows与ubuntu Centos系统下载站点整理(自用)
  10. php调用笛风接口,优雅的用PHP来实现解析抖音无水印视频!
  11. 九歌计算机在线作诗硬件原理,清华大学矣晓沅:「九歌」——基于深度学习的中国古典诗歌自动生成系统...
  12. 【Leetcode】1818.绝对差值和
  13. 秒杀各大网盘的不限速大文件传输工具
  14. 反垃圾邮件系统管理手册
  15. luogu P3527 [POI2011]MET-Meteors
  16. 如何理解 0.1+0.2
  17. Android股票列表联动
  18. 凤姐在投融界融资千万,谁敢掏钱?
  19. 供给云发布AI微信群助手,赋能企业私域运营
  20. 电动晾衣架的优点都有哪些?是否适合家庭选择?

热门文章

  1. 遍历Python字典
  2. 专访深职院XR专家 | 实时云渲染赋能虚拟仿真实训,打造5G+XR智慧教育平台
  3. Mac 安装第三方来源软件
  4. XAMPP介绍、安装及使用
  5. 大数据在金融行业的应用——银行大数据
  6. 【IPC通信】key_t键和ftok函数
  7. 什么是CISP-PTS?考什么?
  8. 远程桌面全屏无法退出
  9. 《计算机图形学》实验报告区域填充扫描线算法
  10. Oracle:错误码ORA-28040 的坑