我是如何根据豆瓣api来理解Restful API设计的
1.什么是REST
REST全称是Representational State Transfer,表述状态转移的意思。它是在Roy Fielding博士论文首次提出。REST本身没有创造新的技术、组件或服务,它的理念就是在现有的技术之上,更好的使用现有的 web规范。用REST规范的web服务器,能够更好的展现资源,客户端能够更好的使用资源。每个资源都由URI/ID标识。REST本身跟http无关,但是目前http是与它相关的唯一实例。REST有着优雅、简洁的特性,本文是根据豆瓣api来谈谈自己对restful的一些理解。
2.URI规范
- URI(Uniform Resource Identifiers) 统一资源标示符
- URL(Uniform Resource Locator) 统一资源定位符
URI 的格式:
URI的格式定义如下:
URI = scheme "://" authority "/" path [ "?" query ] [ "#" fragment ]
- uri代表的是一种资源,要做到优雅、简洁。
- 最好在api地址标明版本
比如
https://api.douban.com/v2
- 关于分隔符“/”,比如:
"/"分隔符一般用来对资源层级的划分,比如:
https://api.douban.com/v2/book/1220562
表述了豆瓣api,version2下的图书仓库下的编号为1220562的图书。
- URI尽量使用“-”代替下划线“_“。
- URI统一使用小写字母
- URI不包含文件扩展名
- 使用?用来过滤资源,比如?limit=10 :指定返回10条记录。
- 不使用无意义的字符串、数字,要做到简洁。
3.正确使用method
- get -只用做资源的读取。
- post-通过用作创建一个新的资源。
- delete-通过用作资源的删除。
- put -通过用作更新资源或者创建资源
- head-只获取某个资源的头部信息。
比如 豆瓣图书api:
| name | method | api |
|---|---|---|
| 获取图书信息 | get | /v2/book/:id |
| 用户收藏某本图书 | post | /v2/book/:id/collection |
| 用户修改对某本图书的收藏 | put | /v2/book/:id/collection |
| 用户删除对某个图书的收藏 | delete | /v2/book/:id/collection |
- 另外,在一些不符合curd的情况下,使用 post。
- 把动作转换成资源
比如,上述接口中,用户收藏某本书对外暴露的接口是"/v2/book/:id/collection",收藏动作通过post方法来展现,而不直接写着api中,collection “收藏”,名次,动作直接转换成了资源。
###4.选择合适的状态码
http请求需要返回状态码,约定俗成的状态码能够帮助开发团队提高沟通效率。
- 2xx: 请求正常处理并返回
- 3xx: 重定向
- 4xx: 客户端请求有错误
- 5xx: 服务端请求有错误
比如豆瓣api返回的状态码说明:
| 状态码 | 含义 | 说明 |
|---|---|---|
| 200 | ok | 请求成功 |
| 201 | created | 创建成功 |
| 202 | accepted | 更新成功 |
| 400 | bad request | 请求不存在 |
| 401 | unauthorized | 未授权 |
| 403 | forbidden | 禁止访问 |
| 404 | not found | 资源不存在 |
| 500 | internal server error | 内部错误 |
5.使用通用的错误码
通用错误码,具体产品由具体产品api给出。比如豆瓣api:
| 错误码 | 错误信息 | 含义 |
|---|---|---|
| 999 | unknow_v2_error | 未知错误 |
| 1000 | need_permission | 需要权限 |
| 1001 | uri_not_found | 资源不存在 |
| … | … | … |
太多了,只列出几条,具体见豆瓣 api。
6. 安全
这部分内容不属于这篇文章,但是稍微说明下:
- 使用https
- 使用jwt验证
- 使用参数签名,防止参数被篡改。
- 使用权限验证,shiro ,或者自己建数据库(用户、角色、权限)
7.api文档
接口文档的编写至关重要,最好是写一个在线接口文档。接口文档能够方便团队查阅,减少不必要的沟通。如果对外公开api,api文档的质量直接反应了一个公司的技术水平,甚至一个公司的文化气质。
8.参考资料
本文参考了以下的资料:
扫码关注公众号有惊喜
(转载本站文章请注明作者和出处 方志朋的博客)
我是如何根据豆瓣api来理解Restful API设计的的更多相关文章
- 深入理解 RESTful Api 架构
转自https://mengkang.net/620.html 一些常见的误解 不要以为 RESTful Api 就是设计得像便于 SEO 的伪静态,例如一个 Api 的 URL 类似于 http: ...
- 理解Restful api的意义
RESTful API 只是API的设计规范或者是一套设计理论. 单就URL和Method这两个点,你可以这样理解: URL 是用来唯一标示一个互联网资源的,而 Method 是用来标识当前请求对该资 ...
- 理解 RESTful API 设计规范
RESTful是目前最流行的API设计规范,它是用于Web数据接口的设计.从字面可以看出,他是Rest式的接口,所以我们先了解下什么是Rest. REST与技术无关,它代表的是一种软件架构风格,RES ...
- 理解RESTful API
近日妹子向我求助RESTful API到底是个什么东西.原因是她们公司一个新启动的项目因为RESTful API起了争执.服务端同学坚持要用RESTful API,而前端同学则认为服务端用RESTfu ...
- 理解RESTful Api设计
REST REST(REpresentational State Transfer)是 Roy Fielding 博士于 2000 年在他的博士论文中提出来的一种软件架构风格(一组架构约束条件和原则) ...
- Web API 入门系列 - RESTful API 设计指南
参考:https://developer.github.com/v3/ https://github.com/bolasblack/http-api-guide HTTP 协议 目前使用HTTP1. ...
- 理解restful 架构 && RESTful API设计指南
restful是前端和后端接口中都会使用的设计思想. 网站即软件,我们也常说的webapp,这种互联网软件采用的是“客户端/服务器”模式,建立在分布式体系上. 网站开发,也可以完全采用软件开发的模式, ...
- RESTful API的理解
技术交流的时候遇到了这样的一个问题,被问及开发中用到的是不是Restful API,我说的是,我们现在用到的不属于完全是Restful API.因为我了解到的Restful API,是 通过具体的UR ...
- 好RESTful API的设计原则
说在前面,这篇文章是无意中发现的,因为感觉写的很好,所以翻译了一下.由于英文水平有限,难免有出错的地方,请看官理解一下.翻译和校正文章花了我大约2周的业余时间,如有人愿意转载请注明出处,谢谢^_^ P ...
随机推荐
- Java基础16-类与对象
1.如何创建一个类 public class Person{ //属性 String name; String genter; int age; //方法 public void eat(){ Sys ...
- BuildAssetBundles文件打包
BuildAssetBundles文件打包: public class BuildAssetBundlesTest : Editor { //定义打包文件路径 public static string ...
- (转)shell实例浅谈之产生随机数七种方法
一.问题 Shell下有时需要使用随机数,在此总结产生随机数的方法.计算机产生的的只是“伪随机数”,不会产生绝对的随机数(是一种理想随机数).伪随机数在大量重现时也并不一定保持唯一,但一个好的伪随机产 ...
- AngularJS directive 不执行
检查下directive的命名,是不是含有特殊符号和大写,全部改为小写就ok: 原因:html不支持骆驼峰命名,只支持小写:
- 利用DOS命令做伪装成图片的压缩包,看上去是图片其实是个压缩包用2条命令即搞定
在很多地方我们看到一张图片,然后把这张图片下载到本地,改后缀名为xx.rar,即变成了压缩包. 比如下面这个图片:(把以下图片保存到本地,后缀名xx.png 改为 xx.rar,解压试试) 怎么样,是 ...
- EF生成的表被更改后的错误
1.在Global.ascs设置 public class MvcApplication : System.Web.HttpApplication { protected void Applicati ...
- 北航oo作业第一单元小结
前言 在经过了三次艰辛的oo作业后,oo课程的第一单元告一段落,这一单元,我作为一个oo小白,开始了解oo的编程思想,也有了自己的一点心得体会.把笔粗成字,不当之处,还请各位大佬多多指教. 一.分析程 ...
- 单元测试模拟request后台
编写测试单元 @RunWith(SpringJUnit4ClassRunner.class) 让测试运行于Spring测试环境 @WebAppConfiguration是一个类级别的注释,用于声明Ap ...
- maven课程 项目管理利器-maven 5-1 课程总结 1星(2018-11-08 07:19)
1 maven windows环境搭建和配置环境变量 2 maven骨架和pom.xml 解析 3 命令行窗口常用的maven命令 4 仓库和坐标 5 maven Java项目 6 生命周期,依赖聚合 ...
- as3.0 动态文本属性大全
var my_fmt = new TextFormat();//常用样式 my_fmt.align = "center"; my_fmt.blockIndent = 50; //区 ...