• 一、校验规则
    • 1、消息头
    • 2、消息体 content
  • 二、返回格式
  • 三、接口开发
  • 四、接口调用(postman)
    • 1、正常返回
    • 2、异常返回
  • 五、exit()与die()的区别

一、校验规则

1、消息头

header的名字 header的值
method 接口名
token md5 (method(接口名)+secret(秘钥)+content(请求内容))

2、消息体 content

  • 要发送的json内容

二、返回格式

参数名 参数意思
code 1成功;0失败
data 返回的数据
message 异常消息提示

三、接口开发

<?php
namespace app\index\controller;class Abc{public function __construct() {header('Access-Control-Allow-Origin:*');    //跨域}private $secret = '12345678';    //秘钥public function test() {$data = file_get_contents('php://input');if (empty($data)){$this->error('请求内容不能为空');}self::safeCheck('test', $data);$data = json_decode($data, true);/*** TODO...*/$message = is_array($data) ? '您传入了一个数组' : '您传入了一个字符串';$this->success($message);}/*** 简单的安全验证* @param $method* @param $data*/public function safeCheck($method, $data) {$server = $_SERVER;$checkHeaders = ['method', 'token'];# 我们生成一个token,与header中的进行比对$token = md5($method . $this->secret . $data);# 开始校验数据$message = '';foreach ($checkHeaders as $value){$header = "HTTP_" . strtoupper($value);if (!isset($server[$header])) {$message = "header中 {$value} 必填";break;}$variable = $$value;if ($server[$header] != $variable) {$message = "header中 {$value} 校验失败";break;}}# $message不为空,说明校验失败if ($message) {$this->error($message);}}/*** 请求成功返回* @param string $message 提示信息* @param array $data 返回数据*/public function success($message = '处理成功', $data = []) {# $data为空时强转为object类型后,json_encode的值是{},不强转的话则是[],是否需要强转看实际情况$data = $data ? $data : (object)$data;$result = ['code' => 1,'message' => $message,'data' => $data];$result = json_encode($result, JSON_UNESCAPED_UNICODE); //JSON_UNESCAPED_UNICODE:中文字符串不转码//当PHP为脚本形式运行时,建议用exit()//当PHP为网站形式运行时,建议用die()//PHP接口其实就是相当于在浏览器访问一个地址,所以可以认为是网站形式,所以这里用die()die($result);}/*** 请求失败返回* @param $message 失败信息* @param array $data 返回数据*/public function error($message, $data = []) {# $data为空时强转为object类型后,json_encode的值是{},不强转的话则是[],是否需要强转看实际情况$data = $data ? $data : (object)$data;$result = ['code' => 0,'message' => $message,'data' => $data];$result = json_encode($result, JSON_UNESCAPED_UNICODE); //JSON_UNESCAPED_UNICODE:中文字符串不转码echo $result;exit();//或者echo $result;die();//或者exit($result);//或者die($result);}}

四、接口调用(postman)

1、正常返回

  • 设置 Headers
  • 设置 Body

2、异常返回

  • 校验 Headers 参数是否存在
  • 校验 Headers 参数是否正确

五、exit()与die()的区别

  • 1、两者只是别名关系,除此之外完全一样。
  • 2、exit(123);die(1) 打印为空
  • 3、PHP exit()与die()的区别
  • 4、PHP 接口中echo die和return的区别

PHP 编写接口并在header中进行简单的校验相关推荐

  1. php调用接口及编写接口

    在这里openUser.php相当于一个接口,其中get_user_list 是一个API(获取用户列表),讲求返回的数据类型为JSON格式. 你只需要在你PHP代码中执行这条链接他就会返回. GET ...

  2. api 接口开发理论 在php中调用接口以及编写接口

    如: http://localhost/openUser.php?act=get_user_list&type=json 在这里openUser.php相当于一个接口,其中get_user_l ...

  3. 调用feign接口时,如何往header中添加参数

    Controller接收到请求后,我们可以在service中通过feign直接调用其它服务的接口,但是,controller接收到的请求和通过feign调用其它服务,其它服务接收到的请求,是不一样的. ...

