万利娱乐网址-万利娱乐wl8wl8-wl8wl8com

热门关键词: 万利娱乐网址,万利娱乐wl8wl8,wl8wl8com

Asp.net 万利娱乐网址:web api 知多少

2019-09-21 14:38栏目:医学科学
TAG:

  超媒体即采用状态引擎(HATEOAS)

  客商端通过body内容、查询串参数、央浼头和U途睿欧I(财富名称)来传送状态。服务端通过body内容,响应码和响应头传送状态给顾客端。那项技能被喻为超媒体(或超文本链接)。

  除了上述剧情外,HATEOS也意味着,须求的时候链接也可被含有在回到的body(或底部)中,以提供UEscortI来寻找对象自己或涉及对象。下文将对此举办更详细的解说。

  统一接口是各类REST服务统一计划时的至关重要准绳。

Q5. 为啥要选拔ASP.NET WEB API?
Ans. 方今,基于Web的应用程序已经远无法满足顾客要求。在平时生活中大家采纳iphone,手机,平板等。那个设施有一名目大多的app软件来提供有利的服务。由此大家的关心点不再仅仅是web还会有app。

    经过特色来操作财富

Q16.Webapi哪些设置三个Action同期协助get和post诉求?
Ans. 使用AcceptVerbs本性,如下代码所示:

如何时候应该创立多个新本子?

  API开拓中的相当多方面都会打破约定,并最后对顾客端爆发局地不良影响。若是你不明确API的修改会拉动怎么着的结果,有限帮忙起见最佳思量选取版本调节。当你在设想提供一个新本子是或不是合宜时,可能思考对现存的回到表征举行修改是不是必然能满意急需并被客商端所收受时,有如此多少个要素要怀念。

  1. 依赖SOAP公约,重临xml数据格式。
  2. 仅支持HTTP协议。
  3. 非开源,只要客商端能深入分析xml就能够应用。
  4. 只能在IIS上挂载。

网站

  http://www.restapitutorial.com http://www.toddfredrich.com
  
  http://www.json.org/ https://github.com/tfredrich/DateAdapterJ
  
  
  http://www.json.org/JSONRequest.html http://labs.omniti.com/labs/jsend
  
  
  
  
  
  https://dev.twitter.com/docs/api http://momentjs.com/
  

 

在原翻译的基本功上经过更换:

乌克兰(УКРАЇНА)语原来的书文下载:RESTful Best Practices-v1 2.pdf


过滤

  在本文中,过滤被定义为“通过一定的基准来规定必供给回来的数量,进而减弱重回的数目”。假若服务端支持一套完整的比较运算符和犬牙交错的标准合作,过滤操作将变得一定复杂。然则大家平常会使用部分轻巧的表明式,如starts-with(以...开始)或contains(包罗)来开展相称,以保障重临数据的完整性。

  在咱们初步切磋过滤的字符串查询参数从前,必得先知道为啥要运用单个参数而不是多少个字符串查询参数。从根本上来讲是为着削减参数名称的争辩。大家早已有offsetlimitsort(见下文)参数了。若是大概的话还也有jsonpformat标记符,也许还只怕有afterbefore参数,这一个都是在本文中涉嫌过的字符串查询参数。字符串查询中采用的参数越来越多,就越大概产生参数名称的顶牛,而使用单个过滤参数则会将争持的只怕降到最低。

  其它,从服务端也很轻易仅经过单个的filter参数来判别恳求方是还是不是要求多少过滤效果。假诺查询供给的复杂度扩张,单个参数将更享有灵活性——能够团结建构一套功用一体化的询问语法(详见下文OData注释或访谈)。

  通过引入一组遍布的、公众承认的分隔符,用于过滤的表明式可以以老大直观的方式被采纳。用那些分隔符来设置过滤查询参数的值,这么些分隔符所成立的参数名/值对能够更为便于地被服务端深入分析并抓牢数据查询的性质。近日已有的分隔符包含用来分隔每一个过滤短语的竖线("|")和用来分隔参数名和值的双冒号("::")。那套分隔符丰富独一,并符合大许多景色,同期用它来创设的字符串查询参数也更是便于精通。下边将用叁个粗略的例子来介绍它的用法。借使我们想要给名字为“托德”的顾客们发送央浼,他们住在成都,有着“Grand Poobah”之称。用字符串查询参数完结的伸手UCR-VI如下:

  GET poobah"

  双冒号("::")分隔符将属性名和值分开,那样属性值就可见饱含空格——服务端能更便于地从属性值中深入分析出分隔符。

  注意查询参数名/值对中的属性名要和服务端重临的天性名相相称。

  简单而有效。有关大小写敏感的难题,要基于具体意况来看,但总的来讲,在并不是关切大小写的景色下,过滤效果可以很好地运营。若查询参数名/值对中的属性值未知,你也足以用星号("*")来代替。

  除了简来说之明式和通配符之外,若要实行更复杂的查询,你必须要引进运算符。在这种意况下,运算符自己也是属性值的一部分,能够棉被和衣服务端剖判,并不是成为属性名的一有些。当需求复杂的query-language-style(查询语言风格)功效时,可参照他事他说加以考察Open Data Protocol (OData) Filter System Query Option表达中的查询概念(详见)。

Q2. 解释下REST原则?
Ans. REST是一两种规范,用来定义web规范,譬喻HTTP、UF12berlinettaIs 如何被选择。
根本有以下5条第一的REST原装:
AddressableResources(可访谈的能源) - 每贰个能源都应有能被UWranglerI(独一标记符)显著。
Simple and Uniform Interfaces(有一致接口) - REST是基于HTTP协议的,使用HTTP GET, POST, PUT, DELETE
来推行操作。使得REST轻巧一致。
RepresentationOriented(面向表述) - 财富的表现方式能够换来的。GET用来赢得财富的某种展现格局,POST用来传递财富到服务器以至于底层能源能够被退换。Representation能够有很各类表现情势,比方XML、Json等。
Communicate Stateless(无状态通讯) - 二个应用程序能够具备状态但是并未有客商端会话数据存款和储蓄在服务器。任何会话类型的数据应该在客商端保存和拍卖,独有在历次央浼中按需传递到服务器。
Cacheable(可缓存) - 顾客端应该能够缓存响应以供后续使用。

安全

  来自维基百科:

局地办法(举例GET、HEAD、OPTIONS和TRACE)被定义为安全的章程,那表示它们仅被用来消息寻觅,而不能改造服务器的状态。换句话说,它们不会有副效用,除了相对来讲无害的震慑如日志、缓存、横幅广告或计数服务等。任性的GET央求,不考虑接纳状态的上下文,都被以为是安枕无忧的。

  由此可知,安全意味着调用的措施不会挑起副成效。由此,顾客端可以每每使用安全的央求而不用思量对服务端发生任何副成效。那表示服务端必需服从GET、HEAD、OPTIONS和TRACE操作的平安概念。不然,除了对成本端发生模糊外,它还大概会促成Web缓存,寻觅引擎以及任何活动代理的主题素材——那就要服务器上产生意料之外的后果。

  依据定义,安全操作是幂等的,因为它们在服务器上发生同样的结果。

  安全的法子被实现为只读操作。然则,安全并不代表服务器必需每趟都回来同样的响应。

 


