接口测试php代码,简易 PHP API 测试

简易 PHP API 测试

PHP代码

/*

======================================================================================

Author : James

Date : 2020/3/21

Versions: Beta v2

HEPL :

HTTP POST :

1.{ "select": "mock_data", "where": [{ "id": "1" },{ "username": "james" }], "limit": [1, 2] };

2.{ "insert": "mock_data", "values": [{ "username": "james" }, { "email": "james@domain.com" }] };

3.{ "update": "mock_data", "set": [{ "username": "james" }, { "email": "james@domain.com" }], "where": [{ "id": "1" }] };

4.{ "delete": "mock_data", "where": [{ "id": "1" }] }

5.{ "query": "mock_data", "where": [{ "username": "james" }], "page": [1,10] }; page参数[当前页,页大小]

======================================================================================

*/

header("Content-type: application/json");

header("Content-type:text/html;charset=utf-8");

header("Access-Control-Allow-Origin:*");

//初始化参数

define("HOST", "localhost");

define("DBNAME", "test");

define("USER", "root");

define("PASSWORD", "");

define("ACCESSPERMISSION", json_encode(array('query', 'select', 'update', 'insert', 'delete')));

define("PAGESIZE", 10);

global $MySQL;

if (count($_POST) < 1) {

render(null, array("Error" => "Not POST Param"));

}

$GLOBALS["MySQL"] = new PDO("mysql:host=" . HOST . ";dbname=" . DBNAME . ";charset=utf8", USER, PASSWORD, array(PDO::ATTR_PERSISTENT => true));

$SQL_TYPE = strtolower(array_keys($_POST)[0]);

if (in_array($SQL_TYPE, json_decode(ACCESSPERMISSION)) && !empty($_POST[$SQL_TYPE])) {

if (!isTable($_POST[$SQL_TYPE])) {

render(null, array("Error" => "Not Exist Table " . $_POST[$SQL_TYPE]));

}

$POST = $_POST;

unset($POST[$SQL_TYPE]);

call_user_func($SQL_TYPE, $_POST[$SQL_TYPE], $POST);

} else {

render(null, array("Error" => "POST Param " . $SQL_TYPE));

}

//拼凑 WHERE 语句

function where($SQL)

{

if (count($SQL) < 1) {

return "";

}

$sql = ' WHERE ';

foreach ($SQL as $item) {

foreach ($item as $key => $val) {

$sql .= sprintf("%s='%s' and ", $key, $val);

}

}

return substr($sql, 0, -4);

}

//拼凑 VALUES 语句

function values($SQL)

{

if (count($SQL) < 1) {

return "";

}

$sql = '';

$k = '';

$v = '';

foreach ($SQL as $item) {

foreach ($item as $key => $val) {

$k .= sprintf("%s,", $key);

$v .= sprintf("'%s',", $val);

}

}

$sql .= sprintf("(%s)VALUES(%s)", substr($k, 0, -1), substr($v, 0, -1));

return $sql;

}

//拼凑 SET 语句

function set($SQL)

{

if (count($SQL) < 1) {

return "";

}

$sql = ' SET ';

foreach ($SQL as $item) {

foreach ($item as $key => $val) {

$sql .= sprintf("%s='%s',", $key, $val);

}

}

return substr($sql, 0, -1);

}

//拼凑 ORDER BY 语句

function orderby($SQL)

{

if (count($SQL) < 1) {

return "";

}

$sql = ' ORDER BY ';

foreach ($SQL as $item) {

foreach ($item as $key => $val) {

$sql .= $key . " " . $val . ",";

}

}

return substr($sql, 0, -1);

}

//拼凑 LIMIT 语句

function limit($SQL)

{

if (count($SQL) < 1) {

return "";

}

$sql = ' LIMIT ';

foreach ($SQL as $item) {

$sql .= $item . ",";

}

return substr($sql, 0, -1);

}

//拼凑 PAGE 语句

function page($SQL)

{

if (count($SQL) < 1) {

return "";

}

$sql = ' LIMIT ';

foreach ($SQL as $item) {

$sql .= $item . ",";

}

return substr($sql, 0, -1);

}

//装配SQL的条件语句

function AssembleSQL($SQL)

