RESTful  Web APIs设计风格

RESTful(Representational State Transfer,简称REST)是一种网络Web程序的设计风格和开发方式。

一、RESTful简介

在开发Web应用时,可以采用前后端不分离模式或前后端分离模式。

1. 前后端不分离模式

前后端不分离模式的代码耦合度比较高,前端页面看到的效果都是由后端控制的,这种Web应用一般是纯网页应用,基本不存在前后端之间的接口交互。

2. 前后端分离模式

前后端分离模式中,后端仅返回前端所需的数据,不渲染HTML页面,不控制前端的效果。前端和后端之间通过接口来传递数据,后端返回的数据通常采用json格式的数据,前端不管是网页(PC端)还是APP(移动端),都可以解析后端返回的数据,然后自己渲染页面效果。

后端开发的视图函数或视图类都被称为接口,或者API(Application Programming Interface,应用程序编程接口)。接口用来处理数据库中的数据,然后将处理后的数据返回给前端,一个接口通常只做一件事(查询、增加、修改、删除)。这样,前端通过访问对应的接口来对数据进行增删改查。

大部分Web应用采用的都是前后端分离模式,RESTful 接口设计方式是前后端分离的Web最常用的接口设计方式。

RESTful 接口设计方式定义了很多容易理解和方便实现的设计风格,通过接口文档,前端程序员和后端程序员可以顺畅沟通。通过接口文档,可以快速了解一个陌生项目的业务。

RESTful 接口设计方式不是一种必须遵守的语法或规则,只是采用这种方式,会享受到 RESTful 带来的种种便利,下面就开始详细了解 RESTful 。

二、RESTful 中HTTP请求方式的定义风格

所有的 Web 服务都使用 HTTP 来发送网络请求,只是使用的方式不同。

不同的 HTTP 请求方式对应对数据的不同操作,请求方式由 HTTP 动词来表示,如 GET,POST,PUT,DELETE。

在 RESTful 规范中,常用的 HTTP 动词有:

GET:     查询数据(一项或多项),对应数据库SELECTPOST:    新建数据,对应数据库CREATEPUT:     修改数据(提供对象改变后的完整数据),对应数据库UPDATEPATCH:   修改数据(只提供对象被修改的属性),对应数据库UPDATEDELETE:  删除数据,对应数据库DELETEHEAD:    获取对象的元数据OPTIONS: 获取信息,资源的哪些属性是可以改变的

在对同一个数据库进行操作时,使用不同的请求方式对应的操作是不相同的,通过不同的 HTTP 请求方式,来区分对数据库的增删改查操作。

需要注意的是, PUT 和 PATCH 两种请求方式都是对数据进行修改操作, PUT 需要提供修改后的完整数据,PATCH 只需要提供修改了的属性数据就可以了。如,有一个 Computer 的数据库,Computer 有两个属性颜色 color 和发布日期 date ,修改某一条数据的 color 属性,使用 PUT 请求方式修改时,不仅需要发送修改后的 color ,还需要把 date 一起带上,而 PATCH 只发送 color 就可以了。

三、RESTful 中URI路径的定义风格

所有的 Web 服务都使用 URI ,只是使用的方式不同。

URI 是 Web 前端与后端进行数据交互的路径,是用户与 Web 服务器交互时传递信息的接口。

路径可以理解成网址,每个路径对应一个网址,每个网址对应一种资源,资源就是后台数据库中的数据对象。

在 RESTful 规范中,将资源名作为路径。资源对象是一个名词,所以路径中只能是名词(资源对象名),不能是动词,而且所用的名词往往与数据库的表名对应。

如数据库中有一个 Phone 的数据库,则对应的路径如下:

GET /phones      获取phones列表的信息POST /phones     新增一个phone对象GET /phones/7    获取phone7的信息PUT /phones/7    修改phone7的信息DELETE /phones/7 删除phone7的信息

对于同一个数据库的操作,一般都是使用这个数据库的名词来作为路径。而且,不管操作单条数据或多条数据,名词都是使用复数形式,如果是单条数据,则会跟一个 id 。

《RESTful Web APIs》中的示例:

四、RESTful 中返回状态码的定义风格

定义了 HTTP 请求方式和 URI 路径,向后端发送请求,后端会返回数据,这时候就会有返回状态码。

对于 HTTP 请求,返回的状态码,常见的如下:

1xx:返回相关信息,服务器成功接收部分请求,要求继续提交其余请求才能完成整个处理过程。

2xx:操作成功,服务器成功接收请求并已完成整个处理过程,常用200(OK 请求成功)。

3xx:重定向,为完成请求,需进一步请求,常用302(所请求的页面已经临时转移至新的url)。

4xx:客户端的请求有错误,常用404(服务器无法找到被请求的页面)。

5xx:服务器端出现错误,常用500(请求未完成,服务器遇到不可预知的情况)。

在 RESTful 规范中,对应上面的请求方式,常见的返回状态码如下:

