这次的这篇文章介绍的是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=======?>

相关推荐:

php 数据接口,初识 php 接口相关推荐

  1. python接口自动化参数化_Python读取txt文件数据的方法(用于接口自动化参数化数据)...

    小试牛刀: 1.需要python如何读取文件 2.需要python操作list 3.需要使用split()对字符串进行分割 代码运行截图 : 代码(copy) #encoding=utf-8 #1.r ...

  2. postman参数化--上一个接口返回的数据作为下一个接口的参数

    postman是测试接口经常使用的工具,它是一个很强大的工具.那么在测试中若是存在接口依赖的现象改怎么测试呢? 在使用postman做接口测试的时候,在多个接口的测试中,如果需要上一个接口的返回值作为 ...

  3. Activity之间的数据传递—实现Parcelable接口

    一.单向传递数据和接收 1.可以传递数据类型 传递基本数据类型.字符串和对应的数组 传递Bundle(类似HashMap) 传递对象数据 传递Integer集合.String集合和parcelable ...

  4. 淘宝关键词搜索商品接口分析商品价格走势(商品列表接口,商品销量接口,商品价格接口,分类ID采集商品数据接口)接口代码对接教程

    淘宝关键词搜索商品接口分析商品价格走势(商品列表接口,商品销量接口,商品价格接口,分类ID采集商品数据接口)接口代码对接教程如下: 1.公共参数 名称 类型 必须 描述(接口教程wx199701080 ...

  5. 淘宝关键词搜索采集商品价格销量接口分析商品价格走势(商品列表接口,商品销量接口,商品价格接口,分类ID采集精准商品数据接口)接口代码对接流程

    淘宝关键词搜索采集商品价格销量接口分析商品价格走势(商品列表接口,商品销量接口,商品价格接口,分类ID采集精准商品数据接口)接口代码对接流程如下: 1.公共参数 名称 类型 必须 描述(接口代码教程w ...

  6. taobao.trades.sold.get-查询卖家已卖出的交易数据(根据创建时间),淘宝店铺卖出订单查询API接口,R2接口,oAuth2.0交易接口代码分享

    一.taobao.trades.sold.get-查询卖家已卖出的交易数据(根据创建时间),淘宝店铺卖出订单查询API接口,R2接口,oAuth2.0交易接口代码分享 搜索当前会话用户作为卖家已卖出的 ...

  7. 淘宝H5商品详情数据解析接口sign算法接口代码教程

    淘宝H5商品详情数据解析接口sign算法接口代码教程如下: 1.公共参数 名称 类型 必须 描述(接口代码教程wx19970108018) key String 是 调用key(必须以GET方式拼接在 ...

  8. 一天上手Aurora 8B/10B IP核(2)----Aurora概述及数据接口(Framing接口、Streaming接口)

    写在前面 系列汇总:一天上手Aurora 8B/10B IP核----汇总篇(直达链接) 1.Aurora 8B/10B 协议 Aurora 协议是一个用于在点对点串行链路间移动数据的可扩展轻量级链路 ...

  9. 天行数据的开放API接口

    天行数据的开放API接口: 接口名称 链接 简介 微信链接转换 https://www.tianapi.com/apiview/89 将临时链接转为永久链接 查询微信全文 https://www.ti ...

最新文章

  1. 我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承...
  2. 利用 :placeholder-shown 选择器实现 label 浮动效果
  3. NeurIPS 2021 | 通过寻找平坦最小值,克服小样本增量学习中的灾难性遗忘
  4. C语言3中方法判断32还是64位机
  5. 动态规划算法入门---java版
  6. java中nextLine(),读取换行符的解决
  7. 一步步编写操作系统 15 CPU与外设通信——IO接口,下
  8. java中map如何实现遍历_Java中如何遍历Map对象的4种方法
  9. Oracle 实用技巧
  10. IDEA中注释代码,注释符如何不显示在行首
  11. linux 升级内核为4.10,Linux Kernel 4.10.4 发布下载
  12. NewSQL登堂入室 数据库厂商掘金行业大数据
  13. es6异步编程 Promise 讲解 --------各个优点缺点总结
  14. 【ROS】launch文件详解
  15. redis存储新闻列表_聊聊Redis使用场景
  16. MongoDB:常见的面试题和答案
  17. JavaScript正则表达式给html字符串的img标签增加style样式
  18. 最小二乘擬合matlab,存在已知协方差情况下的最小二乘解
  19. 2021年度关键词-ICT网络基础设施建设
  20. 无锡农商行王宗:敏态转型,实现科技引领业务的华丽转身

热门文章

  1. spring AspectJ的Execution表达式
  2. Javascript中NaN、null和undefinded的区别
  3. PHP list的赋值
  4. js中的四舍五入函数
  5. ubuntu命令行登录
  6. MySQL索引的一些问题
  7. 从没想过会有一个这样的机会|大疆招聘
  8. 2021 年 Linux 界的 12 件大事
  9. 使用valgrind检测内存问题
  10. 卷积神经网络(基础篇)