{

//die(var_dump($SQL));

if (isset($SQL) && !empty($SQL)) {

$sql = "";

foreach ($SQL as $key => $value) {

$sql .= call_user_func(strtolower($key), $value);

}

return $sql;

}

}

//执行分页数据库

function query($TABLE, $SQL)

{

$pageNumber = 1;

$pageSize = PAGESIZE;

$totalPage = 1;

$totalRow = 1;

$start = 0;

if (!empty($SQL) && count($SQL['page']) > 0) {

if (count($SQL['page']) == 1) {

$pageNumber = $SQL['page'][0] < 1 ? 1 : $SQL['page'][0];

}

if (count($SQL['page']) == 2) {

$pageNumber = $SQL['page'][0] < 1 ? 1 : $SQL['page'][0];

$pageSize = $SQL['page'][1] < 1 ? 10 : $SQL['page'][1];

}

$start = ($pageNumber - 1) * $pageSize;

}

$SQL['page'] = array($start, $pageSize);

$sql = sprintf("SELECT * FROM %s %s", $TABLE, AssembleSQL($SQL));

$sql_count = substr($sql, 0, strpos($sql, "LIMIT"));

$sql_count = str_replace("*", "count(*)", $sql_count);

$dbcount = $GLOBALS["MySQL"]->query($sql_count);

$totalRow = $dbcount->fetchColumn();

$db = $GLOBALS["MySQL"]->query($sql);

$reslut = $db->fetchAll(PDO::FETCH_ASSOC);

$totalPage = ceil($totalRow / $pageSize);

$page = array("list" => $reslut, "pageNumber" => intval($pageNumber), "pageSize" => $pageSize, "totalPage" => $totalPage, "totalRow" => intval($totalRow));

render($page);

}

//执行查询数据库

function select($TABLE, $SQL)

{

$sql = sprintf("SELECT * FROM %s %s", $TABLE, AssembleSQL($SQL));

$db = $GLOBALS["MySQL"]->query($sql);

$reslut = $db->fetchAll(PDO::FETCH_ASSOC);

render($reslut);

}

//执行插入数据库

function insert($TABLE, $SQL)

{

$sql = sprintf("INSERT INTO %s %s", $TABLE, AssembleSQL($SQL));

$reslut = $GLOBALS["MySQL"]->exec($sql);

render($reslut);

}

//执行更新数据库

function update($TABLE, $SQL)

{

$sql = sprintf("UPDATE %s %s", $TABLE, AssembleSQL($SQL));

$reslut = $GLOBALS["MySQL"]->exec($sql);

render($reslut);

}

//执行删除数据库

function delete($TABLE, $SQL)

{

$sql = sprintf("DELETE FROM %s %s", $TABLE, AssembleSQL($SQL));

$reslut = $GLOBALS["MySQL"]->exec($sql);

render($reslut);

}

//视图

function render($reslut, $msg = null)

{

$GLOBALS["MySQL"] = null;

if (empty($msg)) {

die(json_encode($reslut));

} else {

die(json_encode($msg));

}

}

//判断表是否存在

function isTable($table)

{

$result = $GLOBALS["MySQL"]->query("SHOW TABLES LIKE '" . $table . "'")->fetchAll(PDO::FETCH_GROUP);

if ($result) {

return true;

} else {

return false;

}

}

HTTP代码

Test

Test Ajax POST Request


GET select


GET delete


GET update


GET insert


GET query

$(function () {

$("#but5").on("click", function () {

let URL = "http://127.0.0.1/index.php";

let param = { "query": "mock_data", "page": [1] };

$.post(URL, param, function (data) {

$("span").html(data);

})

})

$("#but4").on("click", function () {

let URL = "http://127.0.0.1/index.php";

let param = { "insert": "mock_data", "values": [{ "username": "james" }, { "email": "james@domain.com" }] };

$.post(URL, param, function (data) {

$("span").html(data);

})

})

$("#but3").on("click", function () {

let URL = "http://127.0.0.1/index.php";

let param = { "update": "mock_data", "set": [{ "username": "james" }, { "email": "james@domain.com" }], "where": [{ "id": "1" }] };

$.post(URL, param, function (data) {

$("span").html(data);

})

})

$("#but2").on("click", function () {

let URL = "http://127.0.0.1/index.php";

let param = { "delete": "mock_data", "where": [{ "id": "1" }] };

$.post(URL, param, function (data) {

$("span").html(data);

})

})

$("#but1").on("click", function () {

let URL = "http://127.0.0.1/index.php";

let param = { "select": "mock_data", "where": [{ "id": "2" }], "limit": [0, 1] };

$.post(URL, param, function (data) {

$("span").html(data);

})

})

})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哪个线程执行CompletableFuture的任务和回调?

