多用户博客系统Day2

服务器设计

采用restful风格API设计方式:使用不同的HTTP方法表示不同的含义:

  • POST方法表示新增资源
  • GET方法表示查看资源
  • PUT方法表示修改
  • DELETE方法表示删除

使用path表示要操作的资源,继续使用Json来组织body中的数据

实现一个http服务器,采用第三方库cpp-httplib来进行开发,实现起来能简单点。

cpp-httplib 一个header-only的跨平台HTTP/HTTPS服务器和客户端C++库

选择这个库的几个原因:

  • 开源项目,免费
  • 安装简单,只用把httplib,放在项目目录下就能使用
  • 还支持写http客服端
  • 代码简单使用起来简单
  • 采用restful风格API设计方式

博客表有关接口

1.新增博客

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//请求
POST/blog
{
title:
content:
create_time:
tag_id:
author_id:
}

//响应
HTTP/1.1 200 OK
{
OK:true
reason:""
}

2.查看所有博客(标题列表)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//请求
GET/blog 获取所有
GET/blog?tag_id=1 按照标签来筛选
GET/blog?author_id=1 按照作者来筛选

//响应
HTTP/1.1 200 OK
[
{
blog_ig:
title:
tag_id:
author_id:
create_time:
},
{
blog_ig:
title:
tag_id:
author_id:
create_time:
},
.
.
.
.
.

]

查看某个博客:

1
2
3
4
5
6
7
8
9
10
11
12
//请求
GET/blog/:blog_id “:XXX” 代表了一个具体的blog_id,是一个具体的数字 类似于blog/1

//响应
HTTP/1.1 200 OK
{
blog_ig:
title:
content:c tag_id:
author_id:
create_time:
}
  1. 删除博客
1
2
3
4
5
6
7
8
//请求
DELETE/blog/:blog_id

//响应
HTTP/1.1 200
{
ok:true
}

4.修改博客

1
2
3
4
5
6
7
8
9
10
11
12
13
//请求
PUT/blog/:blog_id
{
titlle:"new title",
content:"new content",
tag_id:"new tag_id"
}

//响应
HTTP/1.1 200 OK
{
ok:true
}

标签表接口设计

1.新增标签

1
2
3
4
5
6
7
8
9
10
11
12
//请求
POST/tag
{
tag_id:
tag_name:
}

//响应
HTTP/1.1 200 OK
{
ok:true
}

2.查看标签

1
2
3
4
5
//请求
GET/tag

//响应
HTTP/1.1 200 OK

3.删除标签

1
2
3
4
5
//请求
DELETE/tag/:tag_id

//响应
HTTP/1.1 200 OK

用户表接口实现

1.新增用户

1
2
3
4
5
6
7
8
9
10
//请求
Post/author
{
user_name:
passwords:
}


//响应
HTTP/1.1 200 ok

2.查看所有用户列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//请求
Get/author
[
{
author_id:
user_name:
},
{
author_id:
user_name:
},
{
author_id:
user_name:
},
.
.
.
.
]

//响应
HTTP/1.1 200 ok

查看指定用户

1
2
3
4
5
6
7
8
9
10
//请求
GET/author/:author_id

//响应
HTTP/1.1 200 ok
{
author_id:
user_name:
passwords:
}

服务器实现:

  1. 和数据库建立连接

  2. 创建相关数据库对象处理

    • BlogTable

    • TagTable

    • AuthorTable

  3. 创建服务器,并设置“路由”

    HTTP 服务器的路由,和IP协议的路由不一样,此处的路由指的是把方法 和path =》哪个处理函数,关联关系声明清楚,确认一个映射关系

    博客表有关的处理函数:

    新增博客:Post(“/blog”,Handler)

    查看博客:Get(“/blog”,Handler)

    修改博客:Put(“/blog”,Handler)

    删除博客:Delete(“/blog”,Handler)

    标签表有关的处理函数:

    新增标签:Post

    查看标签:Get

    删除标签:Delete

    作者表有关的处理函数:

    新增用户:Post

    查看用户:Get

    修改密码:Put

正则表达式:用特殊符号来描述一个字符串应该具有那些特殊特征,

特征包括不限于:包含那些特殊字符,以什么开头,以什么结尾,特点字符重复出现几次