REST全称是Representational State Transfer,中文意思是表述性状态转移。不管是英文还是中文解释,恐怕一眼看上去都难得其意!
那究竟指的是什么的表述? 其实指的就是资源。任何事物,只要有被引用到的必要,它就是一个资源。要让一个资源可以被识别,需要有个唯一标识,在Web中这个唯一标识就是URI(Uniform Resource Identifier),标识的资源可能是服务器上的一个文件,不过,也可能是一个邮件地址、新闻消息、图书、人名、Internet主机或者任何其它内容。URI既可以看成是资源的地址,也可以看成是资源的名称,它包含URL和URN。

  • URL = Universal Resource Locator 统一资源定位符
    URL唯一地标识一个资源在Internet上的位置。不管用什么方法表示,只要能定位一个资源,就叫URL。
  • URN = Universal Resource Name 统一资源名称
    URN它命名资源但不指定如何定位资源,比如:只告诉你一个人的姓名,不告诉你这个人在哪。

一、URL 设计

RESTful 的核心思想就是,客户端发出的数据操作指令都是"动词 + 宾语"的结构。简单来说就是URL定位资源,用HTTP动词描述操作。
比如用GET来表示读取,POST表示新建,PUT表示更新,PATCH表示更新,但通常是部分更新,DELETE表示删除。

1.宾语必须是名词

宾语就是 API 的 URL,是 HTTP 动词作用的对象。它应该是名词,不能是动词。

GET /article
2.复数 URL

没有统一的规定,但是常见的操作是当要读取一个集合要用复数形式。

GET /articles
3.避免多级 URL

当资源需要多级分类时,比较好的做法是,除了第一级,其他级别都用查询字符串表达。这种URL不仅利于扩展,语义也更加明确。

GET /articles?published=true

二、状态码

状态码表示必须明确
  • 通常来说:1xx表示相关信息,2xx表示操作成功,3xx表示重定向,4xx表示客户端错误,5xx表示服务器错误。RESTful就要求将这五类按不同请求方式进行细分。

  • 以GET为例

200(OK)——表示已在响应中发出
204(无内容) —— 资源有空表示
301(Moved Permanently) —— 资源的URI已被更新
303(See Other) —— 其他(如,负载均衡)
304(not modified)—— 资源未更改(缓存)
400 (bad request)—— 指代坏请求(如,参数错误)
404 (not found)—— 资源不存在
406 (not acceptable)—— 服务端不支持所需表示
500 (internal server error)—— 通用错误响应
503 (Service Unavailable)—— 服务端当前无法处理请求

三、服务器回应

1.不要返回纯本文

API 返回的数据格式,不应该是纯文本,而应该是一个 JSON 对象,因为这样才能返回标准的结构化数据。所以,服务器回应的 HTTP 头的Content-Type属性要设为application/json。
客户端请求时,也要明确告诉服务器,可以接受 JSON 格式,即请求的 HTTP 头的ACCEPT属性也要设成application/json。

2.发生错误时,不要返回 200 状态码

状态码反映发生的错误,并将具体的错误信息放在数据体里面返回。在发生错误时也返回200状态码,这种做法是不恰当的。

3.提供链接

在回应中,给出相关链接,便于下一步操作。这样的话,用户只要记住一个 URL,就可以发现其他的 URL。这种方法叫做 HATEOAS。

HATEOAS(Hypermedia as the engine of application state),超媒体即应用状态引擎。它是REST架构的主要约束。“hepermedia”表示任何包含指向图片、电影、文字等资源的链接,Web是超媒体的经典例子。HATEOAS背后的思想其实非常简单,就是响应中包含指向其它资源的链接。客户端可以利用这些链接和服务器交互。

超媒体是什么?
当你浏览Web网页时,从一个连接跳到一个页面,再从另一个连接跳到另外一个页面,就是利用了超媒体的概念:把一个个把资源链接起来。
要达到这个目的,就要求在表述格式里边加入链接来引导客户端。在《RESTful Web Services》一书中,作者把这种具有链接的特性成为连通性。
这一特性应用特别广泛,比如创建订单后通过链接引导客户端如何去付款。

————愿你在迷茫时,坚信你的珍贵,爱你所爱,行你所行,听从你心,无问西东。

