前后端接口约定
大纲链接 §
[toc]
后端接口规范 ⇧
约定接口一般包括以下数据
- 0.后端接口线上地址根路径:
https://blog-server.hunger-valley.com
- 1.功能简介
- 2.当前接口的路径: 如
/auth/register
- 3.当前接口提交数据HTTP方法类型是什么? 如
GET
获取数据POST
提交或者创建PATCH
修改数据,部分修改,只需要传递需要修改的参数,语义为补丁DELETE
删除数据PUT
修改数据,整体替换原有数据,需包含全部参数(本项目暂不使用)
- 4.参数类型/格式,比如是
application/json
格式,还是application/x-www-form-urlencoded
的数据格式 - 5.参数字段,及限制条件
- 6.是否需要登录权限(身份认证)
- 7.返回成功的数据格式
- 8.返回失败的数据格式
按照本项目业务逻辑分类的接口
- 认证相关
- 博客相关
开发阶段可以使用
postman
等工具 或者curl
命令测试接口
- 按照文档,mock 数据
- 替换上线地址
认证相关 ⇧
分为以下几个接口
类型 | 路径 | 功能 |
---|---|---|
POST |
/auth/register |
用户注册 |
POST |
/auth/login |
用户登录 |
GET |
/auth |
判断用户是否登录 |
GET |
/auth/logout |
注销登录 |
POST
路径 /auth/register
⇧
- 功能: 用户注册
- 提交参数
- 参数类型:
Content-Type: application/x-www-form-urlencoded;charset=utf-8
- 参数字段
username
: 用户名,长度1到15个字符,只能是字母数字下划线中文password
: 密码, 长度6到16个任意字符
- 参数类型:
- 是否需要登录权限(身份认证):否
- 返回数据
- 失败返回格式:
{"status": "fail", "msg": "错误原因"}
- 成功返回格式:
- 失败返回格式:
|
|
使用
curl
测试接口
|
|
- 数据格式为
application/x-www-form-urlencoded
,即可使用username=hunger&password=123456
的形式传递数据
POST
路径 /auth/login
⇧
- 功能: 用户登录
- 提交参数
- 参数类型:
Content-Type: application/json;charset=utf-8
- 参数字段
username
: 用户名, 长度1到15个字符,只能是字母数字下划线中文password
: 密码, 长度6到16个任意字符
- 参数类型:
- 是否需要登录权限(身份认证):否
- 返回数据
- 失败返回格式:
{"status": "fail", "msg": "用户不存在"}
或者{"status": "fail", "msg": "密码不正确"}
- 成功返回格式:
- 失败返回格式:
|
|
使用
curl
测试接口
|
|
- 其中
-d
表示请求参数或者发送POST
请求时设置请求体-d '内容'
或者--data '内容'
-i
查看服务器返回的详细 响应头 和 响应体- 如果后端使用
Session-Cookie
机制来实现登录认证- 则响应头中有
set-cookie
字段,将其值connect.sid=xxx...xxx
记录下来 - 之后如果发送需要权限的接口时,携带上这个字段,就可处于登录状态,例如:
- 测试是否登陆
curl "https://blog-server.hunger-valley.com/auth -b "connect.sid=xxx...xxx"
- 测试是否注销
curl "https://blog-server.hunger-valley.com/auth/logout -b "connect.sid=xxx...xxx"
- 测试是否登陆
- 则响应头中有
- 如果后端使用
JWT
机制来实现登录认证- 则响应头中有
"token"
字段,例如"token":"Bearer xxxx.xxxxx.xxxx"
- 之后如果发送需要权限的接口时,携带上
"authorization"
字段,值为"Bearer xxxx.xxxxx.xxxx"
,就可以登录状态,访问需要权限的接口
- 则响应头中有
- 本项目改为使用
JWT
机制实现身份认证
GET
路径 /auth
⇧
- 功能: 判断用户是否登录
- 提交参数: 无
- 是否需要登录权限(身份认证):是/否
- 返回数据
- 已登录的情况:
|
|
- 未登录的情况:
|
|
使用
curl
测试接口,范例:
|
|
curl "https://blog-server.hunger-valley.com/auth" -H "..."
中的-H
表示 设置请求头- 例如
-H 'Name:Value'
或者--header 'Name:Value'
,单引号内必须是以键值对的形式
GET
路径 /auth/logout
⇧
- 功能: 注销登录
- 提交参数: 无
- 是否需要登录权限(身份认证):是
- 返回数据:
- 失败返回格式:
{"status": "fail", "msg": "用户尚未登录"}
- 成功返回格式:
{"status": "ok", "msg": "注销成功"}
- 失败返回格式:
博客相关 ⇧
分为以下几个接口
类型 | 路径 | 功能 |
---|---|---|
GET |
/blog |
获取博客列表 |
GET |
/blog/:blogId |
获取博客详情 |
POST |
/blog |
创建博客 |
PATCH |
/blog/:blogId |
修改博客 |
DELETE |
/blog/:blogId |
删除博客 |
GET
路径 /blog
⇧
- 功能: 获取博客 列表
- 提交参数:
page
: 页码- 不传默认
page
值为1
- 分页页码小于总页码
- 如果设置该参数,则获取博客列表的第
page
页博客列表
- 不传默认
userId
: 用户id
- 不传则默认获取全部用户的数据
- 如果设置,则获取该
id
用户的博客列表
atIndex
: 是否展示在首页- 传递
true
则只得到显示到首页的博客列表 - 不传,则默认得到全部类型(包括展示到首页和不展示到首页)的博客列表
false
得到不展示到首页的列表,如/blog?page=2&userId=1
获取属于用户1的第2页博客列表
- 传递
- 是否需要登录权限(身份认证):否
- 返回数据:
- 失败返回格式:
{"status": "fail", "msg": "系统异常,无法获取博客信息"}
- 成功返回格式:
- 失败返回格式:
|
|
- 数据中不需要博客正文
GET
路径 /blog/:blogId
⇧
- 功能: 获取
id
为blogId
的博客 详情, 如/blog/1
- 提交参数: 无
- 是否需要登录权限(身份认证):否
- 返回数据:
- 失败返回格式:
{"status": "fail", "msg": "系统异常,无法获取博客信息"}
- 成功返回格式:
- 失败返回格式:
|
|
POST
路径 /blog
⇧
- 功能: 创建博客
- 提交参数
- 参数类型:
Content-Type: application/json; charset=utf-8
- 参数字段
title
: 博客标题, 博客标题不能为空,且不超过100个字符content
: 博客内容, 博客内容不能为空,且不超过10000个字符description
: 博客内容简要描述,可为空,如果为空则后台自动从content
中提取
- 参数类型:
- 是否需要登录权限(身份认证):是
- 返回数据:
- 失败返回格式:
{"status": "fail", "msg": "登录后才能操作"}
- 成功返回格式:
- 失败返回格式:
|
|
命令行测试范例:
|
|
PATCH
路径 /blog/:blogId
⇧
- 功能: 修改 博客
id
为:blogId
的博客 - 范例:
/blog/1
- 提交参数
- 参数类型:
Content-Type: application/json; charset=utf-8
- 参数字段:
title
: 博客标题, 可选,不传则维持之前的内容content
: 博客内容, 可选,不传则维持之前的内容description
: 博客内容简要描述, 可选,不传且正文不变则维持之前的内容atIndex
:true
|false
, 是否展示到首页, 可选
- 参数类型:
- 是否需要登录权限(身份认证):是
- 返回数据:
- 失败返回格式:
{"status": "fail", "msg": "登录后才能操作"}
{"status": "fail", "msg": "博客不存在"}
{"status": "fail", "msg": "无法修改别人的博客"}
- 成功返回格式:
- 失败返回格式:
|
|
命令行测试范例:
|
|
DELETE
路径 /blog/:blogId
- 功能: 删除 博客
id
为:blogId
的博客 - 提交参数:无
- 是否需要登录权限(身份认证):是
- 返回数据
- 失败返回格式:
{"status": "fail", "msg": "登录后才能操作"}
{"status": "fail", "msg": "博客不存在"}
{"status": "fail", "msg": "无法删除别人的博客"}
- 成功返回格式:
{"status": "ok", "msg": "删除成功"}
- 失败返回格式:
命令行测试范例:
|
|