php接口开发形式,Thinkphp5实现接口开发_米佗耶目的博客-程序员宝宝

技术标签: php接口开发形式  

Thinkphp5实现接口开发

2018-06-16

0

Thinkphp5系列教程

时隔2个月,由于工作的事情太忙抽不出空,年底前的计划就是再出一套API接口开发的教程,上一篇教程主要讲的是开发一个简单的博客系统.此套教程我决定来说一下api接口开发.本套教程会围绕下面几个知识点做一个开发

这篇文章是17年底完成的.其中演示代码大量使用Db类来直接操作数据库.是一种不好的写好.我会在之后的文章来说明。经过半年的精进,在回过头看之前写的代码.很多瑕疵.

这套教程围绕的几个点:

本套教程的目录如下:

[TOC]

如何用PHP开发API接口

做过 API 的人应该了解,其实开发 API 比开发 WEB 更简洁,但可能逻辑更复杂,因为 API 其实就是数据输出,不用呈现页面,所以也就不存在 MVC(API 只有 M 和 C)

1、和 WEB 开发一样,首先需要一些相关的参数,这些参数,都会由客户端传过来,也许是 GET 也许是 POST,这个需要开发团队相互之间约定好,或者制定统一规范。

2、有了参数,根据应用需求,完成数据处理,例如:任务进度更新、APP内购、一局游戏结束数据提交等等

3、数据逻辑处理完之后,返回客户端所需要用到的相关数据,例如:任务状态、内购结果、玩家信息等等

数据怎么返给客户端?

直接输出的形式,如:JSON、xml、TEXT 等等。

4、客户端获取到你返回的数据后,在客户端本地和用户进行交互

什么是接口?接口用来做什么?

接口通过上面的简单介绍,可以理解为API就是就是通道,负责一个程序和其他软件的沟通,本质是预先定义的函数。

接口将数据给客户端,由客户端渲染在页面上,大部分的逻辑都是在服务端进行判断和验证.客户端只需要管请求API的这个人有没有权限?

那我们如何验证请求这个API是否有权限.这个时候就需要了解 token 验证的思想。

什么是OAuth?

OAuth是一个授权的标准,目前最新的版本是2.0

那什么是 OAuth呢?我们举个栗子~

有一个网站提供了一个url接口,这个接口我们只给通过认证的用户的使用。给出 了这样一条接口:http://www.xxx.com/api.php?username=admin&password=admin

很容易就会发现暴露出来的几点问题!

这条API一但被其他人知道,就容易被无限制的盗刷,无法控制这个接口的使用时间,而且通过地址传输的是明文很不安全。

那如何能避免这种问题呢?

我们可以设置一个授权层,用户不能直接通过账号密码去登录,只能通过授权层来获取一个 令牌(Token) , 通过获取的Token来与我们服务端进行其他接口的验证.

如何实现授权层,完成Token的生成及其验证

我们来想一想,用户什么时候获取Token?什么时候需要Token呢?

在第一次访问接口的时候 我们不可能平白无故的捏造出一个Token.我们需要在用户请求登录接口成功后返回一个Token,Token里保存了用户的信息

咦.这和我们开发混排的web站的时候一样啊.登录成功将信息存入Session,我们参考一下之前的代码

此时我们只需要改写 else部分的代码!

将存入session的代码 改成存入数据库或者缓存系统的代码即可.我们将Key返回给用户即可,下次请求的时候 用户根据这个Key查询它的Value,获取用户信息进行操作.

那么来了一个问题!为什么不能继续存入Session了.

session是基于cookie的,cookie是由浏览器来接受处理的,当然听App端的小伙伴说App也可以处理Cookie,但是没有Token运用的稳定.

现在我们改写代码,改成下面样子:

通过两个代码对比发现:

缺少了View的部分,直接将数据转为Json格式返回给客户端.

原本的Session存储变为了Cache存储.

通过这个登录的小栗子,希望大家能了解什么是接口.后面的课程会更加精彩!

Restful Api思想

网络应用程序,随着时代的变迁.之前的网页都是前后端混排的.

现在随着前端设备层出不穷,为了统一接口 于是便有了Restful Api

这套规范总结: 就是用URL定位资源,用HTTP描述操作。

那如何理解这段话呢?

我们通过一个小栗子实现。我们要做一个相册的功能 那如何用Restful定义url

动作

URI

行为

GET

/photos

显示相册内容列表

GET

/photos/create

相片上传页面

POST

/photos

上传相片操作

GET

/photos/{id}

通过ID查看相片

GET

/photos/{id}/edit

通过ID编辑相片页面

PUT/PATCH

/photos/{id}

通过ID上传相片操作

DELETE

/photos/{id}

通过ID删除相片

通过上面定义路由的方式就是Restful 思想。

API开发- 让异常显示的更加优雅

