当前位置:首页 > 技能相关 > .NET > 正文内容

ASP.NET code 一、REST简介

admin2年前 (2023-02-20).NET2590 修订时间:2023-02-21 08:01:00

概述

REST,全称为REpresentational State Transfer,即表述性状态传递,它是一种应用程序的架构风格,用于构造简单、可宛、高性能的Web应用程序。REST提出了一系列约束,遵循这些约束的应用程序称为RESTful API应用。

1、API与REST

1.1 什么是API

API全称Application Programming Interface,即应用程序编程接口,我们在开发应用程序时经常用到。API作为接口,用来“连接”两个不同的系统,并使其中一方为另一方提供服务。

在Web应用程序中,Web API具有同样的特性,它作为一个Web应用程序,向外提供了一些接口,这些接口的功能通常是对数据进行操作(如获取或修改数据等),它们能够被外部应用程序,比如桌面应用程序、手机应用甚至其他Web应用程序(如ASP.NET Core MVC视图应用、单页Web应用)等访问并调用。

1.2 什么是REST

REST是一种基于资源的架构风格,在REST中,资源(Resource)是最基本的概念。由于REST以资源为中心,因此REST接口的端点(Endpoint)均以资源或资源集合结尾,它不像其他形式的Web服务一样以动词结尾,如api/GetUserlnfo或api/UpdateUserlnfo。在REST中,对资源的动作或操作是通过HTTP方法来完成的,如下:

GET http://api.domain.com/users/1234PUT http://api.domain.com/users/1234

上例中用到了两个HTTP方法,分别为GET与PUT,它们的作用分别是获取和更新指定资源。

1.3 REST 约束

REST定义了 6个架构约束(Constraint),遵循这些约束的Web服务是真正的RESTful服务,即REST风格的服务。如果一个系统违反了其中的约束,则不能称其为RESTfUl,这些约束包括如下。

1 ) 客户端-服务器(Client-Server)

客户端-服务器约束体现关注点分离原则,使客户端与服务端各自能够独立实现并独立开发,只要它们之间的接口不改变即可;客户端与服务端可以使用不同的技术或编程语言。

2) 统一接口(Unifbrm Interface)

统一接口是设计任何RESTful服务的基础,也是区别REST架构凤格与其他Web服务风格的最主要约束。统一接口约束本身又由4个子约束组成,分别如下:

资源的标识任何能够命名的对象都是一个资源,资源能够通过统一资源标识符来区别。
通过表述操作资源当请求一个资源时,服务器返回该资源的一个表述。该表述表示资源当前的状态,它由表述正文和表述元数据组成,格式通常为JSON、XML和HTML等。
自描述消息

客户端与服务器之间传递的每一条消息都应包含足够的信息,这些信息不仅包含了资源的表述,也包含了资源表述的相关信息,甚至包含了与该资源相关的其他操作信息

超媒体作为应用程序状态引擎

(HATEOAS)

服务器返回的资源表述中不仅要包含资源的表述,也应包含与之相关的链接,这些链接能够对资源执行其他操作,比如当获取资源时,返回的链接中包含更新该资源、删除该资源等链接。

3) 分层系统(Layered System)

分层系统约束能够使网络中介(如代理或网关等)透明地部署到客户端与服务器之间,只要它们遵循并且使用前面提到的统一接口约束即可;而客户端和服务端则都不知道网络中介的存在。中间服务器主要用于増强安全、负载均衡和响应缓存等目的。

4) 缓存(Cache)

缓存是Web架构中最重构的特性之一。客户端或网络中介均能够缓存服务器返回的响应,因此当服务器返回响应时,应指明该响应的缓存特性。对响应进行缓存将有助于减少数据获取延迟以及对服务器的请求,从而提高系统的性能。

5) 无状态(Stateless)

无状态约束将指明服务器不会记录或存储客户端的状态信息,反之,这些状态信息应由客户端来保存并维护,因此客户端对服务器的请求不能依赖于己发生过的其他请求,当客户端请求服务器时,必须在请求消息中包含所有与之相关的信息(如认证信息等)。

6) 按需编码(Code-On.Demand)

按需编码约束允许服务器临时向客户端返回可执行的程序代码(如脚本等),返回这些代码主要用于为客户端提供扩展性或自定义的功能。由于客户端必须理解并能够执行服务器返回的代码,因此这一约束増加了客户端与服务器之间的耦合,同时,这一约束是可选的。

2、HTTP协议

在几乎所有的情况中,REST是基于HTTP协议而实现的,因此深入了解HTTP协议是非常重要且必要的。

2.1 HTTP 简介

超文本传输(Hyper Text Transfer Protocol, HTTP)协议,是互联网上应用最为广泛的一种网络协议,也是基于TCP/IP协议的应用层协议。其中最为常见的浏览网页的过程,就是通过HTTP协议来传递浏览器与服务器之间的请求与响应的,其流程图如图1-1所示。

image.png

2.2 统一资源定位符

统一资源定位符,即通常所说的URL,代表网络上一个特定的资源。URL作为URI的子集,一个URL就是一个URL用于标识并定位资源。

2.3 媒体类型

