【服务计算】REST API学习与设计——模仿GithubAPI设计博客网站API

news/2024/5/12 19:32:43/文章来源:https://blog.csdn.net/JKJKL1/article/details/103206838

文章目录

  • 什么是REST?
  • 了解Web API
  • 学习Github-API
  • 设计博客网站API
    • 获取用户信息
    • 获得某用户所有文章总览
    • 访问用户的某一个指定的文章
    • 查看某用户关注信息
    • 获取用户下的分类专栏文章
    • 发布文章
    • 发布评论
    • 修改文章
    • 删除文章
  • 错误处理
    • 404 Not Found
    • 400 Bad Request
    • 401 Unauthorized

什么是REST?

REST:全称Representational State Transferer,是Roy Fielding博士在他的博士论文中提出来的一种软件架构风格。注意它是一种风格,而不是某个标准或者某个框架。但是根据这中定义的风格编写Web程序,就会得到一个比较优质的系统。
好,回到REST的理解上,将其名字翻译过来是“表示层状态转移”,很难理解。不妨试着在这个短语前加上一个名词,Resources,资源表示层状态转移,这样理解起来就要方便得多了。
资源表示层状态转移,首先对象是对资源,也就是网络上传输的数据包括各种格式的。那么表示,就是URL的表示方法,用url来表示一个资源。那么状态转移呢?对应的就是HTTP中的请求:GET、POST、PUT等,通过这些请求实现资源状态的改变,这就是REST干的事情。
用知乎上一个高赞回答(@Ivony)概括一下,就是“URL定位资源,用HTTP描述操作”。

了解Web API

参考资料:廖雪峰老师的网站
当我们访问某个URL的时候,往往得到的是一个完整的html页面,包括了数据以及其渲染的模式,这样呈现出来的信息可就复杂得多了,包括图片、表格等形式的信息。可是如果返回的信息是JSON格式?或者直接是二进制字符?这样机器就能够直接解析,那么这就是一个API。
可以看出API将数据或者说资源以URL的形式存到一个地方,进程或者机器通过一些方法取读取、修改这些数据,从而达到提供服务的目的。
看到这里,是不是发现跟上面的REST有点像呀?对了这就是为什么两者一拍即合,REST这种风格立刻就流行起来了。
API就是将Web的功能封装成一个个url的形式,通过API对数据进行操作,分离了前后端代码。

学习Github-API

参考资料:GithubAPI
可以看到开头就说明了这个使用了v3的REST API请求,建议通过Accept header来明确请求的版本。
通过查阅资料我们可以发现,有的REST API设计的时候建议在url中加上相应的版本好,这样的话确实能够十分明确告诉使用者使用的是什么版本,而且有着这个信息就可以不需要向后兼容,而且开放API对于多用户来讲十分难以管理版本问题,加上版本好就能很好的把问题交给用户自己处理。但是这样也造成一个混乱,多了许多版本的时候需要迁移代码,版本本来和资源本身没有关系,URL是表示资源的(前面提到),加入版本号就使得URL的意思更加复杂。相反加在Header中使得url表示更简洁一点。不同的使用方式,导致不同的设计模式的选择。
这次就模仿Github使用默认版本号的方式来设计。
Github所有API访问通过HTTPS来进行,所有数据通过JSON方式进行传输。可以包含空白字段,使用null来表示,不会将其省略,保证信息完整。
访问api.github.com得到以下信息:
在这里插入图片描述
可以看到通过访问不同的url可以获取不同的资源数据。
首先需要了解以下HTTP的各个操作:

GET
GET 从所给URL中获取资源以及资源的表示方式。

POST
POST 在所给的 URI 处创建的新资源。

PUT
PUT 在所给的 URI 中创建或替换资源。

PATCH
PATCH 对 URI 中资源执行部分更新。

DELETE
DELETE 删除位于指定 URI 处的资源。

设计博客网站API

https://api.blog.com为例:

获取用户信息

GET /users/:usernameResponse:
{"login": "octocat","user_id": 1,"url": "https://api.blog.com/users/octocat","html_url": "https://blog.com/octocat","followers_url": "https://api.blog.com/users/octocat/followers","following_url": "https://api.blog.com/users/octocat/following{/other_user}","articles_url": "https://api.github.com/users/octocat/articles","type": "User","site_admin": false,"name": "octocat","company": "","location": "","email": "octocat@email.com","hireable": false,"followers": 20,"following": 0,"created_at": "2008-01-14T04:33:35Z","updated_at": "2008-01-14T04:33:35Z"
}

获得某用户所有文章总览

GET /users/:userame/articles
Response:
{"count": 10,{"articleID": 1,"category": "learning","category_id": "{id}","title": "articleTitle","article_url": "https://blog.com/:username/:article""readings": 10,"word_count": 1024,"content": "contents....""comment":[{"id": 1,"user": "username","content": "xxx",},{...}],"created_at": "2008-01-14T04:33:35Z","updated_at": "2008-01-14T04:33:35Z",},{"articleID"= 2,....},...
}	 