作为程序员难免会出点小BUG!哪如何捕获呢。在APP上出现bug通常会出现闪退,和无法解析错误一直加载.

有一个想法。将错误也变成json格式.code码定义为500 如果移动端发现错误为500的话 就温柔提醒.并且服务端保存错误信息.供开发者修改.

首先修改配置项 application/config.php

原本是留空的 现在改为我们自定义的控制器

创建一个Http控制器 继承thinkexceptionHandle类 重写 render方法. 这里注意一点 最好不要用框架里的一些方法了.这个文件的启动顺序大于一些方法.

这样就能将原本的报错页面变成可识别的json串.并且将错误的日志记录在 runtime/errorlog 目录下。

如何接收客户端上传的数据

上传的接收方法有很多.

TP5 已经帮我们封装好了 FILE文件上传。我们可以直接调用它的方法即可.

下面有file文件上传的demo:

当然还有另外一种方式上传文件到服务器 那就是直接发送文件流:

PS:本例子只是用来演示 不能直接用于API需要修改返回的格式为json .

这种方式也是最好理解的一种,直接把文件通过字节的方式传入.我们后台直接保存即可.

APP接入支付宝支付

对于没有接入过支付的小伙伴,我先说几句!

不要畏惧接触第三方,第三方的调用可以说是相对比较简单的,他们会把大部分的逻辑封装在sdk中,我们只要调用接口.一般正规的第三方接口都会有说明文档。也不要畏惧读文档,耐下心来仔细看一篇.其实也就是那么回事

我们现在开始给自己的APP接入支付宝

首先我们了解下支付宝的支付接口调用原理

其中虚线的就是我们要处理的步骤 我们下面将一步一步来介绍如何操作

首先我们先要去申请支付应用,获取APPid、rsaPrivateKey 、alipayrsaPublicKey

怎么开通应用?这一步骤还是看官方手册吧!官方的手册才是最详细的 手册地址

请确保账号有开通APP支付的权限,下面我们来配置一下开发环境,在我们创建的支付应用管理页面里面

应用网关

填写你服务器的域名:http://www.webhuang.cn

授权回调地址

填写支付宝给你异步回调的地址

后面还有接口加密方式要填写,我们可以通过下载支付宝官方提供的工具生成公钥和私钥。这里官方手册也说的很详细了.

官方生成签名工具地址:下载地址

生成秘钥的格式按照地址中的图生成即可,最后将生成的应用公钥上传到平台即可。

将SDK下载放置在TP5的vendor目录下的alipay文件夹(可根据实际使用框架技术进行实际调整)。

SDK下载地址:下载地址

用户点击付款按钮的时候,客户端会请求我们,我们需要返回一个签名的信息给客户端,再由客户端通过支付宝SDK传给支付宝的服务端

通过上面的代码就可以生成一个签名的订单信息,供客户端去调用支付宝,发起支付请求。

当用户支付成功,会异步的向我们服务器请求一条接口,只有我们返回 success 支付宝才认可已经付款成功,不然就会一直请求.返回fail 则说明我们不承认这次请求。

这样一次支付的流程就走完了.其中代码为学习的思路。如果要在实战项目中使用,请仔细检查代码的强壮性!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_32254243/article/details/115621284

智能推荐

GreenDao 使用详解(入门篇)_我的真心比不上你的娇喘的博客-程序员宝宝_greendao使用详解

Android ORM 框架:GreenDao 使用详解最近太忙了,直接引用网上的图片一、GreenDao 简介 greenDAO 是一款开源的面向 Android 的轻便、快捷的 ORM 框架,将 Java 对象映射到 SQLite 数据库中,我们操作数据库的时候,不在需要编写复杂的 SQL语句, 在性能方面,greenDAO 针对 Android 进行了高度优化, 最小的内存开销

【CDH5】-002Cloudera Manager介绍和安装_艾文编程的博客-程序员宝宝_怎么将cloudera cdh免费版改为企业版

Cloudera公司开发的集群管理系统Cloudera Manager(简称CM)用于管理CDH集群,可进行节点安装、配置、服务管理等,提供Web窗口界面以提高Hadoop配置可见度,从而降低集群参数设置的复杂度。不开源。介绍CM的安装

SIGGRAPH 2022最佳技术论文奖重磅出炉!北大陈宝权团队获荣誉提名_3D视觉工坊的博客-程序员宝宝

作者丨David来源丨新智元【导读】SIGGRAPH 2022最佳技术论文奖揭晓!北大陈宝权教授团队论文获荣誉提名奖。计算机图形领域顶会SIGGRAPH 2022最佳技术论文奖揭晓!今年,SIGGRAPH提供了两种提交研究成果的方式:期刊论文和会议论文,前者是往年同一计划的延续,后者是以较短的形式分享观点。另外,SIGGRAPH 2022今年新推出了技术论文奖,包括最佳论...

