专栏首页洁癖是一只狗RESTful 原来是这个意思呀

RESTful 原来是这个意思呀

今天我们讲一个概念,什么是RESTful,讲之前我们先要知道几个概念。

什么是HTTP协议?

超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议[1]。HTTP是万维网的数据通信的基础。

设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。

HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。

HTTP协议是建立在客户端和服务器之间的一个协议,在客户端和服务器之间需要数据的传输,而传输数据的时候,我们要按照指定的规则或者叫协议去传输数据。

HTTP协议组成

  1. 请求协议信息
  2. 响应协议信息

请求协议信息组成

请求行,请求头,请求体

请求行包括请求方法,URI ,协议/版本(GET /cgi-bin/appmsg?begin=0 HTTP/1.1)

请求方法

1

GET

请求指定的页面信息,并返回实体主体。

2

HEAD

类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头

3

POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。

4

PUT

从客户端向服务器传送的数据取代指定的文档的内容。

5

DELETE

请求服务器删除指定的页面。

6

CONNECT

HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。

7

OPTIONS

允许客户端查看服务器的性能。

8

TRACE

回显服务器收到的请求,主要用于测试或诊断。

9

PATCH

是对 PUT 方法的补充,用来对已知资源进行局部更新 。

‍‍

请求体:承载传输的具体数据,不过请求体中的数据表现形式有三种,这三种都是通过form表单的enctype属性来决定的

  • application/x-www-form-urlencoded:会对中文进行URL编码,并且多个参数以&连接,上传文件只能上传文件名称。
  • text/plain:纯文本方式,不会对中文进行URL编码,不会使用&连接多个key-value参数,上传文件只能上传文件名称。
  • multipart/form-data:多部件表现形式,这种方式主要可以完成文件上传,可以将上传的文件名称和文件内容都传递给服务器端。

响应协议信息组成

状态码,响应头,响应体

状态码

1**

信息,服务器收到请求,需要请求者继续执行操作

2**

成功,操作被成功接收并处理

3**

重定向,需要进一步的操作以完成请求

4**

客户端错误,请求包含语法错误或无法完成请求

5**

服务器错误,服务器在处理请求的过程中发生了错误

常用状态码

200 :请求成功。一般用于GET与POST请求。

301:永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替。

304:未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源。

305:使用代理。所请求的资源必须通过代理访问。

400:客户端请求的语法错误,服务器无法理解。

401:请求要求用户的身份认证。

403:服务器理解请求客户端的请求,但是拒绝执行此请求。

404:服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面。

410:客户端请求的资源已经不存在。

500:服务器内部错误,无法完成请求。

503:由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中。

以上就是HTTP的一些概念,现在我们看看RESTful

REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。

REST(Representational State Transfer :表述性状态转化)简称REST,描述了一个架构样式的网络系统 ,比如 web 应用程序。

REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。

要理解RESTful架构,最好的方法就是去理解Representational State Transfer这个词组到底是什么意思,它的每一个词代表了什么涵义。如果你把这个名称搞懂了,也就不难体会REST是一种什么样的设计

1.资源(Resources)

所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。

2.表现层(Representation)

"资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。

比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。

3.状态转化(State Transfer)

访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。

互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。

客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

那如何设计RESTful应用程序的API

其实这个用语言不好说,举个例子吧,我们要获取一个人的账户

 /bank/account?id=1   GET 

注意一点就是,URI不能有动词,动词应该放在HTTP协议中,像GET DELETE PUT POST,URI也不应该版本号,版本号应该放到HTTP请求头信息的Accept字段中进行区分。

本文分享自微信公众号 - 洁癖是一只狗(rookie-dog)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Nginx可以做什么? 看完这篇你就懂了!

    之前我们介绍了LVS和HAProxy两种负载均衡器,今天我们来介绍另外一种负载均衡器Nginx。当然Nginx不只具有负载均衡功能, 还有很多很强大的功能。今天...

    小土豆Yuki
  • 性能优化-字符串(String)

    字符串日常开发中,我们经常使用,但是我们往往会忽略他的性能问题,高效的的使用字符串,可以提高整体系统的性能,我们按照下面几个方面说明

    小土豆Yuki
  • 雷锋教你阿里面试题

    看到结果。我们的结论完全正确,有的面试官也可能问一下loadClass在什么时候执行静态代码块呢,其实当执行newInstance()时候才会执行静态代码块。

    小土豆Yuki
  • HTTP协议基础学习

    版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://b...

    shaonbean
  • HTTP协议基础浅谈

    HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol。是从万维网服务器传输超文本到本地浏览器的传送协议。

    吾非同
  • 锦囊篇|一文遨游应用层

    从图中我们可以看到的例如HTTP、DNS、SMTP等一系列的协议都是在应用层这一层建立的。而这次我们主讲的就是面试中最常问到的HTTP和DNS了。

    ClericYi
  • HTTP协议详解,浏览器和服务器交互过程详解

    无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据...

    时间静止不是简史
  • 如何判断环境变量为空

    今天在看 Spark 的脚本的时候,发现很多变量都有用到 {VARIABLE+x} 这种格式,如下:

    runzhliu
  • 浏览速度慢?你的系统还没有升级到Http/2吗?

    KS Knowledge Sharing 知识分享 现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享 开篇HT...

    互扯程序
  • PowerBI的M与DAX之争

    前些日子,有一位读者留言一个问题,我写了个公式过去,来回几次都没有解决,最后发现她竟然把DAX公式写在了编辑查询器里,我是五十步笑百步,因为本人也犯过同样的错误...

    公众号PowerBI大师

扫码关注云+社区

领取腾讯云代金券