访问用户的某一个指定的文章

GET /users/:username/articles/{article_id}
Response:
{"articleID": 1,"category": "learning","category_id": "{id}","title": "articleTitle","article_url": "https://blog.com/:username/:article""readings": 10,"word_count": 1024,"content": "contents....""comment":[{"id": 1,"user": "username","content": "xxx",},{...}],"created_at": "2008-01-14T04:33:35Z","updated_at": "2008-01-14T04:33:35Z",
}

查看某用户关注信息

GET /users/:username/followers
Response:
{"user_id": 5,"url": "https://api.blog.com/users/:username","html_url": "https://blog.com/:username","created_at": "2008-01-14T04:33:35Z","updated_at": "2008-01-14T04:33:35Z",
}

获取用户下的分类专栏文章

GET /users/:username/category
Response:
{"category": "learning","category_id": "{id}","count": 11,"articles": [{"articleID": 1,"category": "learning","category_id": "{id}","title": "articleTitle","article_url": "https://blog.com/:username/:article""readings": 10,"word_count": 1024,"content": "contents....""comment":[{"id": 1,"user": "username","content": "xxx",},{...},],}]
}

发布文章

POST /user/:username/article

获得Response包括自动生成文章ID,文章标题、分类等信息。

发布评论

POST /user/:username/articles/:ariticle_id/comment

以当前登录用户作为发起者,对某个文章发起评论。

修改文章

PUT /user/:username/article/:article_id

删除文章

DELETE /user/:username/article/:article_id

错误处理

HTTP错误状态码非常多,常用的就是以下几个

API 正常工作 (200, 201)
客户端错误 (400, 401, 403, 404)
服务端错误 (500, 503)

404 Not Found

404 Not Found
请求失败,请求所希望得到的资源未被在服务器上发现。通常在找不到资源时返回这个状态码。比如一些不存在的url,或者没有权限知道的,如私人权限的博客、未通过审核还没有成功发布的博客信息等。

400 Bad Request

由于包含语法错误,当前请求无法被服务器理解。通常在url后面会带有一些过滤信息(这里没有设计到),比如跳到某个小标题、指定分类条件之类的。又或者是用到POST、PUT等请求时,需要请求带有一定格式和必填字段,但是由于这些参数错误或者格式不全,就会导致请求不能被服务成功解析,返回400错误。

401 Unauthorized

当前请求需要用户验证。
通常在没有登录的状态下访问一些受保护的 API 时会用到这个状态码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_890882.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

相对定位父子元素触发mouseover和mouseout事件实验

