php 数据接口,初识 php 接口

这次的这篇文章介绍的是PHP接口的内容,现在分享给大家,也给有需要帮助的朋友一个参考,大家一起过来看一看吧

一. 接口按请求人可以分为两种:

一种是被其他内部项目调用的接口(包括js异步请求的接口和定时程序)。

另一种是对外的接口,主要提供给外部开发者调用的。

两种接口最大区别就是,内部接口不需要太严格的身份验证,而对外接口需要严格的身份验证,加密解密方式各种各样,其中最常见最简单的就是http basic验证,例如我们的大后台弹出的账号和密码弹窗 就是用了basic验证,输入账号和密码才能通过验证。但是如果内部接口涉及到重要的操作,不希望被他人恶意请求的话,还是要做一点加密验证的。

二. 无论是哪一种接口,都应该考虑到下面的问题:

1.安全。参数安全:这个我们有$_INPUT基本就足够了。是否需要身份验证:如果只是内部通知类/回调类的接口的话就算被恶意请求也不会影响数据正常,这种的话可以完全不做验证,举个栗子,我做个一个同步订单状态的接口,里面的流程是,查询订单状态有问题的订单,然后更新这些订单的状态。这种接口不需要返回任何值,就算被坏人恶意调用也不会有毛线影响的,那就根本没必要做身份验证了。所以这个是否加验证是按照接口实际逻辑决定的。

2.能否重复请求。例如某个接口是根据传入的订单号,插入一条数据,需要做好重复请求的判断,避免插入多条数据。

三. 编写接口规范

1. 用 try…catch…结构去写。(主要是 throw 可以随时结束程序,这样很爽~)

2. 返回状态码,不要返回success等于true或者false,如果要编写文档,关于不同错误码的含义也应该写明白,方便调用方查询出错原因。

下面直接看栗子:<?php

$code = 200; // 接口状态码

$name = trim($_INPUT['name']); $age = trim($_INPUT['age']); if (empty($name))

{ $code = 401; throw new Exception('名字不能为空');

} if (!is_numeric($age))

{ $code = 402; throw new Exception('年龄必须由数字组成');

} $database_obj = new database_class(); $res = $database_obj->save($name, $age); if ( !$res )

{ $code = 403; throw new Exception('保存数据失败');

}

$msg = 'ok';

} catch ( Exception $e ) { $msg = $e->getMessage();

}

output_json($code,$data,$msg); // $data可以放置需要返回的数据// output_json函数在大function里面有~如果不想引入大function的话可以复制一份到自己项目// ========END=======?>

转载自:https://www.cnblogs.com/xiaomendelu/p/5819708.html

一. 接口按请求人可以分为两种:

一种是被其他内部项目调用的接口(包括js异步请求的接口和定时程序)。

另一种是对外的接口,主要提供给外部开发者调用的。

两种接口最大区别就是,内部接口不需要太严格的身份验证,而对外接口需要严格的身份验证,加密解密方式各种各样,其中最常见最简单的就是http basic验证,例如我们的大后台弹出的账号和密码弹窗 就是用了basic验证,输入账号和密码才能通过验证。但是如果内部接口涉及到重要的操作,不希望被他人恶意请求的话,还是要做一点加密验证的。

二. 无论是哪一种接口,都应该考虑到下面的问题:

1.安全。参数安全:这个我们有$_INPUT基本就足够了。是否需要身份验证:如果只是内部通知类/回调类的接口的话就算被恶意请求也不会影响数据正常,这种的话可以完全不做验证,举个栗子,我做个一个同步订单状态的接口,里面的流程是,查询订单状态有问题的订单,然后更新这些订单的状态。这种接口不需要返回任何值,就算被坏人恶意调用也不会有毛线影响的,那就根本没必要做身份验证了。所以这个是否加验证是按照接口实际逻辑决定的。

2.能否重复请求。例如某个接口是根据传入的订单号,插入一条数据,需要做好重复请求的判断,避免插入多条数据。

三. 编写接口规范

1. 用 try…catch…结构去写。(主要是 throw 可以随时结束程序,这样很爽~)