结果的过滤和排序

  针对返回结果,还索要思量什么在服务端对数码进行过滤和排列,以及哪些按钦命的相继对子数据举行寻找。这么些操作能够与分页、结果限制,以及字符串查询参数filter和sort等相结合,能够达成庞大的数据检索功能。

  再重申一次,过滤和排序都以眼花缭乱的操作,无需暗中认可提必要持有的能源。下文将介绍如何财富须要提供过滤和排序。

Q15. 如何在ASP.NET WEB API第22中学定义本性路由?
Ans. 像ASP.NET MVC5那样,能够在WEB API2的controller等第和action等级定义性子路由:

  财富通过链接的可开采性(HATEOAS续)

因此,假若您想以神速且轻易的办法揭破你的服务端数据到浏览器端和当代设备app上,你应当有二个API,它担任同盟浏览器和具有设施。
比方说:twitter,facebook,谷歌 Api都支持web应用程序和手提式有线电话机app。
WEB API是三个很棒的框架用来揭穿你的数量和服务到差异的设施。况兼WEB API是多个开源的平台基于.net framework来提供Rest-ful的劳务。
不像WCF REST Service,它采纳HTTP完整的职能(U路虎极光Is,request/response headers,caching,versioning,various content formats),你没有须求像wcf rest service那样为不一样的装置定义额外的陈设文件

  使用HTTP动词表示一些意义

WCF

  网站