尽管CompletableFuture大约是两年前&#xff08;&#xff01;&#xff09;于2014年3月在Java 8中引入的&#xff0c;但它仍然是一个相对较新的概念。但是&#xff0c;此类不是很广为人知是一件好事&#xff0c;因为它很容易被滥用&#xff0c;尤其是在线程和线程方面。一路涉及…

时区处理总结

我司业务分布在跨时区的多个国家&#xff0c;我在日常积累了较多的时区处理经验&#xff0c;在此分享一下 首先基本概念&#xff0c;时间分为2种 datetime&#xff0c;这是给人读的时间&#xff0c;分时区。如2000-1-1 12:00:00 gmttimestamp&#xff0c;这是unix时间戳&#x…

python彩色螺旋线_解决python彩色螺旋线绘制引发的问题

彩色螺旋线的绘制代码如下&#xff1a; import turtle import time turtle.pensize(2) turtle.bgcolor(black) colors [red, yellow, purple, blue] turtle.tracer(False) for x in range(400): turtle.forward(2*x) turtle.color(colors[x % 4]) turtle.left(91) turtle.trac…

matlab中的logspace,matlab中的logspace(a,b,n)究竟怎么理解,看下例题,谁能详细解给我看...

matlab中的logspace(a&#xff0c;b&#xff0c;n)究竟怎么理解&#xff0c;看下例题&#xff0c;谁能详细解给我看来源:互联网 宽屏版 评论2009-12-07 10:11:30分类: 教育/科学 >> 学习帮助问题描述:vec2logspace(0,10,6)的答案为什么是1.0e010 * 0.0000 0.0000 0.000…

ID3和C4.5分类决策树算法 - 数据挖掘算法(7)

&#xff08;2017-05-18 银河统计&#xff09;决策树(Decision Tree&#xff09;是在已知各种情况发生概率的基础上&#xff0c;通过构成决策树来判断其可行性的决策分析方法&#xff0c;是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干&#xff0c…

mysql 聚簇索引和非聚簇索引_图文并茂,说说MySQL索引

点击上方 小伟后端笔记 &#xff0c;选择 星标 公众号重磅资讯、干货&#xff0c;第一时间送达作者&#xff1a;小小木的博客来源&#xff1a;cnblogs.com/wyc1994666/p/10831039.html序开门见山&#xff0c;直接上图&#xff0c;下面的思维导图即是现在要讲的内容&#xff0c;…

mysql数据库日志截断,MySQL基础(十一):查询截取分析

下面是小凰凰的简介&#xff0c;看下吧&#xff01;&#x1f497;人生态度&#xff1a;珍惜时间&#xff0c;渴望学习&#xff0c;热爱音乐&#xff0c;把握命运&#xff0c;享受生活&#x1f497;学习技能&#xff1a;网络 -> 云计算运维 -> python全栈( 当前正在学习中…

component是什么接口_阿里高级技术专家:整洁的应用架构“长”什么样?

很多同学不止一次和我反馈&#xff0c;我们的系统很混乱&#xff0c;主要表现在&#xff1a;应用的层次结构混乱&#xff1a;不知道应用应该如何分层、应该包含哪些组件、组件之间的关系是什么&#xff1b;缺少规范的指导和约束&#xff1a;新加一段业务逻辑不知道放在什么地方…

php把1拆分成三份,【php】位运算如何拆分

举例&#xff0c;比如说下面可以组合成71|2|4; // 7那么比如我给一个15&#xff0c;怎么拆分成&#xff1a;1、2、4、8&#xff0c;或者是任意其他数&#xff0c;怎么进行拆分回答不熟悉php。可以先确定这个数占多少位&#xff0c;比如64或者32等。然后再左移位&#xff0c;按位…

20155202 实验四 Android开发基础

20155202 实验四 Android开发基础 实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android、组件、布局管理器的使用&#xff1b; 3&#xff0e;掌握Android中事件处理机制。 实验要求 第24章&#xff1a;初识Android任务一&#xff1a;完成Hello World…

死信队列和延迟队列_在实践中使用延迟队列

死信队列和延迟队列通常&#xff0c;在某些情况下&#xff0c;当您有某种工作或作业队列时&#xff0c;有必要不立即处理每个工作项或作业&#xff0c;而是要延迟一些时间。 例如&#xff0c;如果用户单击一个按钮来触发要完成的某项工作&#xff0c;而一秒钟后&#xff0c;用户…

python的代码在哪写_python代码在哪里编写

编写python代码&#xff0c;可以在自带的ide中写&#xff0c;也可以使用第三方编辑器&#xff0c;下面介绍几款常见的python IDE 1. VimVim 可以说是 Python 最好的 IDE。Vim 是高级文本编辑器&#xff0c;旨在提供实际的 Unix 编辑器‘Vi’功能&#xff0c;支持更多更完善的特…

nio框架中的多个Selector结构

随着并发数量的提高&#xff0c;传统nio框架采用一个Selector来支撑大量连接事件的管理和触发已经遇到瓶颈&#xff0c;因此现在各种nio框架的新版本都采用多个Selector并存的结构&#xff0c;由多个Selector均衡地去管理大量连接。这里以Mina和Grizzly的实现为例。 在Mina 2…

js 编码 php解码,浅谈php和js中json的编码和解码

php中1)编码$jsonStr json_encode($array)2)解码$arr json_decode($jsonStr)echo json_encode("中文", JSON_UNESCAPED_UNICODE);添加参数&#xff1a;JSON_UNESCAPED_UNICODE即可。测试环境&#xff1a;PHP Version 5.5.36js中1. 编码var str obj.toJSONString()…