2. 返回状态码,不要返回success等于true或者false,如果要编写文档,关于不同错误码的含义也应该写明白,方便调用方查询出错原因。

下面直接看栗子:<?php

$code = 200; // 接口状态码

$name = trim($_INPUT['name']); $age = trim($_INPUT['age']); if (empty($name))

{ $code = 401; throw new Exception('名字不能为空');

} if (!is_numeric($age))

{ $code = 402; throw new Exception('年龄必须由数字组成');

} $database_obj = new database_class(); $res = $database_obj->save($name, $age); if ( !$res )

{ $code = 403; throw new Exception('保存数据失败');

}

$msg = 'ok';

} catch ( Exception $e ) { $msg = $e->getMessage();

}

output_json($code,$data,$msg); // $data可以放置需要返回的数据// output_json函数在大function里面有~如果不想引入大function的话可以复制一份到自己项目// ========END=======?>

相关推荐:

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

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

相关文章

SYSU每周一赛(13.03.16)1003

给定起点终点的无向图&#xff0c;出发时速度为1&#xff0c;到达时速度也为1&#xff0c;在每个点可以进行速度1&#xff0c;不变&#xff0c;-1的操作&#xff0c;在每条边都有限速&#xff0c;到达一城市后不能直接走反向边&#xff0c;求最短时间。 SPFA作松弛操作的典型例…

LeetCode MySQL 1132. 报告的记录 II

文章目录1. 题目2. 解题1. 题目 动作表&#xff1a; Actions ------------------------ | Column Name | Type | ------------------------ | user_id | int | | post_id | int | | action_date | date | | action | enum | | extra…

java封装省市区三级json格式,微信开发 使用picker封装省市区三级联动模板

目前学习小程序更多的是看看能否二次封装其它组件&#xff0c;利于以后能快速开发各种小程序应用。目前发现picker的selector模式只有一级下拉&#xff0c;那么我们是否可以通过3个picker来实现三级联动模板的形式来引入其它页面中呢&#xff1f;答案是肯定可以的。那么我的思路…

LeetCode MySQL 1126. 查询活跃业务

文章目录1. 题目2. 解题1. 题目 事件表&#xff1a;Events ------------------------ | Column Name | Type | ------------------------ | business_id | int | | event_type | varchar | | occurences | int | ------------------------ 此表的主键是…

php linux 删除文件夹,linux下如何删除文件夹

linux下删除文件夹的方法&#xff1a;可以使用【rm -rf 目录名】命令进行删除&#xff0c;如【rm -rf /var/log/httpd/access】&#xff0c;表示删除/var/log/httpd/access目录及其下的所有文件、文件夹。直接rm就可以了&#xff0c;不过要加两个参数-rf 即&#xff1a;rm -rf …

Too many fragmentation in LMT?

这周和同事讨论技术问题时&#xff0c;他告诉我客户的一套11.1.0.6的数据库中某个本地管理表空间上存在大量的Extents Fragment区间碎片&#xff0c;这些连续的Extents没有正常合并为一个大的Extent&#xff0c;他怀疑这是由于11.1.0.6上的bug造成了LMT上存在大量碎片。 同事判…

LeetCode 1533. Find the Index of the Large Integer(二分查找)

文章目录1. 题目2. 解题1. 题目 We have an integer array arr, where all the integers in arr are equal except for one integer which is larger than the rest of the integers. You will not be given direct access to the array, instead, you will have an API Array…

java先抽到红球获胜,【图片】红蓝球概率问题,通过程序模拟抽取,计算结果已出,有兴趣来看【非现役文职吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我用的c语言&#xff0c;大一学的还没忘完。。。。程序非常简单&#xff0c;就是生成随机数&#xff0c;然后根据随机数的结果进行计数就好了。代码贴下面&#xff0c;有兴趣的可以看看。懂行的请不要喷我写的烂。。。。。毕竟不是…

MySQL Server Architecture

MySQL 服务器架构&#xff1a; 转载于:https://www.cnblogs.com/macleanoracle/archive/2013/03/19/2968212.html

LeetCode MySQL 1479. 周内每天的销售情况(dayname星期几)

