BugPhobia准备篇章:Beta阶段前后端接口文档
0x00:序言
Two strangers fell in love,
Only one knows it wasn’t by chance.
To the searching tags, you may well fall in love with http:// 10.2.26.67
Github地址:Beta阶段前后端接口定义说明.md
|
版本管理 |
修改记录 |
|
V1.0 |
Beta阶段前后端接口文档一稿整理完成,记录用户、标签(含推荐)、搜索和问答部分的主要接口 |
0x01 :接口定义说明
|
接口定义描述 |
具体样例说明 |
|
Particular Scopes(URL):通过URL描述基本的属性或关系 |
ü /users/{id}/notifications ü /question/add |
|
Methods(HTTPS Protocol):描述服务器的交互方法 |
ü GET, POST, PUT, DELETE |
|
Arguments(Requires):API本身所需的参数 |
ü private_information ü write/read_access |
|
Return:API本身返回的文本返回值 |
ü {"body":,"is_unrea":,"post_id":} |
特别说明:Django框架依据cookies来管理用户状态,因此对于Android端的前端开发的团队(Dream:http://www.cnblogs.com/groupofdream/),必须启用cookies进行管理;经过调研,Android能够依据HttpClient自动管理cookies,再查阅调研后,将有效提升前端本身的开发效率
0x02 :用户管理说明
0x0200:用户登录
|
URL |
/accounts/login |
|
Method |
POST |
|
Argument |
ü username 用户名 ü password 密码 |
|
Return |
ü 成功时 {"state":"ok"} ü 密码错误时 {"state":"failed"} ü 无此用户时 {"state":"missing"} |
0x0204:用户注销
|
URL |
/accounts/logout |
|
Method |
POST |
|
Argument |
—— |
|
Return |
ü 成功时 {"state":"ok"} ü 失败时 {"state":"failed"} |
0x0208:设定用户信息(Login Required)
|
URL |
/accounts/updateprofile |
|
Method |
POST |
|
Argument |
ü email 邮件地址 ü realname 真实姓名 ü description 一句话自我介绍 |
|
Return |
ü 成功时 {"state":"ok"} ü 失败时 {"state":"failed"} |
0x020c:获取用户信息(Login Required)
|
URL |
/accounts/userinfo |
|
Method |
GET |
|
Argument |
—— |
|
Return |
ü 成功时 {"state":"ok", "email":"example@example.com", "creation_time":UNIXTimestamp, "realname":"example_real_name", "description":"I'm a example", "credit":123, "forgottime":UNIXTimestamp, "download":123} ü 失败时 {"state":"failed"} |
0x03:标签(TAG)管理说明
0x0300:关注TAG(Login Required)
|
URL |
/accounts/liketag |
|
Method |
GET |
|
Argument |
ü tag 标签名 |
|
Return |
ü 成功时 { "state":"ok", "tags": [ { "tagname":"name1", "count": 123, "excerpt": "name1 is a balabala..." }, { "tagname":"name2", "count": 222, "excerpt": "name2 is a balabala..." } ] } 失败时 {"state":"failed"} |
0x0304:取消关注TAG(Login Required)
|
URL |
/accounts/disliketag |
|
Method |
GET |
|
Argument |
ü tag 标签名 |
|
Return |
ü 成功时 { "state":"ok", "tags": [ { "tagname":"name1", "count": 123, "excerpt": "name1 is a balabala..." }, { "tagname":"name2", "count": 222, "excerpt": "name2 is a balabala..." } ] } 失败时 {"state":"failed"} |
0x0308:获取TAGS
|
URL |
/accounts/tags {*依据count降序获取标签*} |
|
Method |
GET |
|
Argument |
) |
|
Return |
ü 成功时 { "state":"ok", "tags": [ { "tagname":"name1", "count": 123, "excerpt": "name1 is a balabala..." }, { "tagname":"name2", "count": 222, "excerpt": "name2 is a balabala..." } ] } ü 失败时 {"state":"failed"} |
0x030c:推荐TAGS
|
URL |
/recommended/tags |
|
Method |
GET |
|
Argument |
) |
|
Return |
ü 成功时 { "state":"ok", "tags": [ { "tagname":"name1", "count": 123, "excerpt": "name1 is a balabala..." }, { "tagname":"name2", "count": 222, "excerpt": "name2 is a balabala..." } ] } ü 失败时 {"state":"failed"} |
0x0310:推荐QUESTIONS
|
URL |
/recommended/questions |
|
Method |
GET |
|
Argument |
) |
|
Return |
ü 成功时 { "state":"ok", "questions": [ { "question_id":123, "title": "my question is a balabala...", "content": "hi,..." "uid": "user id" //提问者id "uname": "user name"//提问者姓名 "shortAns": "answer is balabala"//问题的简短回答(如果已被选中“最佳答案”) "views": 123 //访问数 "replies": 1 //回复数 "solved": true //是否已采纳“最佳答案 "PostDateTime": UNIXTimestamp//提出问题的时间 }, ... ] } ü 失败时 {"state":"failed"} |
0x0314:推荐ANSWERS
|
URL |
/recommended/answers |
|
Method |
GET |
|
Argument |
) |
|
Return |
ü 成功时 { "state":"ok", "answers": [ { "question_id":123, "answer_id":111, "count": 123, "content": "hi,...", "uid": 66666666, "uname": "answer's name", "title": "answer title", "Qtitle": //该回答所属问题的标题,用于显示“用户回答过的问题”时 "views": 222, "votes": 123, "PostDateTime": UNIXTimestamp, //回答问题的时间 "IsBestAns": true//判断该answer是否是所属问题的最佳answer } ] } ü 失败时 {"state":"failed"} |
0x04:搜索管理说明
|
URL |
/search/query |
|
Method |
GET |
|
Argument |
ü query_content 待搜索的内容或tag |
|
Return |
ü 成功时 { "tag_description":"Java is an object-orinented....", "query_content":"Java", "question_list":[ { "body":"balabala", "creation_date":"2014 Oct", "score":44, "tags_name":"Java", "url":"http://abc", "view_count":2, ...... },
{ ...... } ] } ü 失败时 query_content不在request.GET中,返回{"state":"invalid"},无法获得tag的id:{"state":"failed","query_content":"Java"},计划启用SOLR搜索 |
0x05:问答管理说明
0x0500:未解决问题
|
URL |
/question/getUnservedQuestions |
|
Method |
GET |
|
Argument |
ü tag, //标签名,用于通过标签查询问题(可选,没有的话就随便给一些) 道题) |
|
Return |
ü 成功时 { "state":"ok", "questions": [ { "question_id":123, "title": "my question is a balabala...", "content": "hi,..." "uid": "user id" //提问者id "uname": "user name"//提问者姓名 "shortAns": "answer is balabala"//问题的简短回答(如果已被选中“最佳答案”) "views": 123 //访问数 "replies": 1 //回复数 "solved": true //是否已采纳“最佳答案 "PostDateTime": UNIXTimestamp//提出问题的时间 }, ... ] } ü 失败时 {"state":"failed"} |
特别说明:用户未登录,最多只返回10道题,若用户已登录,问题数由pageNum或已爬取的问题总数决定。登录与否通过Cookies来判断,利用Django自带的机制即可,无需额外传参
0x0504:热门问题
|
URL |
/question/getHotQuestions |
|
Method |
GET |
|
Argument |
ü tag, //标签名,用于通过标签查询问题(可选,没有的话就随便给一些) 道题) |
|
Return |
ü 成功时 { "state":"ok", "questions": [ { "question_id":123, "title": "my question is a balabala...", "content": "hi,..." "uid": "user id" //提问者id "uname": "user name"//提问者姓名 "shortAns": "answer is balabala"//问题的简短回答(如果已被选中“最佳答案”) "views": 123 //访问数 "replies": 1 //回复数 "solved": true //是否已采纳“最佳答案 "PostDateTime": UNIXTimestamp//提出问题的时间 }, ... ] } ü 失败时 {"state":"failed"} |
0x0508:“我”提出的问题(Login Required)
|
URL |
/question/getUnservedQuestions |
|
Method |
GET |
|
Argument |
ü tag, //标签名,用于通过标签查询问题(可选,没有的话就随便给一些) 道题) |
|
Return |
ü 成功时 { "state":"ok", "questions": [ { "question_id":123, "title": "my question is a balabala...", "content": "hi,..." "uid": "user id" //提问者id "uname": "user name"//提问者姓名 "shortAns": "answer is balabala"//问题的简短回答(如果已被选中“最佳答案”) "views": 123 //访问数 "replies": 1 //回复数 "solved": true //是否已采纳“最佳答案 "PostDateTime": UNIXTimestamp//提出问题的时间 }, ... ] } ü 失败时 {"state":"failed"} |
0x050c:“我”发表的问题(Login Required)
|
URL |
/question/getMyAnswers |
|
Method |
GET |
|
Argument |
ü uid, 道题) |
|
Return |
ü 成功时 { "state":"ok", "answers": [ { "question_id":123, "answer_id":111, "count": 123, "content": "hi,...", "uid": 66666666, "uname": "answer's name", "title": "answer title", "Qtitle": //该回答所属问题的标题,用于显示“用户回答过的问题”时 "views": 222, "votes": 123, "PostDateTime": UNIXTimestamp, //回答问题的时间 "IsBestAns": true//判断该answer是否是所属问题的最佳answer }, ... ] } ü 失败时 {"state":"failed"} |
0x0510:获得某道问题的详细信息
|
URL |
/question/getQuestionById |
|
Method |
GET |
|
Argument |
ü question_id //问题的id |
|
Return |
ü 成功时 { "state":"ok", "question": { "question_id":123, "title": "my question is a balabala...", "content": "hi,..." "uid": "user id" //提问者id "uname": "user name"//提问者姓名 "shortAns": "answer is balabala"//问题的简短回答(如果已被选中“最佳答案”) "views": 123 //访问数 "replies": 1 //回复数 "solved": true //是否已采纳“最佳答案 "PostDateTime": UNIXTimestamp//提出问题的时间 }, "answers": [ { "question_id":123, "answer_id":111, "count": 123, "content": "hi,...", "uid": 66666666, "uname": "answer's name", "title": "answer title", "Qtitle": //该回答所属问题的标题,用于显示“用户回答过的问题”时 "views": 222, "votes": 123, "PostDateTime": UNIXTimestamp, //回答问题的时间 "IsBestAns": true//判断该answer是否是所属问题的最佳answer }, ... ], "tags": [ { "tagname":"name1", "count": 123, "excerpt": "name1 is a balabala..." }, { "tagname":"name2", "count": 222, "excerpt": "name2 is a balabala..." }, ... ] } ü 失败时 {"state":"failed"} |
0x0514:提问(Login Required)
|
URL |
/question/addQuestion |
|
Method |
GET |
|
Argument |
ü uid, ü title, ü content, ü tags //各个tag用逗号分隔 |
|
Return |
ü 成功时 {"state":"ok"} ü 失败时 {"state":"failed"} |
0x0518:增加访问数
|
URL |
/question/addView |
|
Method |
GET |
|
Argument |
ü question_id //问题的id |
|
Return |
ü 成功时 {"state":"ok"} ü 失败时 {"state":"failed"} |
0x051c:选中最佳答案(Login Required)
|
URL |
/question/solevdQuestion |
|
Method |
GET |
|
Argument |
ü qid //问题的id ü aid |
|
Return |
ü 成功时 {"state":"ok"} ü 失败时 {"state":"denied"} // 没权限被拒绝 {"state":"failed"} // 其他原因导致失败 |
0x0520:点赞(Login Required)
|
URL |
/question/giveVote |
|
Method |
GET |
|
Argument |
ü answer_id |
|
Return |
ü 成功时 {"state":"ok"} ü 失败时 {"state":"failed"} |
特别说明:判断用户对该答案是否点过赞,如果点过,赞数减一;如果没点过,赞数加一
0x0524:修改问题(Login Required)
|
URL |
/question/modifyQuestion |
|
Method |
GET |
|
Argument |
ü question_id ü title, ü content, ü tags //各个tag用逗号分隔 |
|
Return |
ü 成功时 {"state":"ok"} ü 失败时 {"state":"denied"} // 没权限被拒绝 {"state":"failed"} // 其他原因导致失败 |
0x0528:删除问题(Login Required)
|
URL |
/question/deleteQuestion |
|
Method |
GET |
|
Argument |
ü question_id, |
|
Return |
ü 成功时 {"state":"ok"} ü 失败时 {"state":"denied"} // 没权限被拒绝 {"state":"failed"} // 其他原因导致失败 |
0x052c:添加答案(Login Required)
|
URL |
/question/addAnswer |
|
Method |
GET |
|
Argument |
ü qid, ü content //答案的内容 |
|
Return |
ü 成功时 {"state":"ok"} ü 失败时 {"state":"failed"} |
0x0530:删除答案(Login Required)
|
URL |
/question/deleteAnswer |
|
Method |
GET |
|
Argument |
ü answer_id, |
|
Return |
ü 成功时 {"state":"ok"} ü 失败时 {"state":"denied"} // 没权限被拒绝 {"state":"failed"} // 其他原因导致失败 |
0x0534:修改答案(Login Required)
|
URL |
/question/modifyAnswer |
|
Method |
GET |
|
Argument |
ü answer_id, |
|
Return |
ü 成功时 {"state":"ok"} ü 失败时 {"state":"denied"} // 没权限被拒绝 {"state":"failed"} // 其他原因导致失败 |
BugPhobia准备篇章:Beta阶段前后端接口文档的更多相关文章
- [API]使用Blueprint来高雅的编写接口文档 前后端api文档,移动端api文档
网址:http://apiary.io/ 介绍:一款非常强大的前后端交互api设计编辑工具(编辑器采用Markdown类似的描述标记,非常高效),高颜值的api文档,还能生成多种语言的测试代码. 中文 ...
- vue菜鸟从业记:公司项目里如何进行前后端接口联调
最近我的朋友王小闰进入一家新的公司,正好公司项目采用的是前后端分离架构,技术栈是王小闰非常熟悉的vue全家桶,后端用的是Java语言. 在前后端开发人员碰面之后,协商确定好了前端需要的数据接口(扯那么 ...
- 前后端分离之【接口文档管理及数据模拟工具docdoc与dochelper】
前后端分离的常见开发方式是: 后端:接收http请求->根据请求url及params处理对应业务逻辑->将处理结果序列化为json返回 前端:发起http请求并传递相关参数->获取返 ...
- RAP, 高效前后端联调框架,接口文档管理工具
RAP通过GUI工具帮助WEB工程师更高效的管理接口文档,同时通过分析接口结构自动生成Mock数据.校验真实接口的正确性,使接口文档成为开发流程中的强依赖.有了结构化的API数据,RAP可以做的更多, ...
- SpringBoot集成Swagger(Swagger的使用),生成接口文档,方便前后端分离开发
首先上一张成果图. 1.Maven依赖 <dependency> <groupId>io.springfox</groupId> <artifactId&g ...
- Asp.Net Core 轻松学-利用 Swagger 自动生成接口文档
前言 目前市场上主流的开发模式,几乎清一色的前后端分离方式,作为服务端开发人员,我们有义务提供给各个客户端良好的开发文档,以方便对接,减少沟通时间,提高开发效率:对于开发人员来说,编写接口文档 ...
- Java | Spring Boot Swagger2 集成REST ful API 生成接口文档
Spring Boot Swagger2 集成REST ful API 生成接口文档 原文 简介 由于Spring Boot 的特性,用来开发 REST ful 变得非常容易,并且结合 Swagg ...
- Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)
一.Django中的缓存: 前戏: 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一 ...
- Asp.Net Core 轻松学系列-5利用 Swagger 自动生成接口文档
目录 前言 结语 源码下载 前言 目前市场上主流的开发模式,几乎清一色的前后端分离方式,作为服务端开发人员,我们有义务提供给各个客户端良好的开发文档,以方便对接,减少沟通时间,提高开发效率:对 ...
随机推荐
- Linux Shell常用技巧(二)
七. grep家族: 1. grep退出状态: 0: 表示成功: 1: 表示在所提供的文件无法找到匹配的pattern: 2: 表示参数中提供的文件不存在. 见如 ...
- oracle 数据库更新 新增 修改 删除
数据增加 INSERT INTO 表名称 [(字段,字段,...)] VALUES (值,值,...) ; 考虑到日后代码的可维护性,一定要使用完整的语法进行数据的增加. 数据修改 UPDATE 表名 ...
- iOS开发-Object-C获取手机设备信息(UIDevice)
一.获取UiDevice设备信息 // 获取设备名称 NSString *name = [[UIDevice currentDevice] name]; // 获取设备系统名称 NSString *s ...
- Windows下修改iTunes备份路径
0.准备工作: 关闭itunes 在任务管理器中杀掉iTunes开头的服务 1,找到iTunes默认备份路径:C:\Users\xxx\AppData\Roaming\Apple Computer\M ...
- CATransform3D 使用
struct CATransform3D { CGFloat m11(x轴缩放), m12(y轴切变), m13, m14(x轴拉伸); CGFloat m21(x轴切变), m22(y轴缩编), m ...
- 学习sbtenv
背景 最近由于工作需要, 我总是在不同的scala项目间流动开发. 这就遇到一个很棘手的问题, 这几个项目用的sbt版本不一致, 老项目用的是 sbt 0.13.15, 新项目用的是 sbt 1.0. ...
- mysql 5.7.12 winx64安装配置方法图文教程
这篇文章主要为大家分享了mysql 5.7.12winx64安装配置方法图文教程,感兴趣的朋友可以参考一下 之前安装mysql时未做总结,换新电脑,补上安装记录,安装的时候,找了些网友的安装记录, ...
- 20155211 Exp1 PC平台逆向破解(5)M
20155211 Exp1 PC平台逆向破解(5)M 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入 ...
- Linux下开发python django程序(Session读写)
1.登陆设置session信息 def loginsession(req): if req.method == 'POST': loginform = LoginForm(req.POST) if l ...
- 三层BP神经网络的python实现
这是一个非常漂亮的三层反向传播神经网络的python实现,下一步我准备试着将其修改为多层BP神经网络. 下面是运行演示函数的截图,你会发现预测的结果很惊人! 提示:运行演示函数的时候,可以尝试改变隐藏 ...