Blog ~Version 2.0 设计概要

2017-05-31 17:18:06 个人作品 2094 0

站点定位 技术分享 | 个人站

面向人群 18~40岁

面向设备 电脑端 [ 看技术博文时,人们大多用电脑 ]

开源地址 Github

表设计

个人博客 - 百度脑图

开发过程

接口防爆破设计

目前采用的 session 本地磁盘I/O 作为隔离层
https://github.com/HaleyLeoZhang/blog_v2/blob/master/application/controller/Api.php

单元测试

API层测试

请先配置 sensitive_config.ini 中的 unit_host 值为你本地的测试域名
此外 unit_switch 值 请设置为 true ,但千万注意线上环境这个值一定要为 false

<?php
namespace tests;
use think\testing\TestCase; // 单元测试,需要的文件 
use app\api\Admin_article; // API逻辑文件
use Mine\CurlRequest; // 封装好的 Curl 文件
use Mine\Token;

// 类名与文件名要保持一致,并且以 *Test.php 格式命名
class AdminArticleApiTest extends TestCase{

    private static $category_id; // 临时插入的类名 id ,因为测试的时候是静态调用,所以内部变量也为静态方可调用

    // 函数要以test开头、然后自定义函数名,当然最好是 test+类中对应函数名 的形式
    public function test_blog_category_list_add()
    {
        $g             = []; // GET参数
        $g['con']      = 'Admin_article';
        $g['act']      = 'blog_category_list_add';
        $p             = []; // POST参数
        $p['title']    = 'unit_title';
        $url           = config('unit_host') . '/Api?' . http_build_query($g);
        $res           = CurlRequest::run($url, $p);
        // Method One: 完全相同?
        // $msg           = []; // 待返回的json数据
        // $msg['status'] = true;
        // $this->assertEquals( $res, json_encode($msg) );
        // Method Two: 是否符合正则结果?
        $reg = '/status(.*?)true/'; // 对于获取的结果进行正则匹配
        $this->assertRegExp($reg, $res);

        // 找到刚刚插入的那条数据
        $_r = \think\Db::table('blog_category_list')
            ->where('title', $p['title'])
            ->select();
        $this->assertEquals(1, count($_r));
        self::$category_id = $_r[0]['id'];
    }

    public function test_blog_category_list_del()
    {
        $g        = []; // GET参数
        $g['con'] = 'Admin_article';
        $g['act'] = 'blog_category_list_del';
        $p        = []; // POST参数
        $p['id']  = self::$category_id;
        $url      = config('unit_host') . '/Api?' . http_build_query($g);
        $res      = CurlRequest::run($url, $p);
        // Method Two: 是否符合正则结果?
        $reg = '/status(.*?)/'; // 对于获取的结果进行正则匹配
        $this->assertRegExp($reg, $res);
    }

}

逻辑层测试

<?php
namespace tests;
use think\testing\TestCase; // 单元测试,需要的文件 
use app\service\Article; // 普通逻辑文件

// 类名与文件名要保持一致,并且以 *Test.php 格式命名
class ArticleServiceTest extends TestCase{

    // 函数要以test开头
    public function test_index(){
        $g['id'] = 3; // 函数所需的传入参数
        $obj = new Article();
        $res = $obj->index($g); // 运行对应函数并获取对应的返回值
        // 返回的数组中,是否含有对应的键名
        $this->assertArrayHasKey('article_info', $res);
        $this->assertArrayHasKey('cate_list', $res);
        $this->assertArrayHasKey('recommands', $res);
        $this->assertArrayHasKey('count_commit', $res);
    }

}

功能设计概要

游客与用户部分

第三方登陆与注销、访问足迹记录[含统计浏览数]、搜索文章、分类查看、文章评论为主楼、评论主楼、查看文章[做了图片no-referrer]时自动判断是否生成目录、同类文章推荐、侧边功能栏

后台

博文管理【文章类别的CURD、文章的CURD=>做了CDN】
信息管理【留言与回复CURD、用户登陆列表】
行为查看【访问足迹、接口权限控制=>可封杀IP】
基础配置【帐号信息相关、友情链接CURD、背景图片CURD】

接口概览

点此进入

其他说明

关于RSS

根据对身边朋友的调查统计,看似很有用的 RSS

云天河前期也做了,可是发现对于引流偶尔才会有帮助,可是普通用户平时用得可真不多,完全可以归纳为可有可无的功能,所以我将此废弃了。

关于网站地图

这个比较重要,虽然站点目前比较小,但是对于蜘蛛的爬取还是很有用的,每天定时任务生成即可

注:若无特殊说明,文章均为云天河原创,请尊重作者劳动成果,转载前请一定要注明出处