文章目录1. 题目2. 解题1. 题目 表&#xff1a;Orders ------------------------ | Column Name | Type | ------------------------ | order_id | int | | customer_id | int | | order_date | date | | item_id | varchar | | quantity …

php的swoole教程,PHP + Swoole2.0 初体验(swoole入门教程)

PHP Swoole2.0 初体验(swoole入门教程)环境&#xff1a;centos7 PHP7.1 swoole2.0准备工作&#xff1a;一、 swoole 扩展安装1 、下载swoolecd/usr/localwget -c https://github.com/swoole/swoole-src/archive/v2.0.8.tar.gztar -zxvf v2.0.8.tar.gzcdswoole-src-2.0.8/2 编…

Git常用命令解说

http://zensheno.blog.51cto.com/2712776/490748 1. Git概念 1.1. Git库中由三部分组成 Git 仓库就是那个.git 目录&#xff0c;其中存放的是我们所提交的文档索引内容&#xff0c;Git 可基于文档索引内容对其所管理的文档进行内容追踪&#xff0c;从而实现文档的版本控…

LeetCode MySQL 1412. 查找成绩处于中游的学生

文章目录1. 题目2. 解题1. 题目 表: Student ------------------------------ | Column Name | Type | ------------------------------ | student_id | int | | student_name | varchar | ------------------------------ student_id 是该表…

java jvm目录,JVM(Java虚拟机)中过程工作目录讲解

JVM(Java虚拟机)中进程工作目录讲解每次我们用Java命令运行我们的Java程序&#xff0c;都会在JVM中开启一个进程&#xff0c;对于每一个进程&#xff0c;都会有一个相对应的工作目录&#xff0c;这个工作目录在虚拟机初始化的时候就已经设置好了&#xff0c;默认的情况下&#…

Javascript 第七天 笔记

通过三天把以前学习的内容复习一下。以便继续学习。 BOM模型 BOM浏览器对象模型 DOM ----> document BOM -----> window Document对象其实是window的一个属性或叫子对象 Window对象的子对象介绍 Window.navigator : 表示浏览器的相关信息 Window.history : 历史记录,或者…

LeetCode MySQL 618. 学生地理信息报告(row_number)

文章目录1. 题目2. 解题1. 题目 一所美国大学有来自亚洲、欧洲和美洲的学生&#xff0c;他们的地理信息存放在如下 student 表中。 | name | continent | |--------|-----------| | Jack | America | | Pascal | Europe | | Xi | Asia | | Jane | Americ…

java非必填字段跳过校验,avalon2表单验证,非必填字段在不填写的时候不能通过验证...

avalon2表单验证,非必填字段在不填写的时候不能通过验证代码var vm avalon.define({$id: "validate1",aaa : "",validate: {onError: function(reasons) {reasons.forEach(function(reason) {console.log(reason.getMessage())})},onValidateAll: functio…

jQuery心得5--jQuery深入了解串讲1

1.CSS-DOM 操作 获取和设置元素的样式属性: css()。 获取和设置元素透明度: opacity 属性(css 的一个属性)。 获取和设置元素高度, 宽度: height(), width(). 在设置值时, 若只传递数字, 则默认单位是 px. 如需要使用其他单位则需传递一个字符串, 例如 $(“p:first”).height(“…

LeetCode MySQL 1225. 报告系统状态的连续日期(date_sub + over)

文章目录1. 题目2. 解题1. 题目 Table: Failed ----------------------- | Column Name | Type | ----------------------- | fail_date | date | ----------------------- 该表主键为 fail_date。 该表包含失败任务的天数.Table: Succeeded --------------------…

mysql tableveiw与表格,javafx将数据库内容输出到tableview表格

一 、创建Fxml文件&#xff0c;用Javafx Scene Builder 编辑页面&#xff0c;创建tableview(表格)和tablecolum(表格中的列)&#xff0c;并为其设置fxid&#xff1b;二、生成fxml文件的控制类&#xff1b;三、创建数据库的连接类(使用JDBC驱动)&#xff1b;Connect.javaimportj…