在引见这些学问之前,我须要强调一下许多人存在的一个误区:HTTP的谓词和数据通报体式格局。绝大多数人打仗并运用的HTTP协定都是在网站编写的历程当中,在平常的WEB运用中,我们仅运用GET、POST两个谓词,其他谓词并不实用,在这一习惯下许多人有几个新鲜的认知:HTTP协定只实用于网站开辟,HTTP唯一两个谓词:GET/POST,HTTP挪用数据通报仅运用表单K-V的情势举行;在这类认知下,用这类作风开辟的RestApi常常会不三不四,运用ASP.NET WebAPi也会显得不三不四,平增贫苦。而我们首先要认识到,网站的数据交互只是HTTP运用的一个场景罢了,HTTP能够通报种种情势的数据。
我们从HTTP的第一行提及:HTTP的第一行包括三个信息:谓词、URL、HTTP协定版本。三个数据运用空格离隔。
谓词:关于RestFul API来讲谓词是非常主要的一个元素,WEB API就是运用谓词作为默许的路由体式格局,最常常使用的谓词有:POST\DELETE\PUT\GET,这四个谓词对应了“增、删、改、查”四个行动(POST和PUT谁是增谁是改差异材料总有差异的说法,我其实有稍微有点疑心啦……有定义说PUT是幂等操纵,而POST不是,那PUT就更偏重于改而POST更偏重于增)。最常常使用的谓词即为这四个,也有其他谓词具有差异的语义:
HEAD:仅返回相应头部,不包括Body
TRACE:对数据传输历程举行诊断
OPTIONS:请求 Web 服务器示知其支撑的种种功用
另有其他谓词,假如须要能够查询相干文档,但并不常常使用。
个中,GET,DELETE不包括BODY,PUT,POST能够包括BODY。而假如一个谓词包括了语义以外的操纵,比方GET中带BODY,POST用于删除资本这类操纵也是被许可的,称之为谓词的重载,虽然HTTP能够支撑谓词的重载,但并不发起运用,由于不符合规范语义。
URL : URL定义了一个资本,比方www.example.com/person 定义了person为一个资本,连系上面所引见的谓词,我们供应Person一组操纵:
GET www.example/person/1 即猎取ID为1的用户的信息
POST www.example/person/ (BODY中包括Person的形貌) 建立一个Person资本
PUT www.example/person/1 (BODY中包括Person的形貌) 更新一个Person资本
DELETE www.example/person/1 删除ID为1的Person资本
HTTP版本:
现在主要运用的是HTTP1.0 和 HTTP1.1协定,HTTP2.0协定正在提高阶段,用的还不是许多。HTTP1.0 和HTTP1.1区分很小,个中的差异关于RestFul来讲影响并非很大。细致的差异人人能够查询相干文档。
HTTP的第一行内容就是这些,接下来会有一个\r\n来举行换行,接下来就是HTTP HEAD部份,HTTP HEAD形貌了HTTP要乞降相应。我以为HTTP HEAD即为HTTP协定中最主要的部份,他包括了编码、BODY长度、内容协商等信息,你也能够包括一些自定义信息。下面我来为人人引见几个在RestFul API中常常使用的HEAD:
User-Agent:用户代办,是什么客户端发出的请求,如IE、Chrome、Fiddler等
HOST:域名(HOST平常常使用于服务器的站点绑定,平常和URL的域名雷同,但是在一些自定义的DNS运用体式格局中,可能会涌现HOST和URL中的域名不一致)
Authorization:考证信息,这个字段能够包括一些用于用户考证的信息,而示意要领为:schema authorinfo,中心运用空格离隔,个中schema代表了考证要领,authorinfo代表了考证信息,罕见的schema 如 Base:authorinfo运用用户名+暗码,并用Base64举行编码。或许运用Token,类似于Session的体式格局。
Accept:接收何种序列化体式格局返回的数据,用MIME示意,用于对相应数据的内容协商,能够包括多个MIME,按优先顺序排列,如application/json,application/xml,text/html;细致服务器能够返回什么范例的数据须要由服务器支撑状况而定,有一些规范MIME,能够查到;偶然我们也须要一些自定义的MIME,比方bson、protocolbuffer等,我们能够自定义MIME,在服务端开辟本身的完成,而这些特的扩大在ASP.NET WebApi中都有相应的扩大点。
Content-Type:运用一个MIME示意,示意所发送请求的Body的序列化体式格局,罕见的如application/json,另有WEB交互最常运用的application/x-www-form-urlencoded,都示意了你的body部份的序列化体式格局,在请求、相应中都会涌现
HTTP HEAD部份我以为是HTTP协定中最中心的部份,个中可设置、运用的处所着实太多太多,而且有太多的细节,以上为我列出的在我的事情中最常常使用的部份,引见这些内容的材料悉数列出来充足完成一本书了,人人有兴致能够查找相干材料,在Rest API中,内容协商常常让一开始进修运用Rest的人很疑惑,一定要记着Accept,Content-Type两个头的作用和区分,Accept示意愿望接收什么样的数据,Content-Type示意当前请求中Body的编码体式格局。在ASP.NET WEBAPI中,假如请求中有Content-Type,而没有ACCEPT,则默许运用Content-Type中的内容作为相应的内容协商。
相应部份也分为头部和Body,相应头部和请求头部最大的差异在于相应首行存在一个HTTP Code,HTTP Code作为API的挪用状况的展现,也很主要,在REST API中最常常使用的状况码平常为2XX,4XX,5XX三个段,而1XX示意事情还要继承,3XX平常示意重定向,在REST API中运用的并不多。而在最常常使用的三个Status 段中,2XX示意实行胜利,4XX示意客户端数据毛病(比方参数校验不通过),5XX示意服务器端处置惩罚毛病,比方有未处置惩罚的非常(如数据库衔接毛病),依据这些状况码能够初步判断API挪用的实行状况。
在首部以后有一个空行(\r\n)接下来就是Content,这里有细致的营业数据,依据差异的Content-Type运用差异的序列化体式格局示意,比方JSON,XML,以至HTML。列位在进修HTTP API时能够以为网页运用也是HTTP 的一种运用,只是交互体式格局平常运用application/x-www-form-urlencoded 作为请求、 text/html作为相应的体式格局举行交互。而RestAPI能够运用其他许多种编码体式格局举行交互,支撑的更广,网页运用只是运用HTTP传输的一种运用场景,RestAPI和网页是能够不分开的。我以为这一点Nancy比ASP.NET做得更好,Nancy并没有把RestAPI和网页分裂开来,而ASP.NET用MVC和WEBAPI将二者分裂了;请求一个数据,我能够请求Accept为application/json时返回Json数据,而运用text/html时返回一个网页;固然,将这两种运用体式格局切割或兼并起来都各有好坏。
我所写的这些关于HTTP协定而言着实太少太少,人人有兴致的能够自行查找相干材料,我只是写出了WEB API中常常使用的部份,下面我们来用一张图为人人展现一下这些学问:
以上就是ASP.NET WebAPI前置学问:HTTP与RestfulAPI的细致内容,更多请关注ki4网别的相干文章!