api接口的简单见解与优化

初级:基础接口  如注册登陆,文章内容的增删改查(一般将增和改放一起写),邮件发送

中级:中级接口   主要是一些借助第三方接口文档,如短信,push消息,微信支付

高级: 项目工程化及性能调优   主要包括自测脚本,lib公共代码的抽离,第三方composer管理,异常处理,DAO数据操作层抽离和基类增删改查的实现(框架自带),统一的api接口数据返回,统一的接受数据

高级优化-详情:公共代码抽离:将常用的方法抽离到公共控制器或模型中

统一的api接口请求:将其封装成一个方法放公共方法中

统一的api接口返回:写个类,将错误码和错误信息定义成一个数组常量,错误码作为键,错误信息作为值。再定义一个方法,传入不同错误码,根据这个数组找出相应的错误信息返回


异常处理,用try cache 来实现.try(连接数据库,逻辑处理)cache(返回错误码和错误信息)。

在具体的地点写,方便知道是哪的错误


此处主要是为了防止当由报错信息时造成接受不到相应参数造成系统的崩溃,

最省事的是可以在最外层代码中写,如下


初中级-详情 :密码加密:主要有个加盐操作,加盐就是另加一些公司内部字符串与要加密的信息组合一起后用MD5加密

如:MD5(“salt-xxx-".$password)


找回密码:发送一个找回密码的链接,需要跟上用户信息(验证用户,知道是那个用户改,好去修改库中此用户的密码),要有时效性

邮箱是否被阅读的验证:在邮箱中加一个图片,当用户点开邮件时,会访问这个图片,此图片src为一个地址(为一个php文件),此地址需要跟着此用户的邮箱,我们在服务器端可以get 接收到此src后跟的邮箱地址,进而判断用户是否点开邮箱(如可以在库中修改此用户是否点开邮箱的状态)

对于这个问题有一个简单的解决方法,我们知道,邮件内容可以以html 的形式发送,我们可以在内容中插入图片,那么关键就在这个图片里面了。

假设我们的邮件内容是这样的:

文件content.php代码如下:

1
2
3
4
5
6
7
8
9
10
11
<table width="555" height="50" border="0" align="center" cellpadding="0" cellspacing="0" background="<?=$bg?>">
<tr>
 <td>这是测试内容</td>
   </tr>
   <tr>
 <td> </td>
   </tr>
   <tr>
 <td> </td>
   </tr>
 </table>

这个$bg要怎么写呢?如果邮件是发送多个人呢?这里又怎么区分呢?

假设链接是这样的:http://www.xxx.com/image.php?email=$email 再看看image.php的代码

文件image.php代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$email=$_GET["email"];
if($id)
{
  include_once("/conn.php");
  mysql_query("update mail_list set has_read='yes' where email='$email'");
}
header("Content/type:image/gif");
$im=imagecreatefromgif("bg.gif");
imagegif($im);
imagedestroy($im);
?>

看到这里你也许就明白了。所以我发送的邮件的内容就是这样的:

1
2
3
4
5
6
<?php
ob_start();
include_once("content.php");
$content=ob_get_contents();
ob_end_clean();
?>

写到这里,我们并没有对邮件内容中的背景图像进行替换,接下来的问题将会逐步解决这个问题, 这个是用phpmail发送邮件的部分代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
/*
$contact=array("userA"=>"aaaa@sina.com","userB""=>"bbb@163.com","userC"=>"ccc@qq.com");
*/
foreach ($contact as $unm=>$email)
{
  $bg_file="http://{$_SERVER['SERVER_NAME']}/image.php?email=$email";
  $str=str_replace('background=""',"background=\"$bg_file\"",$content);
  $mail->MsgHTML($str);
  $mail->AddAddress($email,$unm);
  $mail->Send();
}
?>

这里为什么要用循环的方式逐一发送呢?因为为了区分是哪个联系人读过邮件,每封邮件的内容的背景图片的显示不一样。在发送之前,我们对内容进行处理,对背景进行替换,这样我们看到的邮件内容的背景图像的src就变成了这样:http://www.domain.com/image.php?email=aaa@sina.com等等。

注意这里还有一个问题,你执行上面的代码之后,会发现一个问题,发送到第一个人的是3封,第二个人的是2封,第三个人的是1封,这里为什么呢?这里就要看看AddAddress方法了。修改办法是:打开class.phpmailer.php,找到310行,将private $to=Array()改成public $to=Array().

然后在发送邮件的代码中加入:

1
2
$mail->to=Array();
$mail->AddAddress($email,$unm);

写到这里,就不用再做过多说明了。



阅读更多
上一篇laravel5.4中orm中的wherein与多条件查询
下一篇php优化
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