【BZOJ3326】数数(SCOI2013)-数位DP_Maxwei_wzj的博客-程序员宝宝

测试地址:数数题目大意: 给定L,RL,RL,R两个10510^5105位内的B(≤105)B(\le 10^5)B(≤105)进制数,L≤RL\le RL≤R,对区间[L,R][L,R][L,R]内的所有数xxx,累加xxx中所有子串表示的数字的和(如123123123,应该累加123+12+23+1+2+3123+12+23+1+2+3123+12+23+1+2+3到答案中,注意不应该包含前...

《从Paxos到ZooKeeper》读书笔记之第一章(一)_Receptive2WE的博客-程序员宝宝

《从Paxos到ZooKeeper》读书笔记之第一章(一)开始读《从Paxos到ZooKeeper》这本书,以了解和使用ZooKeeper,这里会记录一些随笔画下来的自以为的重点、自己理解和代码块。第一章 分布式结构1.1 从集中式到分布式定义:分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅通过消息进行通信和协调的系统特征:一个标准的分布式系统在没有任何特定业务逻辑约束的情况下,都会有如下特征1.分布性:空间上随意分布,分布情况也会随时变动2.对等性:1)分布式系统中的

《中学语文》期刊简介及投稿要求_qq2621542409的博客-程序员宝宝

主管单位:湖北省教育厅主办单位:湖北大学文学院出版地区:湖北国际刊号:1000-419X国内刊号:CN42-1021/G4出版周期:旬刊收录情况:知网收录(中)、国家图书馆馆藏、维普收录(中)、万方收录(中)《中学语文》杂志创刊于1958年,由湖北省教育厅主管,湖北大学主办。省级期刊。现代文学先驱茅盾题写刊名,语文大师叶圣陶题词,最先传播出"教是为了达到不需要教"的教育思想。她一贯以提高教师素质,培养学生能力为宗旨,被评为湖北省优秀期刊。是我国最早的优秀语文期刊之一。《中

随便推点

遥感英文专业术语_Cinderelley的博客-程序员宝宝_遥感专业英语

遥感英文专业术语1 摄影测量学photogrammetry2 卫星摄影测量satellite photogrammetry3 摄影学photography4 航天摄影space photography5 航空摄影aerial photography6 航空摄影机aerial camera7 立体摄影机stereocamera, stereometric camera8 非量测摄影机non-metric camera9 量测摄影机metric camera10 全景摄影

BZOJ 1101 [POI2007]Zap(莫比乌斯反演)_weixin_30553777的博客-程序员宝宝

【题目链接】http://www.lydsy.com/JudgeOnline/problem.php?id=1101【题目大意】  求[1,n][1,m]内gcd=k的情况【题解】  考虑求[1,n][1,m]里gcd=k  等价于[1,n/k][1,m/k]里gcd=1  考虑求[1,n][1,m]里gcd=1  结果为sum(miu[d]*(n/...

Tp6 五表联查_两瓶啤酒晕三天的博客-程序员宝宝_tp6 联查

user模型:protected $table='login';protected $pk='id';public function getrole(){ return $this->belongsToMany(role::class,'u_r','role_id','id');}public function show($name){ return $this->where('name',$name)->with('getrole.get')->f

Spring面试题_OceanBase的博客-程序员宝宝

1、谈谈你对spring的理解? Spring是个java企业级应用的开源开发框架,轻量级,基本的版本大约2MB,Spring的优点主要体现在IOC和AOP,他两说白了就是对工厂模式和代理模式的一个封装! 2、解释Spring中IOC, DI, AOP IOC就是控制反转或依赖注入。简单点说就是以前我们需要一个对象的时候都是new出来,而spring的IOC就帮我们实现了这一点,通过Spri...

PMP-常用缩写_p1i2n3g4的博客-程序员宝宝

AC-实际成本-Actual Cost :在一个给定的时间段内,完成进度活动或工作分解结构组成部分的工作,而实际发生并记录在案的总成本。有时仅为直接工时或直接成本,有时也为包括间接成本在内的所有成本。也称“已完工作实际成本”(ACWP);ACWP-已完成工作实际成本-Actual Cost of Work Performed;BAC-完工预算-Budget at Completion:项目...

ApacheCN Linux 译文集(二) 20211206 更新_布客飞龙的博客-程序员宝宝

CentOS7 Linux 服务器秘籍零、前言一、安装 CentOS二、配置系统三、管理系统四、用 YUM 管理包五、管理文件系统六、提供安全性七、构建网络八、使用文件传输协议九、使用域名十、使用数据库十一、提供邮件服务十二、提供网络服务十三、操作系统级虚拟化十四、使用 SELinux十五、监控信息技术基础设施CompTIA Linux 认证指南零、前言一、配置硬件二、启动系统三、更改运行级别和引导目标四、设计硬盘布局五、安装 Linux 发行版六、.

推荐文章

热门文章

相关标签