如果您在2015年编写过Java代码-这是您不容错过的趋势

去年我们有机会遇到的最有趣趋势的实用概述 在这篇文章中&#xff0c;我们将回顾构成我们2015年对话的5个主题和新发展。与其他许多年终总结保持较高水平的不同&#xff0c;我们将做一个更实际的操作不用流行语 。 好吧&#xff0c;没有太多*流行语。 与往常一样&#xff0c;对…

mel滤波器组频率响应曲线_了解二阶滤波器的奈奎斯特图

在之前的文章中&#xff0c;我介绍了奈奎斯特图&#xff0c;然后我们通过检查奈奎斯特曲线和截止频率与一阶无源滤波器之间的关系&#xff0c;更详细地探索了这些类型的图。在本文中&#xff0c;我们将查看二阶滤波器的奈奎斯特图。二阶过滤器当我说“二阶”滤波器时&#xff0…

CJOJ 免费航班

Description 小Z在MOI比赛中获得了大奖&#xff0c;奖品是一张特殊的机 票。使用这张机票&#xff0c;可以在任意一个国家内的任意城市之间的免费飞行&#xff0c;只有跨国飞行时才会有额外的费用。小Z获得了一张地图&#xff0c;地图上有城市之间的飞机航班和 费用。已知从每个…

java perl5compiler,Java中正则表达式使用方法详解(四)

3.2 HTML处理实例一下面一个任务是分析HTML页面内FONT标记的所有属性。HTML页面内典型的FONT标记如下所示程序将按照如下形式&#xff0c;输出每一个FONT标记的属性在这种情况下&#xff0c;我建议你使用两个正则表达式。第一个如图十一所示&#xff0c;它从字体标记提取出“&q…

java 缓存接口,java项目中,针对缓存问题的处理方式【接口中的处理方式】

1、在service包中&#xff0c;分别建立了关于缓存的一系列的接口、类等&#xff0c;封装到一个工具包中&#xff1b;临时缓存的接口(代码部分)&#xff1a;packagecom.tools;importjava.util.Date;public interfaceCacheTemplet {//设置添加永久缓存,(缓存唯一索引&#xff0c;…

【hh】我胡汉三又回来了

hh 差不多半年没来机房了&#xff0c;高一的都已经碾压我100题了 开始得比较晚&#xff0c;估计比高一的早两三个月吧&#xff0c;停了这半年落下了不少。 但是没有关系啊&#xff0c;学OI纯粹是好玩嘛&#xff0c;一开始报名的时候根本不知道有联赛这回事&#xff08;其实报名…