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 自动生成接口文档
目录 前言 结语 源码下载 前言 目前市场上主流的开发模式,几乎清一色的前后端分离方式,作为服务端开发人员,我们有义务提供给各个客户端良好的开发文档,以方便对接,减少沟通时间,提高开发效率:对 ...
随机推荐
- 谈谈我的js学习过程(二)——“Hello World!”
在<谈谈我的js学习过程(一)>中,我简单聊了一下我认为的javascript的学习方法,接下来我们可以尝试来写一个最简单的js代码. "Hello World!"对于 ...
- Linux Shell常用技巧(一)
一. 特殊文件: /dev/null和/dev/tty Linux系统提供了两个对Shell编程非常有用的特殊文件,/dev/null和/dev/tty.其中/dev/null将会丢掉所有写入它 ...
- sql函数:开窗函数简介
与聚合函数一样,开窗函数也是对行集组进行聚合计算,但是普通聚合函数每组只能返回一个值,而开窗函数可以每组返回多个值. 实验一比如我们想查询每个工资小于5000元的员工信息(城市以及年龄),并且在每行中 ...
- ios学习路线—Objective-C(新特性)
1.方法顺序无关 Objective-C类由声明文件h和实现文件m组成,所有的public方法都在h文件中声明,private方法可以写在m文件中,但是在早期的编译环境中需要注意方法的顺序,例如下面的 ...
- 用HTML编写淘宝页面
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- Django:settings中关于static静态文件目录的设置
django项目settings中关于静态资源存放位置的设置 主要涉及以下3项:STATIC_URL.STATICFILES_DIR和STATIC_ROOT 1.STATIC_URL 这项是必须配置的 ...
- 乘积尾零——第九届蓝桥杯C语言B组(省赛)第三题
原创 标题:乘积尾零 如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零? 5650 4542 3554 473 946 4114 3871 9073 90 4329 2758 7 ...
- JavaWeb总结(四)
使用Servlet发送服务器端响应信息 Servlet API中定义一个专门的接口类javax.servlet.http.HttpServletResponse用于创建HTTP响应,包括HTTP协议的 ...
- jQuery学习- 子选择器与可见性选择器
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- SP1716 GSS3 - Can you answer these queries III
题面 题解 相信大家写过的传统做法像这样:(这段代码蒯自Karry5307的题解) struct SegmentTree{ ll l,r,prefix,suffix,sum,maxn; }; //.. ...