最近做的一个项目中有个功能是鼠标移动到某一块id为A,然后A的子元素id为B在下方紧贴着父元素A显示出来,B里面的内容是鼠标移动到A元素上才请求服务端获取数据。 我使用了mouseover,mouseout事件,采用jquery的on方法。大致如下 $(…

相关网站(Github、个人博客等)的编程相关学习资源和可下载电子书导航,不定时更新

编程相关学习资源和可下载电子书项目导航,不定时更新 前言Python学习资源与书籍Python入门教程-By廖雪峰 -学习资源《Python进阶》-可下载电子书python深度学习入门 C#学习书籍 前言 作为广为人知的开源项目网址,Github已经被许多大牛玩出了花。理所当然…

爬虫练习——某网站上海房价分析

前言 实验数据来源自某看房网站,通过爬虫一共爬取了一千六百多条数据。能力有限,实验结果仅供参考。 该网站几乎没有什么反爬虫措施,原理很简单,所以关键就是定位自己想要的信息。 工具 1、爬虫工具:request&#x…

开源中国网站挂掉了...

现在是2013-08-24 18:48:19 有图为证:

基于C#和SQL SERVER的校园知识问答论坛网站的设计与实现

摘 要 本文使用Asp.Net Core 和MsSqlServer技术,详细说明开发校园知识论坛系统的开发。校园知识论坛系统是基本B/S模式的一种交互性极强的电子信息服务系统。它为使用者提供一个交流的平台,每一个用户都可以在上面问答知识,获取信息&#xff…

基于JavaScript和MySQL的文化平台网站的设计与实现

摘要 中国文化源远流长,自古就有文人雅士作诗赋词,舞文弄墨,尽显风雅。现今则有歌手作家思想成文,心绪为曲,亦现儒雅。文化是传承的,是流传不息的,也是众多人所追求的。从各种各样的文化中&…

基于Node.js中间层的微信图书借阅平台网站的设计与实现

1 引言 步入信息时代以来,互联网给人们的生活带来了翻天覆地的变化,互联网也不再简单地仅仅通过提供便利快捷的资讯服务来丰富我们的生活。互联网的出现打破了许多传统行业垄断的格局,互联网以其接入面广、信息即使、人人可参与等等性质&…

基于Keras和tensorflow深度学习Python实现的支持人脸识别和情绪分类的社区APP网站和微信小程序...

1 项目介绍 1.1 背景 视觉使人类得以感知和理解周边的世界,人的大脑皮层大约有 70%的活动在处理 视觉相关信息。计算机视觉即通过电子化的方式来感知和理解影像,以达到甚至超 越人类视觉智能的效果。 从 1966 年学科建立(MIT:TheS…

基于php与sqlite数据库的运动社交网站

一、总体设计 1.1 开发环境 本系统采用php作为主要开发语言,服务端主要使用php+sqliteApache,客户端使用htmlcssjs。用Apache作为服务器,采用sqlite作为后台数据管理系统。 开发环境:Windows 10 开发工具:p…

[源码和文档分享]基于C#实现的电影网站数据爬虫和电影网站

1 简介 1.1 背景 随着网络的发展,网购也越来越流行,人们可以在去各大电影院的网站方便的购票并选择自己喜欢的时间去影院观看。但电影院网站众多,人们可能为了寻找一个电影而奔波与各大网站,导致浪费大量时间在寻找电影资源上。本…

[源码和文档分享]基于JAVA FX实现的酒店预订系统网站

1 产品概述 参考酒店预订系统用例文档和酒店预订系统软件需求规格说明文档中队产品的概括描述。酒店预订系统主要是应用于网上预定远程酒店订单的在线系统,主要功能见用例图如下。 源码下载地址:https://www.write-bug.com/article/1441.html

[源码和文档分享]基于PHP和MYSQL数据库实现的公共考试报名管理系统网站

前 言 随着社会的快速发展,体力不再是我们唯一的生存方式了,人们也越来越注重自身的文化素养,随之而来的也有许多成人考试,为已经步入社会的人提供一个再学习的机会。 众所周知,作为学生,考试是我们必经的过…

[源码和文档分享]基于Python的Django框架实现的中式快餐厅管理信息系统网站

1 初步调研 随着餐饮业的连锁和国外餐饮巨头的进入,餐饮业的竞争将越来越激烈:要想在竞争中处于不败之地,必须在管理、服务等方面提高服务管理意识。面对当前餐饮业普遍的产业化程度低,管理手段、管理技术落后等问题,使…

[源码和文档分享]基于PHP和MYSQL数据库实现的libilibi电影论坛网站

一、需求分析 1.1 需求描述 1.1.1 用户相关功能 登录:前端输入用户名和密码,在数据库中完成查询,如果存在该用户, 则登陆成功,继续其他操作;如果不存在,则登录失败,提示用户名/密码错…

基于ASP.NET和SQL SERVER数据库的招聘网站设计与实现

摘 要 本课题是基于互联网与数据库技术的网上招聘网站,是先进的计算机科学技术和现代招聘理念相结合的产物,通过使用以ASP.NET技术为基础,基本实现网上招聘网站的基本功能,满足了求职者和招聘企业的需求,实现了招聘单位…

央视看上绿色P2P网站

4月18日, 2008国际III联竞走挑战赛在北京"鸟 巢"正式启动。借此契机,悠视网(UUSee. com)与 IBTV合作走进"鸟巢",进行长达7个小时网络直 播,吸引了诸多网友的H光。 悠视网采用新一代P2P传输技术和卫星宽带…

PHP网站的网页产生中文乱码的解决办法(以zend studio为例)

PHP网站的网页产生中文乱码的解决办法(以zend studio为例) 乱码原因很多,主要是因为多系统之间不协调,现阶段让源文件同浏览器编码一致,基本上能解决问题。 网页上显示乱码 很多人的解决方法是在PHP文件头添加下面的…

静静网站流量分析项目_0

最近打算把大数据从日志收集,数据存储,数据清洗处理,数据导出,可视化展示进行一个整合,汇总到静静网站流量分析项目,本篇先对该项目做一个简单的介绍。 1.业务背景 网站流量统计是改进网站服务的重要手段之一&#xf…

PHP使用Apache中的ab测试网站的压力性能

打开Apache服务器的安装路径(我用的是 WampServer),在bin目录中有一个ab.exe的可执行程序,它就是要介绍的压力测试工具。 在Windows系统的命令行下,进入ab.exe程序所在目录,执行ab.exe程序。注意直接双击无法正确运行。 d:(回车/进…

Flash脚本语言as学习扎记-摘自某小学网站

小学里头出现Flash的AS学习笔记..真让长天汗颜! AS基础-----------------------------------做过Flash动画的Flash爱好者们都知道,要做好一个Flash动画,AS是必不可少的,即使只是很简单的几句代码也能起到整个Flash画龙点睛的作用。这里我只简…