![](https://upload-images.jianshu.io/upload_images/2799767-e58309c6f0025e10.png)

  呼吁不帮忙的本子


弃用

  Deprecated(弃用)的目标是用来验证能源对API依旧可用,但在未来会不设有并变得不可用。在意:弃用的时间长度将由弃用政策决定——这里并不曾交到定义。

Q10. 足以就像是ASP.NET MVC那样修改WEB API的action name吗?
Ans. 能够,通过应用[ActionName]特性就可以修改action name:

结果限制

  “给出第3到第55条的笔录”,这种央求数据的点子和HTTP的字节范围规范更平等,由此我们得以用它来标记Range header。而“从第2条记下早先,给出最多20条记下”这种格局更易于阅读和精晓,因而我们普通会用字符串查询参数的方法来表示。

  综上所述,推荐既援助选择HTTP Range header,也支持使用字符串查询参数——offset(偏移量)和limit(限制),然后在服务端对响应结果举办界定。注意,借使还要帮衬那二种格局,那么字符串查询参数的事先级要大于Range header。

  这里你可能会有个难点:“那三种格局效果相似,不过回去的数量不完全一致。那会不会令人歪曲呢?”恩…那是五个难点。首先要回应的是,那确实会令人歪曲。关键是,字符串查询参数看起来特别清晰易懂,在构建和深入分析时特别有利。而Range header则愈来愈多是由机械来利用(侧向于底层),它更是适合HTTP使用标准。

  总来讲之,分析Range header的工作会扩大复杂度,相应的客商端在塑造央浼时也急需展开一些管理。而选用单独的limit和offset参数会愈加便于明白和营造,何况无需对开垦人员有越来越多的渴求。

Q11. 怎么样界定WEB API的Aciton仅能被HTTP GET,POST,PUT,DELETE访谈?
Ans. 轻易,和ASP.NET MVC类似,通过行使[HttpGet]、[HttpPost]、[HttpPut]、[HttpDelete]特色来完结这一目标。
举个例子,若是您想限制三个Action仅能被HTTP Get央浼访谈,能够在Action上运用[HttpGet]天性就能够,如下:

财富命名

  除了适本地动用HTTP动词,在创立二个方可明白的、易于使用的Web服务API时,财富命名能够说是最富有争论和最要紧的定义。八个好的能源命名,它所对应的API看起来越来越直观并且易于使用。相反,要是命名糟糕,相同的API会令人认为很愚笨並且难以精晓和行使。当你供给为你的新API创制财富U奇骏L时,这里有一部分小技巧值得借鉴。

  从实质上讲,贰个RESTFul API最终都得以被归纳地看成是一批UHavalI的聚焦,HTTP调用这个U奇骏I以及部分用JSON和(或)XML表示的财富,它们中有比比较多包含了相互关联的链接。RESTful的可寻址工夫首要借助UOdysseyI。每一个能源都有投机的地点或UTiguanI——服务器能提供的每叁个可行的信息都得以视作财富来公开。统一接口的口径部分地因而ULacrosseI和HTTP动词的构成来减轻,并符合利用正规和预订。

  在决定你系统中要选拔的能源时,使用名词来命名这个能源,并非用动词或动作来定名。换句话说,二个RESTful UQX56I应该提到到一个切实的能源,而不是关系到贰个动作。别的,名词还兼具局地动词没有的性子,这也是另一个大名鼎鼎的要素。

  一些财富的例证:

  • 系统的顾客
  • 学员注册的课程
  • 三个顾客帖子的时刻轴
  • 关爱其余顾客的客商
  • 一篇有关骑马的稿子

  服务套件中的种种财富最少有叁个U奥迪Q5I来标记。假设这几个UENCOREI能表示必定的意思并且能够丰富描述它所表示的能源,那么它就是贰个最佳的命名。USportageI应该具备可预测性和分支结构,那将推动升高它们的可领会性和可用性的:可预测指的是财富应该和称号保持一致;而分层指的是数据具有关系上的构造。那并不是REST准则或正规,但是它加重了对API的定义。

  RESTful API是提要求花费端的。U冠道I的称号和协会应该将它所公布的意思传达给开支者。平常大家很难知晓数码的分界是如何,不过从你的数码上您应当很有一点都不小可能率去品味找到要赶回给客商端的数额是怎么着。API是为顾客端而布置的,实际不是为您的多少。

  假如大家未来要描述八个囊括顾客、订单,列表项,产品等效用的订单系统。考虑一下大家该怎么来描述在那些服务中所涉及到的能源的UHavalIs:

public class UserController : ApiController
{
 //GET route: api/User
 public IEnumerable<string> Get()
 {
 return new string[] { "value1", "value2" };
 }
 [Route("Service/User/{id}")] //GET route: Service/User/1
 public string Get(int id)
 {
 return "value";
 }
 [Route("Service/User/")] //POST route: Service/User/
 public void Post([FromBody]string value)
 {
 }
}

用字符串查询参数进行限制

  字符串查询参数被视作Range header的替代接纳,它应用offset和limit作为参数名,个中offset代表要询问的首先条记下编号(与上述的用于范围标记的items第一个数字一样),limit代表记录的最大条数。下边的例证重回的结果与上述用范围标识的事例一样:

  GET

  Offset参数的值与Range header中的类似,也是从0起先臆度。Limit参数的值是回来记录的最大数目。当字符串查询参数中未内定limit时,服务端应当提交多少个缺省的最大limit值,可是这么些参数的采纳都亟待在文书档案中举办验证。

  1. 将WCF 作为 WCF Rest 服务使用,您必需启用 webHttpBindings.
  2. 帮助HTTP GET和POST,分别对应使用 [WebGet] 和 [WebInvoke] 特性。
  3. 假使须要援助其余HTTP动词,你必要在.svc文件中针对急需帮忙的HTTP动词做一些计划。
  4. 选取WebGet通过参数字传送递数据,必要配置。同期,UriTemplate 必需钦定。
  5. 协理XML, JSON 和 ATOM 数据格式。

  合併接口


  传输安全

Action level routing(Action等第路由)
给Controller下的特定Action钦赐路由。

  DELETE

  1. 在WEB API 路由方式中 {action}参数是可选的,可是你能够自动包罗 八个{action} 参数。在ASP.NET MVC中 {action} 参数是勒迫的。
  2. Web Api 调整器中action 要么采纳HTTP action 动词 (GET, POST, PUT,
    DELETE) 天性标识可能以HTTP动词作者为action方法名命名前缀。
    ASP.NET MVC中action方法暗中认可能够透过 HTTP GET、POST 动词调用。如若急需帮忙任何HTTP动词,同样必要为其定义性格。
  3. 不像ASP.NET MVC,Web API仅能接受二个复杂类型作为参数。

  当未有一些名版本时,再次来到什么版本?

[HttpGet]
[ActionName("GetProducts")]
public IEnumerable<Product> ProductList()
{
 return db.Products.AsEnumerable();
}

  带有Content-Type的链接

Controller level routing(调控器等级路由)
在调节器等级定义的性情路由将选拔到具有action,除非action上钦定了特定的路由。

    过滤

  1. 亟待扶助非常的场景,比方:one way messaging(单向通讯),message queues(新闻队列),duplex communication(全双工通讯)等,采取WCF。
  2. 当您想创设三个能够运用便捷传输通道的劳动时,请选拔WCF,如TCP,命名管道,或许以致UDP(在WCF 4.5),並且当有着其余通道不可用时亦可支持HTTP传输信道。
  3. 当你要通过HTTP创立面向能源的劳务时采用WEB API,因为其得以动用完整的 HTTP的特色(如UTiguanI,央浼/响应头,缓存,版本调整,各类内容格式)。
  4. 比如您愿意将服务公开给科学普及的客商端(包涵浏览器, 手机,iphone和GALAXY Tab),接纳WEB API。

正文首要读者

  该最棒奉行文书档案适用于对RESTful Web服务感兴趣的开拓人士,该服务为跨多少个服务的零件提供了较高的可相信性和一致性。依据本文的教导,可高效、布满、公开地为内外界顾客选取。

  本文中的教导标准一致适用于程序员们,他们期待采用那些依据最棒实践标准开荒的劳动。即便他们进一步关怀缓存、代理准绳、监听及平安等相关方面,不过该文书档案能作为一份富含全数类型服务的总指南。

  别的,通过从这个教导原则,管理职员驾驭到创设公共的、提供高稳固性的劳动所需耗费的鼎力,他们也可从中收益。

 

Q14. ASP.NET WEB API第22中学什么启用本性路由?
Ans. 简单,仅仅要求在WebApiConfig.cs类的Register()方法增添对MapHttpAttributeRoutes()办法的调用就可以。

带有Content-Type的链接

  Atom风格的链接协理"type"属性。提供丰硕的新闻以便顾客端能够对特定的版本和剧情类型进行调用。

Q1. 什么是REST?
Ans. REST是 Representational State Transfer(表述性状态传递)的简称。是一项用于分布式景况数据交流的左券。
REST是一种架构风格,它将各样服务比较为能源并通过Http公约章程(GET、POST、PUT、DELETE)获取数据。
REST风格的架构包蕴客户端和服务端。
顾客端开始化恳求到服务器,服务器肩负管理央浼并回到响应。
这几个央浼和响应都以围绕这个财富的象征方式实行传递。

  Body内容中的日期/时间种类化


  选拔Content-Location来增长响应


想念连通性

  REST的规律之一正是连通性——通过超媒体链接完结。当在响应中回到链接时,api变的更享有自描述性,而在并没有它们时服务端依旧可用。至少,接口自身可以为客商端提供什么样寻找数据的参照。别的,在通过POST方法创建财富时,还是能够行使头地方包含二个链接。对于响应中补助分页的聚合,"first"、 "last"、"next"、和"prev"链接至少是可怜有效的。

 


缓存和可伸缩性

  通过在系统层级消除通过远距离调用来获取央求的多少,缓存升高了系统的可扩展性。服务通过在响应中设置headers来加强缓存的力量。可惜的是,HTTP 1.0中与缓存相关的headers与HTTP 1.1两样,由此服务器要同不经常候辅助二种版本。下表给出了GET央浼要援救缓存所不可不的最少headers集结,并付诸了合适的陈说。

HTTP Header

描述

示例

Date

一呼百应重临的日子和时间(奥迪Q7FC1123格式)。

Date: Sun, 06 Nov 1994 08:49:37 GMT

Cache-Control

一呼百应可被缓存的最大秒数(最大age值)。若是响应不支持缓存,值为no-cache。

Cache-Control: 360

Cache-Control: no-cache

Expires

假设给出了最大age值,该时间戳(奥迪Q5FC1123格式)表示的是响应过期的时间,也正是Date(譬喻当明日期)加上最大age值。要是响应不接济缓存,该headers子虚乌有。

Expires: Sun, 06 Nov 1994 08:49:37 GMT

Pragma

当Cache-Control为no-cache时,该header的值也被安装为no-cahche。不然,空中楼阁。

Pragma: no-cache

Last-Modified

能源本身最终被修改的岁月戳(EnclaveFC1123格式)。

Last-Modified: Sun, 06 Nov1994 08:49:37 GMT

  为了简化,这里举一个响应中的headers集结的例证。这是贰个简便的对财富扩充GET诉求的响应,缓存时间长度为一天(24小时):

  Cache-Control: 86400
  Date: Wed, 29 Feb 2012 23:01:10 GMT
  Last-Modified: Mon, 28 Feb 2011 13:10:14 GMT
  Expires: Thu, 01 Mar 2012 23:01:10 GMT

  下边是二个相近的例子,可是缓存被全然禁止使用:

  Cache-Control: no-cache
  Pragma: no-cache

Q4. 什么是ASP.NET WEB API?
Ans. ASP.NET WEB API 是三个框架用来搭建HTTP服务以供客商端(譬喻:浏览器,手提式有线电话机,三星手提式有线电话机等)调用。它与ASP.NET MVC很一般因为它含有mvc的效力,比方 routing, controllers, action results, filter, model binders, IOC container or dependency injection。
而是它并非MVC框架的一某些。它是
ASP.NET 平台的着力部分。能被MVC只怕别的门类的web应用使用。同一时间它也能够用作独立的web服务应用程序。
ASP.NET WEB API 功能

PUT

  PUT平日被用于更新财富。通过PUT须要贰个已知的能源U哈弗I时,必要在伸手的body中包蕴对原来能源的更新数据。

  可是,在财富ID是由客服端而非服务端提供的气象下,PUT同样能够被用来创造资源。换句话说,倘使PUT哀告的U奥德赛I中带有的财富ID值在服务器上不设有,则用于成立财富。同有时候呼吁的body中必需含有要创设的财富的数目。有人以为那会时有发生歧义,所以独有真的须求,使用这种方法来创立能源应该被慎用。

  大概大家也得以在body中提供由客商端定义的能源ID然后使用POST来创制新的能源——假使须求的UQX56I中不带有要开创的财富ID(参见上边POST的一对)。

  例如:

*  PUT
  PUT
  PUT

  当使用PUT操作更新成功时,会回来200(或然重回204,表示回去的body中不含有其余内容)。倘诺应用PUT伏乞创设财富,成功再次回到的HTTP状态码是201。响应的body是可选的——要是提供的话将会成本越来越多的带宽。在开创财富时并无需通过尾部的任务重回链接,因为客商端已经设置了财富ID。请参见下边包车型大巴再次回到值部分。

  PUT不是一个安全的操作,因为它会修改(或创设)服务器上的情状,但它是幂等的。换句话说,若是你选择PUT创制可能更新能源,然后再一次调用,财富仍旧存在何况状态不会爆发变化。

  比如,假使在财富增量计数器中调用PUT,那么那么些调用方法就不再是幂等的。这种场地临时候会爆发,且大概能够表明它是非幂等性的。不过,提出维持PUT伏乞的幂等性。并刚烈提议非幂等性的乞求使用POST。

WEB API

始建适当粒度的能源

  一最早,系统中模仿底层应用程序域或数据库架构的API更便于被创设。最后,你会期待将这么些劳务都整合到一道——利用多项底层资源减少通讯量。在开创独立的财富之后再次创下造更加大粒度的能源,比从越来越大的合集中创造极大粒度的财富更是轻巧一些。从部分小的轻巧定义的能源先导,创设CRUD(增加和删除查改)作用,能够使财富的创导变得更易于。随后,你可以创建那一个依照用例和减弱通讯量的财富。

本类别主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看土耳其共和国(The Republic of Turkey)语原版的可访问http://www.dotnettricks.com/free-ebooks电动下载。该书首要分为两片段,ASP.NET MVC 5、ASP.NET WEB API2。本书最大的特点是以面试问答的样式开展拓宽。通读此书,会拉拉扯扯您对ASP.NET MVC有越来越深档案的次序的明亮。
鉴于个人本事水平和拉脱维亚语水准也是个其他,由此错误难于避免,希望我们多多留言指正。

  基于财富

  不相同财富必要用ULacrosseI来独一标记。再次来到给顾客端的个性和资源本人在概念上有所不相同,譬如服务端不会直接传送八个数据库财富,不过,一些HTML、XML或JSON数据可见显得部分数据库记录,如用俄语来发挥照旧用UTF-8编码则要基于央求和服务器达成的细节来支配。


听他们讲范围的响应

  对二个依据范围的央求来讲,无论是通过HTTP的Range header依然经过字符串查询参数,服务端都应当有七个Content-Range header来响应,以声明重临记录的条数和总记录数:

  Content-Range: items 0-24/66

  注意这里的总记录数(如本例中的66)不是从0早先估量的。假设要呼吁数据集中的终极几条记下,Content-Range header的源委应当是这么:

  Content-Range: items 40-65/66

  依照HTTP的正规化,假诺响应时总记录数未知或不便计算,也得以用星号("*")来顶替(如本例中的66)。本例中响应头也可那般写:

  *Content-Range: items 40-65/**

  不过要小心,Dojo或一些其余的UI工具可能不帮助该符号。

  1. 它帮衬基于约定的CRUD操作因为它协理HTTP 动词 GET, POST, PUT , DELETE。
  2. 一呼百应饱含http状态码和Accept header。
  3. 响应被WEB API中的MediaTypeFormatter 格式化为JSON, XML恐怕别的你想加多作为 MediaTypeFormatter的别的格式。
  4. 它能够接过和生成非面向对象的源委比方图像!PDF等。
  5. 它曾经自行支持 OData 。因此将 [Queryable]特征增加到controller的主意中,它将会回来 IQueryable结果, 顾客端能够选用该情势举办OData组合查询。
  6. 能够在IIS或应用程序中留宿。
  7. 它帮忙 MVC 的大多职能,举例routing, controllers, action results, filter, model binders, IOC container or dependency injection 。

  应用程序安全

Q9. WEB API能返回View吗?
Ans. 与ASP.NET MVC分化,WEB API仅能再次来到数据,重返的多寡格式可感到string,json,xml,text等。

  曾几何时理应成立一个新本子?

Why to choose WEB API?

REST是什么?

  REST架构方式陈述了七种设计准绳。那一个用于架构的安插性法则,最先是由罗伊Fielding在他的大学生诗歌中提议并定义了RESTful风格。(详见)

  五个陈设法规分别是:

  • 联合接口
  • 无状态
  • 可缓冲
  • C-S架构
  • 支行系统
  • 按需编码

  以下是这个规划准绳的详细座谈:

  1. 就算我们供给web service但无需 SOAP,那么ASP.NET WEB API将是顶级采用。
  2. 它在存活WCF消息管道之上,创设简单的,基于非SOAP的HTTP服务。
  3. 它不像WCF REST service那样要求安插乏味的配置文件。
  4. 应用WEB API成立服务十二分简约。
  5. 听说HTTP並且轻易定义,以REST格局公开和平运动用。
  6. 它是轻量级的框架结构,适用于轻巧带宽的道具,如智能手提式有线电电话机。
  7. 开源。

再次来到表征

  正如前方提到的,RESTful接口帮忙两种能源特点,包涵JSON和XML,以及棉被服装进的JSON和XML。建议JSON作为默许表征,然则服务端应该允许客商端指定其余表征。

  对于客商端乞请的风味格式,大家得以在Accept头通过文件扩张名来扩充点名,也足以经过query-string等别的形式来钦定。理想状态下,服务端能够扶助全部那么些办法。然而,以往规范更偏侧于通过类似于文件扩充名的点子来扩充点名。因而,提出服务端至少必要协助使用文件增加名的法门,比如“.json”,“.xml”以及它们的卷入版本“.wjon”,“.wxml”。

  通过这种办法,在U卡宴I中钦命重返表征的格式,能够提升U凯雷德L的可知性。举例,GET 将再次回到customer列表的XML格式的特点。一样,GET 将重临八个JSON格式的风味。那样,尽管是在最基础的客商端(举个例子“curl”),服务使用起来也会越发便捷。推荐应用这种措施。

  其它,当url中尚无包涵格式说明时,服务端应该回到私下认可格式的表征(假诺为JSON)。比方:

  GET

  GET

  以上两个重回的ID为12345的customer数据均为JSON格式,那是服务端的暗中同意格式。

  GET

  假使服务端接济的话,以上央浼再次回到的ID为12345的customer数据为XML格式。借使该服务器不援助XML格式的财富,将回到三个HTTP 404的不当。

  使用HTTP Accept头被普及认为是一种更优雅的法子,而且符合HTTP的正经和含义,客户端能够通过这种措施来告诉HTTP服务端它们可支撑的数据类型有哪些。可是,为了选用Accept头,服务端要同临时候协理封装和未封装的响应,你无法不兑现自定义的连串——因为那么些格式不是正经的品类。这大大扩大了顾客端和服务端的千头万绪。请参见奔驰M级FC 2616的14.1节关于Accept头的详细音信()。使用文件扩张名来钦命数量格式是最简易直接的主意,用最少的字符就足以成功,况兼帮忙脚本操作——没有供给选取HTTP头。

  日常当大家关系REST服务,跟XML是毫无干系的。固然服务端辅助XML,也差非常少从未人提出在REST中动用XML。XML的规范和左券在REST中不太适用。非常是它连命名空间都未曾,就更不应当在RESTful服务种类中应用了。那只会使业务变得更复杂。所以回来的XML看起来更像JSON,它大致易读,未有方式和命名空间的限制,换句话来讲是无规范的,易于剖判。

Q6. WCF、WEB API、 WCF REST 、Web Service之间的差异是?
Ans. 首要差别是:
Web Service

  资源URI示例


    用范围标记实行界定


  授权

[AcceptVerbs("GET", "POST")]
public HttpResponseMessage Http([FromUri]ProxyHttpParam getParam, ProxyHttpParam postParam)
{    var res = new HttpResponseMessage(HttpStatusCode.OK);
    return res;
}

  安全

Q3. REST和 SOAP间的界别是怎么着?
Ans. 详见下表:

版本调控应在哪些等级出现?

  建议对单个的财富进行版本调控。对API的一些改换,如修改专门的工作流,恐怕要跨多少个财富的版本调整,以此来防御对客商端发生破坏性的震慑。

Q12. 如何在ASP.NET MVC中调用 WEB API?
Ans. ASP.NET WEB API 能够经过行使HttpClient央浼WEB API地址的法子来调用:

    排序

  1. ASP.NET MVC 用来成立web应用回到视图和数量;不过ASP.NET WEB API 是用来创制完整的HTTP服务,仅再次回到数据无视图重临。
  2. WEB API 基于.NET Framework构建REST-ful服务,并支持内容协商(重临客商端需求的格式化的多寡,举例json,xml,Atom等)。
  3. WEB API还负担再次回到特定格式的数额,如JSON,XML或其余其余依照接受哀告头中定义的格式;但MVC只好透过JsonResult重返Json格式数据。
  4. Asp.net 万利娱乐网址:web api 知多少。WEB API 的央浼映射到Http动词对应的action;MVC 的央浼直接照射到对应的action name。
  5. ASP.NET WEB API是新的框架和ASP.NET框架大旨的一局地。模型绑定,过滤器, 路由和其余MVC成效,在WEB API中设有于System.Web.Http程序集;但是在MVC中那些成效存在于System.Web.Mvc程序集。由此WEB API也得以 与ASP.NET一起利用以及作为单身的服务层。
  6. 您能够在单个项目中混合使用WEB API和MVC调节器来管理高端AJAX央求并以JSON,XML或别的别的格式重返数据,并创设完整的HTTP服务。平日,那将是WEB API自承载。
  7. 当您混合使用了MVC和WEB API调整器,你想实现授权那么您不能够不成立四个过滤器二个为MVC和另贰个为WEB API,因为两个是例外的。
  8. WEB API 是一个轻量级的框架,不止web应用程序能够使用,其余智能手提式有线话机app也可利用。

分页

  上述办法经过诉求方钦点数据集的限定来限制重回结果,进而落成分页功效。上面包车型大巴例子中一齐有66条记下,假使每页25条记下,要出示第二页数据,Range header的始末如下:

  Range: items=25-49

  一样,用字符串查询参数表示如下:

  GET …?offset=25&limit=25

  服务端会相应地赶回一组数据,附带的Content-Range header内容如下:

  Content-Range: 25-49/66

  在许多景况下,这种分页格局都未曾难点。但有的时候会有这种情状,就是要回去的记录数据不或者直接代表成数据汇总的行号。还应该有正是某些数据集的变型非常快,不断会有新的多少插入到多少汇总,这样必然会促成分页出现难题,一些重新的数据可能会油不过生在不一致的页中。

  按日期排列的数据集(例如Facebookfeed)正是一种分布的状态。尽管你依旧得以对数据开展分页,但偶然候用"after"或"before"那样的严重性字并与Range header(恐怕与字符串查询参数offset和limit)协作来兑现分页,看起来会愈加简洁易懂。

  举个例子,要博取给定期期戳的前20条商量:

  GET ; 

  Range: items=0-19

  GET ; 

*  Range: items=0-19*

  用字符串查询参数表示为:

  GET  

*  GET

  有关在分歧处境对时间戳的格式化管理,请参见下文的“日期/时间拍卖”。

  若是乞请时从没点名要回来的数量范围,服务端再次回到了一组私下认可数据或限制的最大数据集,那么服务端同时也相应在回去结果中包括Content-Range header来和顾客端进行确认。以地点个人主页的岁月轴为例,无论顾客端是否钦命了Range header,服务端每一次都只回去20条记下。此时,服务端响应的Content-Range header应该富含如下内容:

  Content-Range: 0-19/4125

  或 *Content-Range: 0-19/**

Q13. ASP.NET WEB API 路由与 ASP.NET MVC 路由有怎么着分歧?
Ans. ASP.NET MVC 与 ASP.NET WEB API 使用路由来监督传入的须要。重要的界别有以下几点:

HTTP动词

  1. 基于SOAP合同,重临xml数据格式
  2. 它是web service(ASMX)的衍变版。扶助TCP, HTTP, HTTPS, Named Pipes, MSMQ。
  3. 亟待非凡陈设大批量累赘的配备项。
  4. 非开源,只要客商端能剖析xml就足以选拔。
  5. 能够在应用程序或IIS或window service上承先启后。

HTTP状态码(前10)

  以下是由RESTful服务或API重回的最常用的HTTP状态码,以及部分关于它们遍布用法的简要表明。其余HTTP状态码不太平日应用,它们还是更独具匠心,要么更加高级。大相当多劳动套件只扶助那几个常用的状态码,乃至只支持个中的一部分,况且它们都能寻常干活。

  200 (OK) —— 日常的成功景色。表示成功的最广大代码。

  201 (CREATED) ——(通过POST或PUT)创制作而成功。通过设置Location header来含有多少个针对最新创制的财富的链接。

  204 (NO CONTENT) —— 封装过的响应未有动用,或body中从未任何内容时(如DELETE),使用这场地。

  304 (NOT MODIFIED) —— 用于有标准化的GET调用的响应,以减小带宽的施用。 若是运用这场合,那么必得为GET调用设置Date、Content-Location和ETag headers。不含有响应体。

  400 (BAD REQUEST) —— 用于实行央浼时大概引起无效状态的一般错误代码。如域名无效错误、数据错失等。

  401 (UNAUTHORIZED) —— 用于缺乏认证token或表达token无效的错误代码。

  403 (FORBIDDEN) —— 未授权的顾客实行操作,未有权力访谈财富,可能出于有些原因财富不可用(如时间范围等),使用该错误码。

  404 (NOT FOUND) —— 无论能源存荒诞不经,无论是还是不是有401、403的限量,当呼吁的能源找不到时,出于安全因素记挂,服务器都能够选择该错误码来遮掩。

  409 (CONFLICT) —— 每当实施央浼恐怕会挑起财富争辩时行使。例如,存在双重的实业,当不支持级联删除时去除根对象。

  500 (INTERNAL SERVER ERROR) —— 当服务器抛出特别时,捕捉到的形似错误。

 

WEB API

    支持JSONP

[RoutePrefix("Service/User")]
public class UserController : ApiController
{
 //GET route: api/User
 public IEnumerable<string> Get()
 {
 return new string[] { "value1", "value2" };
 }
 [Route("{id}")] //GET route: Service/User/1
 public string Get(int id)
 {
 return "value";
 }
 [Route("")] //POST route: Service/User/
 public void Post([FromBody]string value)
 {
 }
}

引言

  到现在已有恢宏有关RESTful Web服务至上实施的相关资料(详见本文最终的相干文献部分)。由于撰文的年月差别,大多材料中的内容是抵触的。另外,想要通过翻看文献来精通这种服务的升华是不太可取的。为了打探RESTful这一概念,至少要求查阅三到五本有关文献,而本文将能够帮你加快这一历程——舍弃多余的争执,最大化地提炼出REST的最好执行和职业。

  与其说REST是一套标准,REST更像是一种标准的聚合。除了八个十分重要的尺码外就不曾别的的正经了。实际上,就算有所谓的“最棒实践”和标准,但那一个东西都和宗派斗争同样,在任何时间任何地方地演化。

  本文围绕REST的布满难点建议了思想和仿美食做法式的研究,并因而介绍一些大概的背景知识对创造真实情况下的预生产情状中同样的REST服务提供文化。本文搜罗了来自别的路子的音信,经历过贰回次的挫败后不断立异。

  但对此REST格局是不是肯定比SOAP好用仍有很大纠纷(反之亦然),可能在有些情状下仍急需成立SOAP服务。本文在说到SOAP时并未有花异常的大篇幅来商讨它的周旋优点。相反由于技艺和行当在不断进步,大家将三回九转坚韧不拔我们的只要–REST是当时设计web服务的极品方法。

  第一部分概述REST的含义、设计准绳和它的特种之处。第二有的列举了有的小贴士来记念REST的劳动思想。之后的有个别则会更加尖锐地为web服务成立人士提供部分细节的帮助和探究,来达成叁个能够理解呈现在生产境况中的高水平REST服务。

 


外加财富

Q8. ASP.NET MVC 与 ASP.NET WEB API之间的分别是?
Ans. 首要有以下分别:

护卫服务的安全

  Authentication(身份验证)指的是承认给定的央浼是从服务已知的某一个人(或某些系统)发出的,且需要者是他和煦所注脚的要命人。Authentication是为着求证诉求者的真实性身份,而authorization(授权)是为着注解央求者有权力去实施被呼吁的操作。

  本质上,这些进度是那样的:

  1. 顾客端发起三个呼吁,将authentication的token(身份验证令牌)满含在X-Authentication header中,或者将token外加在呼吁的查询串参数中。
  2. 服务器对authorization token(授权令牌)进行反省,并展开求证(有效且未过期),并遵照令牌内容深入分析或然加载认证中央。
  3. 服务器调用授权服务,提供验证大旨、被呼吁能源和供给的操作许可。
  4. 若果授权通过了,服务器将会持续健康运作。

  上边第三步的开采或者会相当大,不过只要假如存在一个可缓存的权杖调节列表(ACL),那么在发出远程伏乞前,能够在本地创设三个授权客户端来缓存最新的ACLs。

SOAP REST
SOAP 是 Simple Object Access Protocol(简单对象访问协议)的简称 REST 是Representational State Transfer(表述性状态传递)的简称
它是一个基于 XML 的协议,建立在 HTTP 或 TCP/IP,SMTP基础之上。 REST不是一个协议而是一种架构风格。 比如:基于资源的架构。
SOAP 提供了无状态和有状态的两种实现方式。 REST 是无状态的。
SOAP 使用xml作为消息格式 REST 支持xml,json
SOAP 定义了标准的规范。比如:WS-Security是实现安全的规范 未定义标准规范
SOAP 消息包含了一个信封,里面包含了SOAP的Header、Body(用来存储你实际要发送的信息) REST 使用HTTP集成的header(支持多种媒体类型)去携带元数据,使用GET、POST、PUT、DELETE 动词执行CURD
SOAP 使用接口以及命名的操作去调用Service。 REST 使用 URI 以及(GET, PUT, POST, DELETE)方法来调用Service。
比REST慢 比SOAP快

爱护服务的平安

请求为GET,则getParam有值;
请求为POST,则postParam有值。

  通过特征来操作财富

  当顾客端收到包罗元数据的能源的特色时,在有权力的动静下,顾客端已明白的十足的新闻,能够对服务端的能源举行删改。


  通过内容协商接济版本管理

WCF Rest

引言

Q7. 在WCF 和 WEB API之间如何抉择?
Ans. 能够从以下几点进行思考:

Body内容中的日期/时间种类化

  有二个简易的艺术能够消除那一个标题——在字符串中一贯用平等的格式,蕴含时间片(带不时区新闻)。ISO8601时间格式是三个科学的技术方案,它利用了截然巩固的时刻格式,包含小时、分钟、秒以及秒的小数部分(举例yyyy-MM-dd'T'HH:mm:ss.SSS'Z')。提议在REST服务的body内容中(伏乞和响应均饱含)使用ISO8601代表全部的日子格式。

  顺便提一下,对于那叁个基于JAVA的劳务以来,Date艾达pterJ库使用DateAdapter,Iso8601Timepoint艾达pter和HttpHeaderTimestampAdapter类能够极其轻松地深入分析和格式化ISO8601日期和时间,以及HTTP 1.1 header(路虎极光FC1123)格式。能够从下载。

  对于那八个成立基于浏览器的客商分界面来说,ECMAScript5正经一开头就含有了JavaScript解析和创办ISO8601日期的剧情,所以它应当改成大家所说的主流浏览器所遵循的办法。当然,假如你要帮助那二个不可能自动剖判日期的旧版浏览器,能够行使JavaStript库或正则表达式。这里有几个能够剖判和创办ISO8601时间的JavaStript库:

  

  


包装响应

   服务器能够在响应中並且重临HTTP状态码和body。有好些个JavaScript框架未有把HTTP状态响应码再次来到给最后的开辟者,那往往会变成顾客端无法依照事态码来鲜明具体的一言一行。其它,固然HTTP标准中有很三种响应码,然则往往唯有少数客户端会关注那一个——平常我们只在乎"success"、"error"或"failture"。由此,将响应内容和响应状态码封装在蕴含响应音讯的表征中,是有不能缺少的。

  OmniTI 实验室有这么一个建议,它被称作JSEND响应。越多新闻请参见。别的一个提案是由DouglasCrockford提议的,可以查看这里。

  这个提案在推行中并从未完全蕴含全体的状态。基本上,今后最好的做法是依据以下属性封装常规(非JSONP)响应:

  • code——包罗一个整数门类的HTTP响应状态码。
  • status——饱含文本:"success","fail"或"error"。HTTP状态响应码在500-599之间为"fail",在400-499里边为"error",其它均为"success"(举例:响应状态码为1XX、2XX和3XX)。
  • message——当状态值为"fail"和"error"时有效,用于展现错误新闻。参照国际化(il8n)规范,它能够包含音信号可能编码,能够只含有当中叁个,或许同一时间包蕴并用分隔符隔离。
  • data——包涵响应的body。当状态值为"fail"或"error"时,data仅包括错误原因或非常名称。

  上边是多个回到success的包装响应:

{
  "code": 200,
  "status": "success",
  "data": {
    "lacksTOS": false,
    "invalidCredentials": false,
    "authToken": "4ee683baa2a3332c3c86026d"
  }
}

  再次来到error的包裹响应:

{
  "code": 401,
  "status": "error",
  "message": "token is invalid",
  "data": "UnauthorizedException"
}

  那三个包裹响应对应的XML如下:

<response>
    <code>200</code>
    <status>success</status>
    <data class="AuthenticationResult">
        <lacksTOS>false</lacksTOS>
        <invalidCredentials>false</invalidCredentials>
        <authToken>1.0|idm|idm|4ee683baa2a3332c3c86026d</authToken>
    </data>
</response>

  和:

<response>
    <code>401</code>
    <status>error</status>
    <message>token is invalid</message>
    <data class="string">UnauthorizedException</data>
</response>
public static class WebApiConfig
{
 public static void Register(HttpConfiguration config)
 {
 //enabling attribute routing
 config.MapHttpAttributeRoutes();
 }
}

能源通过链接的可发掘性(HATEOAS续)

  REST指导规范之一(依照统一接口标准)是application的事态通过hypertext(超文本)来传输。那正是大家数见不鲜所说的Hypertext As The Engine of Application State (即HATEOAS,用超文本来作为应用程序状态机),大家在“REST是什么”一节中也事关过。

  根据Roy菲尔德ing在他的博客中的描述(),REST接口中最关键的一对是超文本的行使。别的,他还提议,在付给任何有关的音讯从前,多少个API应该是可用和可分晓的。也正是说,三个API应当能够透过其链接导航到数码的顺序部分。不建议只回去纯数据。

  可是当下的产业界先驱们并不曾日常接纳这种做法,那显示了HATEOAS仅仅在成熟度模型中的使用率越来越高。纵客官多的服务体系,它们基本上重回越多的数据,而回到的链接并非常少(或许尚未)。那是反其道而行之菲尔德ing的REST约定的。菲尔德ing说:“消息的每三个可寻址单元都辅导叁个地址……查询结果应当展现为三个分包摘要新闻的链接清单,并不是指标数组。”

  另一方面,轻便残暴地将整个链接集结再次来到会大大影响网络带宽。在事实上景况中,依据所需的口径或使用景况,API接口的通讯量要依赖服务器响应中中国足球球联赛文本链接所含有的“摘要”数量来抵消。

  相同的时间,丰裕利用HATEOAS可能会增加达成的眼花缭乱,并对劳动客户端发生明显的负担,这一定于收缩了客商端和劳务器端开拓职员的生产力。因而,迫在眉睫是要平衡超链接服务施行和水保可用能源之间的标题。

  超链接最小化的做法是在最大限度地减小客商端和服务器之间的耦合的还要,进步服务端的可用性、可垄断性和可明白性。这个最小化提议是:通过POST成立能源并从GET央浼重临集结,对于有分页的景况前边大家会提到。


查询,过滤和分页

[HttpGet]
public IEnumerable<Product> ProductList()
{
 return db.Products.AsEnumerable();
}

授权

  对劳务的授权和对任何应用程序的授权一样,未有其余差别。它依照那样一个标题:“主体是或不是对给定的资源有央求的许可?”这里给出了轻易的三项数据(主体,能源和许可),由此很轻易构造七个支撑这种概念的授权服务。个中核心是被赋予能源访谈许可的人或连串。使用那一个相似概念,就能够为各样大旨创设三个缓存访谈调控列表(ALC)。

public class ProductController : Controller
{
 HttpClient Client = new HttpClient();
 Uri BaseAddress = new Uri("http://localhost:131/");
 public ActionResult Index()
 {
 Client.BaseAddress = BaseAddress;
 HttpResponseMessage response =
Client.GetAsync("productservice/GetProducts").Result;

 if (response.IsSuccessStatusCode)
 {
 var data = response.Content.ReadAsAsync<IEnumerable<Product>>().Result;
 return View(data);
 }
 return View();
 }
}

HTTP状态码(前10)

public static class WebApiConfig
{
 public static void Register(HttpConfiguration config)
 {
 //enabling attribute routing
 config.MapHttpAttributeRoutes();
 // Convention-based routing.
 config.Routes.MapHttpRoute(
 name: "DefaultApi",
 routeTemplate: "api/{controller}/{id}",
 defaults: new { id = RouteParameter.Optional }
 );
 }
}

通过内容协商补助版本处理

  今后,版本管理通过U奥迪Q3I本人的版本号来实现,顾客端在呼吁的URAV4I中表明要收获的能源的版本号。事实上,大多大集团如Twitter、Yammer、推文(Tweet)(TWTTiggo.US)、Google等有的时候在她们的UQX56I里使用版本号。以致像WSO2那样的API管理工科具也会在它的UEscortLs中须要版本号。

  面向REST原则,版本管理手艺快捷发展。因为它不含有HTTP标准中放到的header,也不协理仅当二个新的财富或概念被引入时才应该增加新U途乐I的思想——即版本不是展现情势的变动。另一个唱对台戏的理由是能源USportageI是不会随时间改动的,财富正是财富。

  U奇骏I应该能轻便地辨认能源——并不是它的“形状”(状态)。另叁个就是必需内定响应的格式(表征)。还会有部分HTTP headers:Accept 和 Content-Type。Accept header允许顾客端钦点所期待或能补助的响应的媒体类型(一种或三种)。Content-Type header可分别被顾客端和劳务端用来钦定要求或响应的数据格式。

  举例,要赢得三个user的JSON格式的数额:

  #Request:

  GET
  Accept: application/json; version=1

  #Response:

  HTTP/1.1 200 OK
  Content-Type: application/json; version=1

  {"id":"12345", "name":"Joe DiMaggio"}

  今后,大家对一样财富央求版本2的数量:

  #Request:

  GET
  Accept: application/json; version=2

  #Response:

  HTTP/1.1 200 OK
  Content-Type: application/json; version=2

  {"id":"12345", "firstName":"Joe", "lastName":"DiMaggio"}

  Accept header被用来表示所愿意的响应格式(以及示例中的版本号),注意上述多少个一律的U宝马X5I是什么变成在差异的本子中分辨资源的。可能,要是客商端供给八个XML格式的数目,能够将Accept header设置为"application/xml",假如须求的话也足以带叁个点名的版本号。

  由于Accept header能够被设置为允许二种传播媒介类型,在响应央浼时,服务器将把响应的Content-Type header设置为最相称客商端央浼内容的花色。更加的多消息能够参考 。

  例如:

  #Request

  GET

  Accept: application/json; version=1, application/xml; version=1

  上述呼吁中,假如服务器扶助JSON 和XML格式的央浼,只怕二种都援救,那么将由服务器来调节最后回到哪一种档期的顺序的多少。但不论是服务器采用哪个种类,都会在响应中蕴藏Content-Type header。

  举例,要是服务器再次来到application/xml格式的多少,结果是:

  #Response

  HTTP/1.1 200 OK
  Content-Type: application/xml; version=1

  <user>
    <id>12345</id>
    <name>Joe DiMaggio</name>
  </user>

  为了证实Content-Type在发送数据给服务器时的用途,这里给出多个用JSON格式创造新客商的事例:

  #Request

  POST
  Content-Type: application/json;version=1

  {"name":"Marco Polo"}

  也许,调用版本2的接口:

  #Request

  POST
  Content-Type: application/json;version=2

  {"firstName":"Marco", "lastName":"Polo"}


  HTTP Headers中的日期/时间系列化

与此同一时间你也得以统一使用特性路由和基于约定的路由。

用范围标志举行限定

  当用HTTP header实际不是字符串查询参数来获得记录的范围时,Ranger header应该经过以下内容来钦定范围: 

  Range: items=0-24

  注意记录是从0早先的接连字段,HTTP标准中评释了怎么采用Range header来伏乞字节。也正是说,尽管要乞请数据汇总的率先条记下,范围应该从0初阶算起。上述的央浼将会回到前二十多少个记录,若是数据聚集至少有25条记下。

  而在服务端,通过检查哀告的Range header来鲜明该再次回到哪些记录。只要Range header存在,就能够有二个简便的正则表明式(如"items=(d+)-(d+)")对其展开剖析,来收获要搜索的范围值。

万利娱乐网址 1

呼吁不辅助的版本

  当呼吁一个不补助的本子号时(包罗在API生命周期中曾经声销迹灭的能源版本),API应当重临多个谬误的HTTP状态码406(表示不被接受)。其它,API还相应重返二个满含Content-Type: application/json的响应体,在那之中蕴涵叁个JSON数组,用于评释该服务器匡助的品种。

  #Request

  GET
  Content-Type: application/json; version=999

  #Response

  HTTP/1.1 406 NOT ACCEPTABLE 

  Content-Type: application/json

  ["application/json; version=1", "application/json; version=2", "application/xml; version=1", "application/xml; version=2"]

  1. 一种新的框架提供了简约的不二等秘书籍用来搭建HTTP services。
  2. WEB API是多少个开源的精良的阳台在.NET Framework上搭建REST-ful services。
  3. 它应用HTTP的完全意义(像 UOdysseyIs, request/response headers, caching,
    versioning, various content formats)。
  4. 它也还要协助MVC一样的功力(routing, controllers, action results, filter, model binders, IOC container or dependency injection, unit testing),使得它更简明硬朗。
  5. 能够在应用程序或IIS中承载。
  6. 它是轻量级的架构,扶助种种道具极度是有带宽限制的器械比方智能手提式无线电话机。
  7. 响应被WEB API的MediaTypeFormatter格式化为 JSON、 XML恐怕别的你想要增加作为 MediaTypeFormatter 的任何格式。

    非破坏性的修改

XML和JSON

  提出暗中同意扶助json,并且,除非开支很震动,不然就相同的时候协助json和xml。在优秀状态下,让使用者仅透过转移扩充名.xml和.json来切换类型。其余,对于帮忙ajax风格的顾客分界面,贰个被包裹的响应是分外有赞助的。提供三个被卷入的响应,在默许的恐怕有独立扩大名的情状下,举例:.wjson和.wxml,注明顾客端乞请贰个被包裹的json或xml响应(请参见上面包车型客车包裹响应)。

  “规范”中对json的渴求非常少。並且这个须求只是语法性质的,非亲非故内容格式和布局。换句话说,REST服务端调用的json响应是协商的一片段——在标准中并没有有关描述。越多关于json数据格式可以在上找到。

  关于REST服务中xml的应用,xml的标准和预定除了采取语法准确的标签和文本外未有别的的成效。极其地,命名空间不是也不应该是被利用在REST服务端的光景文中。xml的回到更周边于json——轻巧、轻松阅读,未有格局和命名空间的细节表现——仅仅是数量和链接。如若它比那更目不暇接的话,参看本节的首先段——使用xml的资本是惊人的。鉴于大家的经验,相当少有人利用xml作为响应。在它被统统淘汰在此之前,那是终极多个可被一定的地点。

POST

  POST央求平常被用来成立新的财富,极其是被用来成立从属能源。从属财富即归属于其余能源(如父财富)的能源。换句话说,当创立一个新能源时,POST央浼发送给父财富,服务端担任将新能源与父能源举行关联,并分配一个ID(新能源的UPAJEROI),等等。

  例如:

  POST
  POST

  当创制作而成功时,再次回到HTTP状态码201,并顺便一个地方头消息,在那之中积存指向最初创造的财富的链接。

  POST需要既不是安全的又不是幂等的,因而它被定义为非幂等性财富乞求。使用多个一律的POST央浼很或许会招致创制五个包罗一样消息的能源。

应用程序安全

  对RESTful服务以来,开辟一个有惊无险的web应用适用同样的标准。

  • 在服务器上证实全数输入。接受“已知”的不易的输入并拒绝错误的输入。
  • 防止SQL和NoSQL注入。
  • 选择library如微软的Anti-XSS或OWASP的AntiSammy来对出口的数目进行编码。
  • 将新闻的长短限制在明确的字段长度内。
  • 服务应该只显示一般的错误音讯。
  • 虚拟专门的学问逻辑攻击。举个例子,攻击者能够跳过多步骤的订货流程来预定产品而无需输入银行卡新闻呢?
  • 对疑惑的移位记录日志。

  RESTful安全须要注意的地方:

  • 表达数据的JSON和XML格式。
  • HTTP动词应该被界定在同意的方法中。举个例子,GET乞请不可能去除三个实体。GET用来读取实体而DELETE用来删除实体。
  • 只顾race conditions(竞争准绳——由于七个或然多少个进度竞争使用无法被同一时候做客的能源,使得那几个进程有比非常的大概率因为时间上推进的顺序原由此产出难题)。

  API网关可用于监视、限制和调整对API的拜访。以下内容可由网关或RESTful服务完成。

  • 蹲点API的选拔状态,并问询怎么活动是健康的,哪些是非不荒谬的。
  • 界定API的采纳,使恶意顾客无法停掉五个API服务(DOS攻击),而且有力量阻止恶意的IP地址。
  • 将API密钥存款和储蓄在加密的广元密钥库中。

 

自己应该相同的时间帮衬多少个本子?

  维护多少个分歧的本子会让劳作变得繁琐、复杂、轻便失误,并且代价高,对于其余给定的财富,你应有援救不当先2个版本。

分层系统

  客商端日常不恐怕注明本身是直接只怕直接与端服务器进行连接。中介服务器能够经过启用负载均衡或提供分享缓存来提升系统的延展性。分层时一样要思量安全战术。

    用字符串查询参数进行限制

  分层系统

本人何以告知顾客端被弃用的能源?

  繁多客商端将来拜谒的能源恐怕在新本子引进后会被抛弃掉,因此,他们必要有一种办法来开掘和监控他们的应用程序对弃用财富的行使。当呼吁二个弃用财富时,API应该健康响应,并含有七个布尔类型的自定义Header "Deprecated"。以下用四个例证来进展表达。

  #Request

  GET
  Accept: application/json
  Content-Type: application/json; version=1

  #Response

  HTTP/1.1 200 OK
  Content-Type: application/json; version=1
  Deprecated: true
  {“id”:”12345”, “name”:”Joe DiMaggio”}

 

  拍卖跨域难点

    基于范围的响应

  ETag Header

定义

传输安全

  全数的验证都应该运用SSL。OAuth2需求授权服务器和access token(访谈令牌)来使用TLS(安全传输层公约)。

  在HTTP和HTTPS之间切换会带来安全隐患,最棒的做法是具有简报暗许都使用TLS。

外加能源

    自描述的音讯

版权声明:本文由万利娱乐网址发布于医学科学,转载请注明出处:Asp.net 万利娱乐网址:web api 知多少