RESTful API?What is it?相关推荐

  1. 深入探索REST(1):如何设计好的RESTful API?

    REST架构风格最初由Roy T. Fielding(HTTP/1.1协议专家组负责人)在其2000年的博士学位论文中提出.HTTP就是该架构风格的一个典型应用.从其诞生之日开始,它就因其可扩展性和简 ...

  2. 如何设计好的RESTful API?

    REST架构风格最初由Roy T. Fielding(HTTP/1.1协议专家组负责人)在其2000年的博士学位论文中提出.HTTP就是该架构风格的一个典型应用.从其诞生之日开始,它就因其可扩展性和简 ...

  3. 虚拟研讨会:如何设计好的RESTful API?

    http://www.infoq.com/cn/articles/how-to-design-a-good-restful-api/ REST架构风格最初由Roy T. Fielding(HTTP/1 ...

  4. 如何设计出优秀的Restful API?

    1 你一直在错误的使用http协议 现在微服务真是火的一塌糊涂!大街小巷,逢人必谈微服务,各路大神纷纷忙着把自家的单体服务拆解成多个Web微小服务!而作为微服务之间通信的桥梁,Web API的设计就显 ...

  5. whitelabel error page什么意思_什么是RESTful API?总算能说清楚了

    要弄清楚什么是RESTful API,首先要弄清楚什么是REST.REST -- REpresentational State Transfer,英语的直译就是"表现层状态转移". ...

  6. react 访问后端_react前端用nginx怎么配置跨域访问后端restful api?

    开发机器是windows,windows中安装了centos虚拟机做restful api服务器,在浏览器中可以正常访问该api服务器: http://192.168.33.3:8080/articl ...

  7. restapi是什么意思_深入理解什么是RESTful API ?

    前言:最近两年很火爆的网络框架Retrofit,使用它的时候,查看文档会告诉你,要求后台的服务器哥们必须符合REST规范给你设计接口,作为安卓开发工程师来说,我就很奇怪了,REST规范到底是啥?本着极 ...

  8. 什么是RESTful API?

    一. 定义 Rest的全称是Representational State Transfer,2000年由Roy Fielding发表在他的博士论文中,首次提出了Restful的概念.Restful 做 ...

  9. 为什么少有人使用RESTful API?

    RESTful API 想要回答这个问题,首先得知道RESTful风格的API是什么样的. 接下来看看一个完整的RESTful API是怎么形成的. Richardson Maturity Model ...

  10. 框架下cookie的使用_为什么自动化运维系统越来越多使用都RESTful API?

    Flask是轻量级.易于采用.文档化和流行的开发RESTful API的非常好的选择,也是笔者在工作中最常用的Flask Web框架之一.从根本上说,Flask是建立在可扩展性和简单性的基础之上的.F ...

最新文章

  1. python学习笔记(05)
  2. Linux网络模块全局变量,()不是Linux系统的特色.
  3. 前端学习(2989):vue+element今日头条管理--项目结束
  4. [转载] Java中Array(数组)转List(集合类)的几种方法
  5. 怎么调安卓软件的dpi_无线鼠标怎么选、性价比高的罗技鼠标(M系列)推荐
  6. Inside the Linux Operating System[1]
  7. Linux网络命令之 `Hping3`
  8. 【LLS-Player】VS构建
  9. [数据科学] 通过基因表达监测进行肿瘤预测
  10. PHPCAS客户端搭建教程
  11. 服务网格——后 Kubernetes 时代的微服务(前言)
  12. UG二次开发GRIP创建注释
  13. Ubuntu下3G上网配置详解
  14. JAVA虚拟机JVM工作原理
  15. ArcMap 导入 wrl_一键同步!CODING 现已支持导入 GitHub 仓库
  16. 12306官网页面html,新版12306网址页面以及订票系统功能介绍
  17. python视频格式转化
  18. C++ const_cast用法
  19. 物流快递APP开发简单介绍
  20. DVWA暴力破解LOW级别 爆破时间过长 字典

热门文章

  1. 人工智能普及应用面临的三大挑战
  2. 触发器基础知识(中)
  3. FOC电动车控制器代码 原理图 pcb 无刷电机FOC控制量产方案,原理图,PCB,源代码
  4. 产品读书《Don’t make me think》
  5. 个人总结问卷调查,头脑风暴,焦点小组的区别
  6. 查询今天比昨天温度高的日期
  7. 【Google Play】管理目标受众群体 ( 加入“亲子同乐计划“ | 应用受众覆盖所有年龄段 )
  8. 推送本地项目到gitee
  9. HTML基础知识(一):行内元素,块级元素,行内块元素
  10. java定时14点30分_单机定时任务的四种基本实现方式