  4. 在php中调用接口以及编写接口

    如: http://localhost/openUser.php?act=get_user_list&type=json 在这里openUser.php相当于一个接口,其中get_user_l ...

  5. postman登录获取token,接口header中添加token发送请求

    [Postman]登录获取token,接口header中添加token发送请求 说明 开始 说明 该文章只是用于记录,防止自己忘记. 开始 1.准备登录接口 2.添加全局变量 3.添加一个登录接口,登 ...

  6. linux 进程间通信 dbus-glib【实例】详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  7. Mybatis工作流程,附带mybatis的mapper文件和config配置文件模板。mapper文件和dao接口的关系——xml中的namespace和sql标签id命名要求。

    1. Mybatis工作流程 1.1 使用MySQL创建数据库girls并生成一个表boys,如下图. 1.2 创建该表对应的简单实体类Boys,如下图. 1.3 创建Dao接口以及和接口同名的map ...

  8. ext.ajax.request跨域,跨域Ajax访问header中 x-requested-with丢失

    前端调用后端接口,本域情况下,ajax方式调用,request header中包含x-requested-with信息. 跨域情况下,request header中不再包含x-requested-wi ...

  9. 作为Java开发工程师,如何高效优雅地编写接口文档

    作为一名优秀的Java开发工程师,编写接口文档向来是一件很头疼的事情.本来就被bug纠缠的很累了,你还让我干这? 其实,你可以试试ApiPost. ApiPost的定位是Postman+Swagger ...

  10. SpringCloud工作笔记048---RESTful API 中 HTTP 状态码的定义_以及把RESTFul版本号_放到http协议header中_以及RestFul设计时的两个误区

    JAVA技术交流QQ群:170933152 ------------------------- RESTful架构有一些典型的设计误区. 最常见的一种设计错误,就是URI包含动词.因为"资源 ...

最新文章

  1. Ubuntu 18.04 配置 国内 apt-get 换源
  2. 如何安装fedora13的显卡驱动
  3. 人工智能实践:TensorFlow笔记学习(二)—— Python语法串讲
  4. Intel RealSense 数码相机和摄像机的ISO是什么意思?
  5. python类库32[多进程同步Lock+Semaphore+Event]
  6. 几种开发时安全验证的实现
  7. 七年级上册计算机工作计划,清华大学版信息技术七年级上册学期教学工作计划...
  8. 天人短文网站系统v5.53源码
  9. 《Java核心技术卷一》读书笔记(二)
  10. 统计学系方法4.1补充理解
  11. CentOS7 VMware虚拟机克隆 网卡无法启动问题解决
  12. php,tp5关键词,分词模糊查询并根据查询条件排序
  13. 工作篇 之 解决谷歌地图与 NestedScrollView 滑动冲突
  14. hive之full outer join(全连接)使用方法
  15. 洛谷 P1456 Monkey King 题解
  16. 用于大数据的星际文件系统
  17. [供应链•案例篇] 天能集团:解读电池制造龙头实现盈利断层第一的关键
  18. 金山快盘——大家来注册吧
  19. TI毫米波雷达AWR1642测试
  20. 智慧新高度:华为发布华为Mate 20系列

热门文章

  1. stm32串口传输数据第一个数据被吞_STM32串口发送第一个字符丢失解决之道
  2. 机器学习与知识发现_如何使用无监督机器学习来发现隐藏的科学知识?
  3. 虚拟机设计与实现:以jvm为例 pdf_Java虚拟机:Jvm概念和原理详解以及GC机制的分析...
  4. 欧几里得算法、扩展欧几里得算法、求逆元、中国剩余定理、扩展中国剩余定理
  5. 空头平仓什么意思_什么是白糖期货期权仿真交易套利机会?
  6. hdu1864--dp
  7. java8 时间加一秒_好好讲讲关于Java中的时间处理
  8. 比赛排行榜如何在LED大屏上实现自动实时滚动播报?
  9. AutoCAD2008换硬盘后重新激活
  10. Chrome插件英雄榜(第二期)