当HTTP服务器对请求返回响应时,它不仅返回资源本身,也会在响应中指明资源的内容类型(Content Type),也称媒体类型。

比较常用的MIME类型及其意义如下:

text/plain:内容为纯文本,浏览器认为是可以直接展示的。
text/html:内容为HTML,即超文本标记语言,所有的HTML内容都使用这种类型。
image/jpeg:表示 JPEG 图片。
image/png:表示 PNG 图片。
application/json:表示 JSON 格式的数据。

2.4 HTTP 消息

HTTP是一个采用诸求/响应模式的协议。客户端想要获取资源,就应向服务器发岀请求,如果服务器能够正确处理来自客户端的请求,并且拥有客户端所请求的资源,它就能正确地响应,同时将资源返回给客户端。

HTTP请求消息和响应消息具有相似的结构,它们都包括以下4部分的内容。

起始行:即第一行,用于描述要执行的请求,或者是对应的状态,即成功或失败,这个起始行总是单行的。
HTTP消息头:这些消息头描述了请求或响应的相关属性、配置、对消息正文的描述等。
空行:指明消息头己经发送完毕。
消息正文:包含请求数据(如要创建的资源、HTML表单内容等),或响应中资源的表述,这一部分可以为空。

客户端请求如下:

GET / HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134
Accept-Language: zh-CN
Accept: text/html,application/xhtml+xml,application/xml;q=0.9Z */*;q=0.8
Upgrade-Insecure-Requests: 1
Accept-Encoding: gzip, deflate
Host: microsoft.com
Connection: Keep-Alive

服务端响应如下:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: ,,34aa387-d-1568eb00,'
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

HTTP请求是由客户端发出的消息,用于清求服务器执行某个操作,它的起始行包括以下3项。

HTTP方法:也称HTTP动词,如GET、PUT、POST等,它们描述要执行的动作。
请求目标:通常是一个URL,它代表所要访问的资源。
HTTP版本:通常是HTTP/l.lo

HTTP响应的起始行被称作状态行,包含以下3项。

协议版本:通常为HTTP/l.l o
状态码(Status Code):它表明请求是否成功,常见的状态码是200、404、500等。
状态文本(StatusText): —个简短的文本信息,用于描述状态码。

请求的起始行与响应的状态行,在上例中分别为GET/HTTP/1.1和HTTP/l.l 200 OK。

请求的最后一部分是它的正文。注意,并不是所有的请求都有正文,比如获取资源(GET)、获取资源元数据(HEAD),以及删除资源(DELETE)等请求,通常它们不需要正文,而那些要将数据从客户端发送到服务器的HTTP方法,它们若要创建资源或更新资源,就需要提供正文,比如POST和PUT等。

响应的最后一部分也是正文。与请求消息一样,不是所有的响应都有正文,状态码如201或204等的响应,不包含正文。响应消息的正文通常是所请求资源的表述。

2.5 HTTP 方法

HTTP定义了一组请求方法,以表明要对指定资源执行的操作。每一个请求消息都必须包括一个HTTP方法,该方法将告诉服务器当前请求要执行哪一种操作。常见的HTTP方法有GET、POST、PUT、DELETE、PATCH、HEAD 和 OPTIONS 等。

GET方法的作用是获取指定的资源,它并不会修改资源,因此GET方法是安全的;幕等
POST方法的作用是创建资源,POST方法不是安全方法;非幕等
PUT方法的作用是更新资源,因为PUT会修改资源,所以它也不是安全的方法。幕等
DELETE方法的作用是删除资源,它不是安全的;慕等
PATCH方法的作用是对资源进行部分更新,它与PUT方法的区别是:PUT会更新指定资源的全部内容,
而PATCH可以根据需要仅更新资源的部分字段或属性;
HEAD方法与GET方法相同,但它并不返回消息正文,在响应消息中仅包含响应状态码与消息头,该方
法常用来检测资源是否存在以及获取资源的元数据;
OPTIONS方法用于获取资源支持的操作,服务器在返回的响应中会包含Allow消息头,它的值为HTTP
方法列表,例如:Allow: GET, POST

2.6 HTTP消息头

客户端和服务器之间的请求消息与响应消息中均包含消息头,用来传递附加信息。一个消息头由消息头名称和它的值组成,中间用冒号":”隔开,比如Content-Type: text/plaino ;HTTP请求与响应中均可包含多个消息头。

2.7 状态码

HTTP响应状态代码由3个数字组成,用于指明HTTP请求的结果。在状态码后会有一个状态文本,它以文字形式简单描述状态的信息,如200 0K、404 Not Found和500 Internal ServerError等。根据其表述意义,状态码可分为以下5类。

1xx:信息,服务器收到请求,需要请求方继续执行操作。
2xx:成功,服务器成功执行客户端所请求的操作。
3xx:更定向,需要进一步的操作以完成请求。
4xx:客户端错误,请求包含语法错误或请求内容不正确。
5xx:服务端错误,服务器在处理请求的过程中发生了错误。
 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/?id=292

分享给朋友:
返回列表

没有更早的文章了...

下一篇:.NET Async与Await 异步编程

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。