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架构

restful introduction

跟着github学习restful api设计

REST接口设计规范

restful api 设计指南




扫码关注公众号有惊喜

(转载本站文章请注明作者和出处 方志朋的博客

我是如何根据豆瓣api来理解Restful API设计的的更多相关文章

  1. 深入理解 RESTful Api 架构

    转自https://mengkang.net/620.html 一些常见的误解 不要以为 RESTful Api  就是设计得像便于 SEO 的伪静态,例如一个 Api 的 URL 类似于 http: ...

  2. 理解Restful api的意义

    RESTful API 只是API的设计规范或者是一套设计理论. 单就URL和Method这两个点,你可以这样理解: URL 是用来唯一标示一个互联网资源的,而 Method 是用来标识当前请求对该资 ...

  3. 理解 RESTful API 设计规范

    RESTful是目前最流行的API设计规范,它是用于Web数据接口的设计.从字面可以看出,他是Rest式的接口,所以我们先了解下什么是Rest. REST与技术无关,它代表的是一种软件架构风格,RES ...

  4. 理解RESTful API

    近日妹子向我求助RESTful API到底是个什么东西.原因是她们公司一个新启动的项目因为RESTful API起了争执.服务端同学坚持要用RESTful API,而前端同学则认为服务端用RESTfu ...

  5. 理解RESTful Api设计

    REST REST(REpresentational State Transfer)是 Roy Fielding 博士于 2000 年在他的博士论文中提出来的一种软件架构风格(一组架构约束条件和原则) ...

  6. Web API 入门系列 - RESTful API 设计指南

    参考:https://developer.github.com/v3/  https://github.com/bolasblack/http-api-guide HTTP 协议 目前使用HTTP1. ...

  7. 理解restful 架构 && RESTful API设计指南

    restful是前端和后端接口中都会使用的设计思想. 网站即软件,我们也常说的webapp,这种互联网软件采用的是“客户端/服务器”模式,建立在分布式体系上. 网站开发,也可以完全采用软件开发的模式, ...

  8. RESTful API的理解

    技术交流的时候遇到了这样的一个问题,被问及开发中用到的是不是Restful API,我说的是,我们现在用到的不属于完全是Restful API.因为我了解到的Restful API,是 通过具体的UR ...

  9. 好RESTful API的设计原则

    说在前面,这篇文章是无意中发现的,因为感觉写的很好,所以翻译了一下.由于英文水平有限,难免有出错的地方,请看官理解一下.翻译和校正文章花了我大约2周的业余时间,如有人愿意转载请注明出处,谢谢^_^ P ...

随机推荐

  1. RTT设备与驱动之硬件定时器

    硬件定时器可以对外部时钟进行计数,利用内部时钟进行定时. 函数 描述 rt_device_t rt_device_find(const char* name); 查找定时器设备 rt_err_t rt ...

  2. Python LoggerAdpater类

    Logger子类: import logging # create loggermodule_logger = logging.getLogger('spam_application.auxiliar ...

  3. 牛客网Java刷题知识点之什么是进程、什么是线程、什么是多线程、多线程的好处和弊端、多线程的创建方式、JVM中的多线程解析、多线程运行图解

    不多说,直接上干货! 什么是进程? 正在进行中的程序(直译). 什么是线程? 就是进程中一个负责程序执行的控制单元(执行路径). 见 牛客网Java刷题知识点之进程和线程的区别 什么是多线程? 一个进 ...

  4. JS在与lua的交互心得

    最近在写一个项目,前端技术使用的是Vue,在与lua的交互过程,是通过一个公共JS,前端调用公共js的方法给lua发送命令,lua接到命令,去执行一些方法,然后又通过回调返回到了前端,由于是第一次写这 ...

  5. C++ Knowledge series Conversion & Constructor & Destructor

    Everything has its lifecycle, from being created to disappearing. Pass by reference instead of pass ...

  6. appium-python-api中文文档

    来自https://wenku.baidu.com/view/533603ce581b6bd97e19eaa1.html mark,同时提供给需要使用python写脚本的童鞋们

  7. $("#Upfile").MultiFile();

    Jquery的multifile 1.多文件上传: 2.如上几个验证不重复,和限制上传数量的验证显示的是英文,改成中文文本时,如果不用国标解码,到时候提示框会出现乱码现象.所以一般需要中文显示的时候, ...

  8. Java项目性能瓶颈定位

    文章目标 当Java项目出现性能瓶颈的时候,通常先是对资源消耗做分析,包括CPU,文件IO,网络IO,内存:之后再结合相应工具查找消耗主体的程序代码.本文主要介绍系统资源消耗的分析过程,以及常用的Ja ...

  9. CentOS7.3下关于DHCP中继代理服务器的详细配置

    DHCP服务器只作用于局域网同一网段内,客户端是通过广播消息来获得DHCP服务器响应后才能得到IP地址的,但广播消息不能跨越子网,那么如何让客户端获取到DHCP服务器提供的IP地址呢?这就是DHCP中 ...

  10. 开始用PyTorch

    怎么说呢,TensorFlow有些实现过于蛋疼,我需要使用更实用的框架. 目前在读https://github.com/chenyuntc/pytorch-book