PHP:写接口与接口的调用(完整版,封装公共方法)

devtools/2025/1/18 14:12:25/

说明:绑定的资源详细展示了两个项目的接口、接口调用的实现,已经数据库的连接,目录展示更加一目了然,有需要可以下载资源,实际文章已经描述的很详细了

一、A页面-发送请求页面

1、说明

  • 发送请求部分,去调用接口的部分(语言不限,这里使用php
  • 这里使用提交按钮发送请求
  • 初始数据为对象,通过json进行发送
  • 必要数据:接口的url;接口方提供的AccessKeyId,AccessKeySecret(可生成随机数,只要请求接口方和接口方对应便可发送请求;请求的参数
  • 通过cURL完成请求

2、代码

php"><!-- 这里是获取调用数据 --><?php
//连接数据库
require_once 'get_db_conn.php';
$conn = db_connect();
//提交表单
if (isset($_POST['Save'])) {//传入api $url = 'http://localhost/apireceive/api/receive.php';//请求头$headers = array('Content-Type: application/json','AccessKeyId: 1XTAJKZSK02KMSZW47D2LSFQMMUV3LST','AccessKeySecret: VS7EGQTB2CGWZXREL3QT3V72ZSRPYSXB');//请求参数$json_data = '{"require1": "测试","require2": "value2","test3": "value3"}';// 初始化cURL会话$ch = curl_init();// 设置cURL选项// 设置了请求的目标URLcurl_setopt($ch, CURLOPT_URL, $url);// 发出一个POST请求curl_setopt($ch, CURLOPT_POST, true);// 设置HTTP请求头信息curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);// curl_exec()函数会将获取到的数据以字符串形式返回,而非直接输出到浏览器或标准输出。curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);// 设置POST请求的主体数据。这里$json_data是一个JSON格式的字符串,它会被作为POST请求的数据部分发送给服务器。curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);// 在进行HTTPS连接时是否验证服务器的SSL证书,设置为false意味着cURL在连接时将跳过SSL证书验证过程curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 执行cURL请求$response = curl_exec($ch);// 检查cURL执行是否成功if (curl_errno($ch)) {echo 'Error:' . curl_error($ch);} else {// 处理响应数据$result = json_decode($response, true);// 根据API返回的数据进行后续操作...echo json_encode($result); // 使用print_r()函数打印返回的数据以便于调试和查看}// 关闭cURL会话curl_close($ch);
}?>
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8'); ?>" method="POST" enctype="multipart/form-data"><div class="centre"><input type="submit" name="Save" value="提交"></div></form>
</body>
</html>

二、B页面-接口页面

1、说明

  • 调用公共方法,验证头信息正确性以及必填项是否
  • 提供必填参数,传递给公共方法进行验证
  • 获取解析后的参数,进行赋值
  • 执行数据库操作
  • 将请求的结果返回给A页面

2、代码

php"><?php
// 连接数据库
require_once '../get_db_conn.php';
$conn = db_connect();// 引入公共代码库
require_once 'common.php';// 定义必需的参数
$required_params = ['require1', 'require2'];
// $required_params = [];// 处理请求并获取解析后的数据
$input_data = Common::handleRequest($required_params);// 使用请求参数执行业务逻辑
$require1 = $input_data['require1'];
$require2 = $input_data['require2'];
$test3 = $input_data['test3'] ? $input_data['test3']: null; // 可选参数// 调用方法查询数据
// $data = fun_select($require1, $require2, $test3, $conn);
$sql_select = "SELECT * FROM customers WHERE customer_name = '".$require1."'";
$result_select = mysqli_query($conn, $sql_select);if ($result_select) {$data = [];while ($row = mysqli_fetch_assoc($result_select)) {$data[] = $row;}
} else {echo "SQL查询执行失败: " . mysqli_error($conn);return [];
}// 返回成功响应
http_response_code(200);
echo json_encode(['data' => $data, 'msg' => 'success']);
?>

三、B页面-公共方法页面

1、说明

  • 封装B页面接收A页面的公共方法
  • 检测A页面发送请求时传递的头信息,主要是检测AccessKeyId和AccessKeySecret是否和设定的一致
  • 检测必填项是否填写
  • 解析A页面传递的参数,直接供B页面使用

2、代码

php"><?php
// Common.phpclass Common {// 验证AccessKeyId和AccessKeySecretpublic static function validateAccessKeys($key_id, $key_secret) {// 实现验证逻辑,如果验证通过则返回true,否则返回falseif ($key_id == '1XTAJKZSK02KMSZW47D2LSFQMMUV3LST' && $key_secret == 'VS7EGQTB2CGWZXREL3QT3V72ZSRPYSXB') {return true;}return false;}// 检查请求方法和Content-Typepublic static function checkRequestMethodAndContentType() {if ($_SERVER['REQUEST_METHOD'] != 'POST') {http_response_code(405);echo json_encode(['error' => 'Method Not Allowed']);exit;}$content_type = isset($_SERVER['CONTENT_TYPE']) ? $_SERVER['CONTENT_TYPE'] : '';if (stripos($content_type, 'application/json') !== 0) {http_response_code(415);echo json_encode(['error' => 'Unsupported Media Type']);exit;}}// 获取并解析请求体中的JSON数据public static function getJsonRequestBody() {$input_json = file_get_contents('php://input');$input_data = json_decode($input_json, true);return $input_data;}// 检查请求体中是否有必需的参数public static function checkRequiredParameters($input_data, $required_params) {foreach ($required_params as $param) {if (!isset($input_data[$param])) {http_response_code(400);echo json_encode(['error' => 'Invalid Request Body']);exit;}}}// 处理API请求的入口方法public static function handleRequest($required_params) {// 设置响应头header('Content-Type: application/json');// 验证AccessKey$access_key_id = isset($_SERVER['HTTP_ACCESSKEYID']) ? $_SERVER['HTTP_ACCESSKEYID'] : '';$access_key_secret_provided = isset($_SERVER['HTTP_ACCESSKEYSECRET']) ? $_SERVER['HTTP_ACCESSKEYSECRET'] : '';if (!self::validateAccessKeys($access_key_id, $access_key_secret_provided)) {http_response_code(401);echo json_encode(['error' => 'Unauthorized']);exit;}// 检查请求方法和Content-Typeself::checkRequestMethodAndContentType();// 获取并解析请求体中的JSON数据$input_data = self::getJsonRequestBody();// 检查请求体中是否有必需的参数self::checkRequiredParameters($input_data, $required_params);// 返回解析后的请求数据return $input_data;}
}
?>

四、未封装请求参考路径

​​​​​​​PHP:接口请求与被请求_php 请求接口-CSDN博客


http://www.ppmy.cn/devtools/151578.html

相关文章

如何将原来使用cmakelist编译的qt工程转换为可使用Visual Studio编译的项目

将原来使用CMakeLists.txt编译的Qt工程转换为可使用Visual Studio编译的项目&#xff0c;可以通过以下步骤实现&#xff1a; 一、准备阶段 安装必要的软件&#xff1a; 确保已安装Visual Studio&#xff0c;并选择了C开发相关的组件。安装CMake&#xff0c;并确保其版本与Qt和…

初学者如何用 Python 写第一个爬虫?

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

.NET MAUI进行UDP通信

.NET MAUI是一个开源的跨平台框架库。NET&#xff0c;使创建丰富、现代的用户界面变得容易,.NET MAUI提供了一个多平台应用程序UI。我们可以使用.NET MAUI&#xff0c;用于使用C#和XAML创建本地移动和桌面应用程序。它还支持XAML热重载&#xff0c;这意味着我们可以在运行时编辑…

赛灵思(Xilinx)公司Artix-7系列FPGA

苦难从不值得歌颂&#xff0c;在苦难中萃取的坚韧才值得珍视&#xff1b; 痛苦同样不必美化&#xff0c;从痛苦中开掘出希望才是壮举。 没有人是绝对意义的主角&#xff0c; 但每个人又都是自己生活剧本里的英雄。滑雪&#xff0c;是姿态优雅的“贴地飞行”&#xff0c;也有着成…

使用 ChatGPT 生成和改进你的论文

文章目录 零、前言一、操作引导二、 生成段落或文章片段三、重写段落四、扩展内容五、生成大纲内容六、提高清晰度和精准度七、解决特定的写作挑战八、感受 零、前言 我是虚竹哥&#xff0c;目标是带十万人玩转ChatGPT。 ChatGPT 是一个非常有用的工具&#xff0c;可以帮助你…

QT开发技术 【基于TinyXml2的对类进行序列化和反序列化】 二

一、对上一篇进行优化和进一步完善 二、增加序列化器类 需要序列化的类继承该类进行操作 class CXmlSerializer { public:CXmlSerializer() default;virtual ~CXmlSerializer() default;bool Serialize(std::string& strXml);bool Deserialize(const std::string&…

如何攻击一个服务器(仅用于教育及娱乐实验目的)

import socket import osdef create_virus():# 创建一个简单的病毒脚本&#xff0c;它会不断尝试连接目标服务器并发送恶意数据virus_code """ import socket import time import threadingdef attack_server(ip, port):while True:try:s socket.socket(socke…

从入门到深入:Spring 框架全解析

Spring 的核心模块 Spring 框架由多个模块组成&#xff0c;每个模块提供特定的功能。这些模块可以单独使用&#xff0c;也可以组合在一起满足各种应用场景。 Spring Core Spring Core 模块是框架的核心&#xff0c;支持依赖注入和 IOC&#xff08;Inversion of Control&#x…