200 [GET]:服务器成功返回用户请求的数据201 [POST/PUT/PATCH]:用户新建或修改数据成功204 [DELETE]:用户删除数据成功400 [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作401 [*]:表示用户没有权限(令牌、用户名、密码错误)403 [*] 表示用户得到授权,但是访问是被禁止的404 [*]:服务器无法找到被请求的页面500 [*]:服务器发生错误,用户将无法判断发出的请求是否成功

在返回状态码中,不同请求方式成功后,返回的状态码不一样。

五、RESTful 的其他相关内容

RESTful Web APIs 设计风格的主要规范就是上面几点,此外,还有很多相关的规范,如:

1. 返回数据尽量使用 JSON 格式。

2. 当一个 URI 同时对多个数据库进行操作时,可以拼接在一起。

如同时操作 Computer 和 Phone 数据库,可以 /computers/{computer_id}/phones/{phone_id} 。

3. 通过查询字符串来体现过滤信息。

RESTful 是一种设计风格,在使用时可以只遵守适合自己项目的规范,灵活应用。

RESTful 是与编程语言分离的,使用任何一门语言来编写 Web API,都可以采用 RESTful 风格,如 JAVA,Python,PHP 等。

如果想了解更过关于 RESTful Web APIs 的内容,您可以登陆 RESTful Web APIs 的网站: http://www.restfulwebapis.org/  ,点击  RESTful Web APIs >> Download RESTful Web Services (PDF) 下载PDF版的书《RESTful Web APIs》来阅读。(下载的是英文版,主要关注 RESTful 包含哪些部分,对主要内容看一下,具体理解结合开发过程来理解)。

RESTful  Web APIs设计风格相关推荐

  1. Java RESTful Web Service实战(第2版)

    Java核心技术系列 Java RESTful Web Service实战 (第2版) 韩陆 著 图书在版编目(CIP)数据 Java RESTful Web Service实战 / 韩陆著. -2版 ...

  2. jboss7 Java API for RESTful Web Services (JAX-RS) 官方文档

    原文:https://docs.jboss.org/author/display/AS7/Java+API+for+RESTful+Web+Services+(JAX-RS) Content Tuto ...

  3. java官方 jax rs_jboss7 Java API for RESTful Web Services (JAX-RS) 官方文档

    原文:https://docs.jboss.org/author/display/AS7/Java+API+for+RESTful+Web+Services+(JAX-RS) Content Tuto ...

  4. Restlet入门例子 - RESTful web framwork for java

    RESTful系列文章索引 Restlet入门例子 - RESTful web framwork for java [原创]Jersey入门例子 官方网站介绍: http://www.restlet. ...

  5. WCF实现RESTFul Web Service

    共同学习了前面一些概念,终于开始正题了哈.RESTful的Web Service调用直观,返回的内容容易解析.这里先会描述一个简单的场景--Web Service提供一个方法来搜索个人信息,传入人名, ...

  6. Jboss RestEasy构建简单的RESTful Web Services示例(1)

    2019独角兽企业重金招聘Python工程师标准>>> 项目上要用到webservice,鉴于现在restful webservice比较流行,打算用restful来建立webser ...

  7. 如何实现RESTful Web API的身份验证

    最近想拿一个小项目来试水RESTful Web API,项目只有几个调用,比较简单,但同样需要身份验证,如果是传统的网站的话,那不用说,肯定是用户名+密码在登录页获得登录Token,并把登录Token ...

  8. RESTful Web Services初探

    RESTful Web Services初探 作者:杜刚 近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTf ...

  9. JAX-RS(Java API for RESTful Web Services)常用注解

    为什么80%的码农都做不了架构师?>>>    概述 JAX-RS(Java API for RESTful Web Services)是Java 提供用于开发RESTful Web ...

最新文章

  1. 【Leetcode】刷题的开始
  2. Android开发---Activity的生命周期
  3. 如何在 Flutter 中禁用默认的 Widget 飞溅效果
  4. Python学习笔记:入门(2)
  5. python enumerate用法总结_python enumerate用法总结
  6. C#学习笔记-Windows窗体自定义初始位置
  7. 【转】Google Maps Android API V2的使用及问题解决
  8. Java Web-网页基础-HTML-CSS
  9. 更小的刘海和更宽的5G天线,下一代iPhone你期待吗?
  10. Java方法实现是什么意思_Java中实现可调用的最佳方法是什么,需要一段时间才能完成...
  11. 孙玄:“玄姐”,特立独行的架构师
  12. 几何图形计算器的设计与实现----课程设计任务书
  13. UE4自定义资源和编辑器(二):创建自定义编辑器
  14. unix服务器日志文件,UNIX 系统日志
  15. 象棋大战 v1.075 免费
  16. xml读取出现中文乱码
  17. 多边形颜色渐变填充C语言,vb6:用渐变填充多边形
  18. const 定义数组问题
  19. 前端HTML+CSS+JS
  20. 区块链在改善网络安全方面的潜力?

热门文章

  1. Java关键字(六)——super
  2. MySQL 大表优化方案,收藏了细看!
  3. 一些需要禁用的PHP危险函数
  4. 13.Axis创建webservice客户端和服务端
  5. java特性,健壮性,程序设计风格及文档
  6. 0-11 NFS与TFTP服务器配置
  7. Google大数据三论文
  8. jQuery 方法 属性
  9. 面试:String 常量池
  10. 容器编排技术 -- Kubernetes kubectl annotate 命令详解