版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SDN北向接口第6章6.1 北向接口概述6.2 RESTAPI6.3 RESTCONF协议北向接口是一套为开发者提供网络高层的逻辑抽象和业务模型的编程接口实际上,北向接口就是提供了SDN中开发者与控制器间的交互能力SDN则为开发者提供了更大的灵活性,以API的形式开放出强大的二次开发能力,使开发者可以着力关注更高层的应用业务,而非底层硬件实现6.1北向接口概述6.1北向接口概述6.1.1ONF北向接口6.1.2SDN其他北向接口6.1.3SDN北向接口的前景计算机网络上的通信面临以下两大类威胁:被动攻击和主动攻击。6.1.1ONF北向接口主导SDN/OpenFlow标准组织ONF于2013年10月成立SDN北向接口工作小组,旨在通过北向接口的标准化以加速SDN的商用成立背景ONF成立之初倡导的是用户决定应用,觉得标准化会大大限制用户的创新,未提出要将SDN北向接口标准化随着控制器市场的百花齐放,ONF发现这些控制器提供的北向接口非常混乱,时常会给用户带来很大的困扰,同时为了防止控制器通过提供杀手级应用形成厂商锁定的局面,故决定将SDN北向接口标准化计算机网络上的通信面临以下两大类威胁:被动攻击和主动攻击。目标与规划ONF所设计的SDN北向接口需要满足的条件:良好的稳定性很强的可扩展性灵活性和敏捷性标准化的北向接口必须具备底层无关性各个接口必须具有简洁明了的功能接口间层次必须十分清晰,允许传统网络工作者在不了解SDN网络底层实现的情况下使用网络各个层次的可编程能力计算机网络上的通信面临以下两大类威胁:被动攻击和主动攻击。ONF北向接口设计层次控制器基础功能API:提供了控制平面中最为底层的能力网络服务API:提供了基础网络服务的编程接口北向接口应用API:提供了业务逻辑层的抽象计算机网络上的通信面临以下两大类威胁:被动攻击和主动攻击。北向接口功能集的初步设计最底层为控制器收发信令的基础能力往上面一层是自验证能力、开发所用的编程语言以及设备的抽象层,提供了网络转发设备级的编程接口网络切片、拓扑生成、路径发现、路由与交换等提供了网络层的编程接口其余部分则提供了更高层的业务逻辑随着Web的普及,RESTAPI以其灵活易用性在SDN北向接口设计中得到了广泛的应用,REST定义了一组体系架构原则,开发者可以根据这些原则设计以系统资源为中心的Web服务这种架构下,每个资源都具有唯一的标识,对资源的操作包括获取、创建、修改和删除资源将REST用在SDN北向接口的设计中,可将控制器基本功能模块和各网元看作网络资源,对其进行标识,通过增删查改的方法操作相应资源的数据。RESTAPI操作简单,界面友好,很多控制器都提供了这种通过Web对SDN进行管理与设计的方式。计算机网络上的通信面临以下两大类威胁:被动攻击和主动攻击。6.1.2SDN其他北向接口OnePK(OnePlatformKit)开发平台Cisco于2012年6月提出了CiscoONE(OpenNetworkEnvironment)战略,以在传统设备的基础上提供可编程能力。其中OnePK作为ONE战略下重要的技术平台为传统Cisco的设备提供了一套完整的可编程环境OnePK架构OnePK提供了一套通用的编程接口OnePKAPI,上层应用可以基于这套API使用不同的高级语言进行开发,并通过OnePKAPI基础架构实现上层API和底层网络操作系统间的适配与代理。计算机网络上的通信面临以下两大类威胁:被动攻击和主动攻击。6.1.2SDN其他北向接口计算机网络上的通信面临以下两大类威胁:被动攻击和主动攻击。6.1.2SDN其他北向接口作为从传统网络到SDN的过渡性解决方案,OnePK的可编程能力可跨越传统的CiscoIOS、CiscoNXOS、CiscoIOSXR交换机操作系统实现,同时若在OnePK中集成对其他SDN南向接口协议的支持,就可以实现支持其他SDN协议的网络架构模型。OpenPK架构示意图计算机网络上的通信面临以下两大类威胁:被动攻击和主动攻击。6.1.3SDN北向接口的前景控制器本质上就是SDN的操作系统,它通过南向接口与转发设备通信,对用户屏蔽底层实现细节。通过北向接口与上层应用交互,提供更高层次的业务逻辑抽象SDN的最终价值:根据丰富的上层应用需求更加灵活地部署和控制网络控制器能否获得大规模应用的决定因素:北向接口是否友好、完备,直接决定着控制器的生命力计算机网络上的通信面临以下两大类威胁:被动攻击和主动攻击。6.1.3SDN北向接口的前景SDN北向接口的发展现状目前不甚明朗市场上控制器的种类五花八门各种控制器的应用模块只是独立地实现了业务逻辑,并没有提供数据、消息的交互接口开发人员很难使用这些模块进行二次开发没有统一的北向接口标准标准化工作迫在眉睫,但在网络的一致性与差异性之间难以找到一个平衡点,故业界却迟迟没有动作计算机网络上的通信面临以下两大类威胁:被动攻击和主动攻击。6.1.3SDN北向接口的前景标准化工作迫在眉睫,但在网络的一致性与差异性之间难以找到一个平衡点,故业界却迟迟没有动作不同的产业对IT能力的需求大相径庭不同利益方考虑的方面是不同的同一产业不同用户的网络环境也各不相同因此标准化功能集的定义问题就很难达成共识ONF计划制定的这套API标准函数集,仍然会需要很长一段时间去普及和推广尽管SDN北向接口的前景仍然不甚明朗,但毫无疑问,SDN未来要进行大规模的商用,离不开北向接口的标准化。6.2RESTAPI6.2.1什么是RESTAPI6.2.2RESTAPI的设计规范6.2.3开源控制器的RESTAPI6.2.1什么是RESTAPI
RESTAPI也称为RESTfulAPI,是遵循REST架构规范的应用编程接口(API或WebAPI),支持与RESTfulWeb服务进行交互。REST是表述性状态传递的英文缩写,由计算机科学家RoyFielding创建。REST是一组架构规范,并非协议或标准。API开发人员可以采用各种方式实施REST。用于接入设备执行监控和配置任务的协议和机制已经被适度地应用于SDN,例如SNMP、CLI、TLI、NETCONF和TR-069。作为SDN适用的API的一种新技术选择,REST使用了HTTP或HTTPS。基于这一技术的API称为RESTful接口。6.2.2RESTAPI的设计规范
从最基本的层面上讲,API是一种机制,使一个应用程序或服务能够访问另一个应用程序或服务中的资源客户机:执行访问的应用程序或服务服务器:包含所需资源的应用程序或服务RESTAPI几乎可以使用任何编程语言进行开发,并支持多种数据格式。唯一的要求是它们要符合以下六个REST设计原则-也称为架构约束。REST设计原则统一接口:无论请求来自何处,对同一资源发出的所有API请求都应该看起来相同。RESTAPI应确保同一条数据(例如用户的姓名或电子邮件地址)仅属于一个统一资源标识符(URI)。资源不应过大,但应包含客户可能需要的每一条信息。
客户端/服务器解耦:在RESTAPI设计中,客户端和服务器应用程序必须彼此完全独立。客户端应用程序只需知道所请求资源的URI即可;它不能以任何其他方式与服务器应用程序交互。同样,除了通过HTTP将客户端应用程序传递到所请求的数据外,服务器应用程序不应修改客户端应用程序。REST设计原则无状态:RESTAPI是无状态的,这意味着每个请求都需要包含处理它所需的全部信息。换句话说,RESTAPI不需要任何服务器端会话。不允许服务器应用程序存储与客户端请求相关的任何数据。可缓存性:如果可能,资源应该可以在客户端或服务器端缓存。服务器响应还需要包含有关是否允许对交付的资源进行缓存的信息。目标是提高客户端的性能,同时增强服务器端的可扩展性。REST设计原则分层系统架构:在RESTAPI中,调用和响应都会经过多个不同的层。根据经验,请怀要将客户端和服务器应用程序直接相互连接。通信环路中可能包含多个不同的中介服务器。要设计RESTAPI,让客户端和服务器都无法判断它是与最终应用程序还是中介服务器进行通信。按需编码(可选):RESTAPI通常发送静态资源,但在某些情况下,响应也可以包含可执行代码(例如Java小程序)。在这些情况下,代码只应按需运行。6.2.3开源控制器的RESTAPIRyu的RESTAPIRyu是一个基于组件的软件定义网络框架。Ryu提供具有明确定义的API的软件组件,使研发人员能够轻松创建新的网络管理和控制应用程序。Ryu支持各种协议来管理网络设备,例如OpenFlow,Netconf,OF-confng等。所有代码都可以在Apache2.0许可证下免费获得。Ryu是完全用Python编写的。ryu.app.ofctl_rest提供了于检索交换机统计信息和更新交换机统计信息的RESTAPI(a)获取所有交换机获取连接到控制器的所有交换机的列表。用法:响应消息正文:MethodGETURI/stats/swithesAttributeDescriptionExampledpidDatapathID1检索交换机统计信息(a)获取所有交换机使用示例:
$curl-XGEThttp://localhost:8080/stats/switches响应:[1,2,3]检索交换机统计信息(b)获取统计数据获取在URI中使用数据路径ID指定的交换机的desc统计信息。用法:检索交换机统计信息MethodGETURI/stats/desc/<dpid>(b)获取统计数据响应消息正文:检索交换机统计信息AttributeDescriptionExampledpidDatapathID1mfr_descManufacturerdescriptionNicria,Inc.hw_descHarwaredescriptionOpenvSwitchsw_descSoftwaredescription2.3.90serial_descSerialnumberNonedp_descHumanreadabledescriptionofdatapathNone(b)获取统计数据使用示例:$curl-XGEThttp://localhost:8080/stats/desc/1响应:{"1":{"mfr_desc":"Nicira,Inc.","hw_desc":"OpenvSwitch","sw_desc":"2.3.90","serial_num":"None","dp_desc":"None"}}检索交换机统计信息(c)获取所有流统计信息获取在URI中使用数据路径ID指定的交换机的所有流量统计信息。用法:检索交换机统计信息MethodGETURI/stats/flow/<dpid>(c)获取所有流统计信息检索交换机统计信息AttributeDescriptionExampledpidDatapathID"1"lengthLengthofthisentry88table_idTableID0duration_secTimeflowhasbeenaliveinseconds2duration_nsecTimeflowhasbeenaliveinnanosecondsbeyondduration_sec6.76e+08priorityPriorityoftheentry11111idle_timeoutNumberofsecondsidlebeforeexpiration0hard_timeoutNumberofsecondsbeforeexpiration0flagsBitmapofOFPFF_*flags1cookieOpaquecontroller-issuedidentifier1packet_countNumberofpacketsinflow0byte_countNumberofbytesinflow0matchFieldstomatch{"in_port":1}actionsInstructionset["OUTPUT:2"]响应消息正文(c)获取所有流统计信息使用示例:curl-XGEThttp://localhost:8080/stats/flow/1响应:{"1":[{"length":88,"table_id":0,"duration_sec":2,"duration_nsec":6.76e+08,"priority":11111,"idle_timeout":0,"hard_timeout":0,"flags":1,检索交换机统计信息"cookie":1,"packet_count":0,"byte_count":0,"match":{"in_port":1},"actions":["OUTPUT:2"]}]}(d)获取字段筛选的流统计信息获取按OFPFlowStats字段筛选的交换机的流统计信息。这是获取所有流统计信息的POST方法版本。用法:检索交换机统计信息MethodPOSTURI/stats/flow/<dpid>(d)获取字段筛选的流统计信息请求消息正文:检索交换机统计信息AttributeDescriptionExampleDefaulttable_idTableID(int)0OFPTT_ALLout_portRequirematchingentriestoincludethisasanoutputport(int)2OFPP_ANYout_portRequirematchingentriestoincludethisasanoutputgroup(int)1OFPG_ANYcookieRequirematchingentriestocontainthiscookievalue(int)10cookie_maskMaskusedtorestrictthecookiebitsthatmustmatch(int)10matchFieldstomatch(dict){“int_port”:1}{}#wildcardedpriorityPriorityoftheentry(int)(SeeNote)11111#wildcarded(d)获取字段筛选的流统计信息响应消息正文:与获取流统计信息相同使用示例:$curl-XPOST-d'{"table_id":0,"out_port":2,"cookie":1,"cookie_mask":1,"match":{"in_port":1}
}'http://localhost:8080/stats/flow/1检索交换机统计信息(d)获取字段筛选的流统计信息响应消息正文:与获取流统计信息相同响应:{"1":[{"length":88,"table_id":0,"duration_sec":2,"duration_nsec":6.76e+08,"priority":11111,"idle_timeout":0,"hard_timeout":0,检索交换机统计信息"flags":1,"cookie":1,"packet_count":0,"byte_count":0,"match":{"in_port":1},"actions":["OUTPUT:2"]}]}(a)添加流条目将流条目添加到交换机。用法:更新交换机统计信息MethodPOSTURI/stats/flowentry/add(a)添加流条目请求消息正文更新交换机统计信息AttributeDescriptionExampleDefaultdpidDatapathID(int)1(Mandatory)cookieOpaquecontroller-issuedidentifier(int)10cookie_maskMaskusedtorestrictthecookiebits(int)10table_idTableIDtoputtheflowin(int)00idle_timeoutIdletimebeforediscarding(seconds)(int)300hard_timeoutMaxtimebeforediscarding(seconds)(int)300priorityPrioritylevelofflowentry(int)111110buffer_idBufferedpackettoapplyto,orOFP_NO_BUFFER(int)1OFP_NO_BUFFERflagsBitmapofOFPFF_*flags(int)10matchFieldstomatch(dict){"in_port":1}{}#wildcardedactionsInstructionset(listofdict)[{"type":"OUTPUT","port":2}][]#DROP(a)添加流条目使用示例:$curl-XPOST-d'{"dpid":1,"cookie":1,"cookie_mask":1,"table_id":0,"idle_timeout":30,"hard_timeout":30,"priority":11111,"flags":1,更新交换机统计信息"match":{"in_port":1},"actions":[{"type":"OUTPUT","port":2}]}'http://localhost:8080/stats/flowentry/add(a)添加流条目使用示例:$curl-XPOST-d'{"dpid":1,"priority":22222,"match":{"in_port":1},"actions":[{"type":"GOTO_TABLE","table_id":1}]}'http://localhost:8080/stats/flowentry/add更新交换机统计信息(a)添加流条目使用示例:$curl-XPOST-d'{"dpid":1,"priority":33333,"match":{"in_port":1},"actions":[{"type":"WRITE_METADATA","metadata":1,"metadata_mask":1}]}'http://localhost:8080/stats/flowentry/add更新交换机统计信息(a)添加流条目使用示例:$curl-XPOST-d'{"dpid":1,"priority":44444,"match":{"in_port":1},"actions":[{"type":"METER","meter_id":1}]}'http://localhost:8080/stats/flowentry/add更新交换机统计信息(b)修改所有匹配的流条目修改交换机的所有匹配流条目。用法:更新交换机统计信息MethodPOSTURI/stats/flowentry/modify(b)修改所有匹配的流条目请求消息正文更新交换机统计信息AttributeDescriptionExampleDefaultdpidDatapathID(int)1(Mandatory)cookieOpaquecontroller-issuedidentifier(int)10cookie_maskMaskusedtorestrictthecookiebits(int)10table_idTableIDtoputtheflowin(int)00idle_timeoutIdletimebeforediscarding(seconds)(int)300hard_timeoutMaxtimebeforediscarding(seconds)(int)300priorityPrioritylevelofflowentry(int)111110buffer_idBufferedpackettoapplyto,orOFP_NO_BUFFER(int)1OFP_NO_BUFFERflagsBitmapofOFPFF_*flags(int)10matchFieldstomatch(dict){"in_port":1}{}#wildcardedactionsInstructionset(listofdict)[{"type":"OUTPUT","port":2}][]#DROP(b)修改所有匹配的流条目使用示例:$curl-XPOST-d'{"dpid":1,"cookie":1,"cookie_mask":1,"table_id":0,"idle_timeout":30,"hard_timeout":30,"priority":11111,"flags":1,"match":{"in_port":1},更新交换机统计信息"actions":[{"type":"OUTPUT","port":2}]}'http://localhost:8080/stats/flowentry/modify(c)严格修改流条目严格按照匹配通配符和优先级修改流条目。用法:更新交换机统计信息MethodPOSTURI/stats/flowentry/modify_strict(c)严格修改流条目请求消息正文更新交换机统计信息AttributeDescriptionExampleDefaultdpidDatapathID(int)1(Mandatory)cookieOpaquecontroller-issuedidentifier(int)10cookie_maskMaskusedtorestrictthecookiebits(int)10table_idTableIDtoputtheflowin(int)00idle_timeoutIdletimebeforediscarding(seconds)(int)300hard_timeoutMaxtimebeforediscarding(seconds)(int)300priorityPrioritylevelofflowentry(int)111110buffer_idBufferedpackettoapplyto,orOFP_NO_BUFFER(int)1OFP_NO_BUFFERflagsBitmapofOFPFF_*flags(int)10matchFieldstomatch(dict){"in_port":1}{}#wildcardedactionsInstructionset(listofdict)[{"type":"OUTPUT","port":2}][]#DROP(c)严格修改流条目使用示例:$curl-XPOST-d'{"dpid":1,"cookie":1,"cookie_mask":1,"table_id":0,"idle_timeout":30,"hard_timeout":30,"priority":11111,"flags":1,"match":{"in_port":1},更新交换机统计信息"actions":[{"type":"OUTPUT","port":2}]}'http://localhost:8080/stats/flowentry/modify_strict(d)删除所有匹配的流条目删除交换机的所有匹配流条目。用法:更新交换机统计信息MethodPOSTURI/stats/flowentry/delete(d)删除所有匹配的流条目请求消息正文更新交换机统计信息AttributeDescriptionExampleDefaultdpidDatapathID(int)1(Mandatory)cookieOpaquecontroller-issuedidentifier(int)10cookie_maskMaskusedtorestrictthecookiebits(int)10table_idTableIDtoputtheflowin(int)00idle_timeoutIdletimebeforediscarding(seconds)(int)300hard_timeoutMaxtimebeforediscarding(seconds)(int)300priorityPrioritylevelofflowentry(int)111110buffer_idBufferedpackettoapplyto,orOFP_NO_BUFFER(int)1OFP_NO_BUFFERout_portOutputport(int)1OFPP_ANYout_groupOutputgroup(int)1OFPG_ANYflagsBitmapofOFPFF_*flags(int)10matchFieldstomatch(dict){"in_port":1}{}#wildcardedactionsInstructionset(listofdict)[{"type":"OUTPUT","port":2}][]#DROP(d)删除所有匹配的流条目使用示例:$curl-XPOST-d'{"dpid":1,"cookie":1,"cookie_mask":1,"table_id":0,"idle_timeout":30,"hard_timeout":30,"priority":11111,"flags":1,"match":{"in_port":1},更新交换机统计信息"actions":[{"type":"OUTPUT","port":2}]}'http://localhost:8080/stats/flowentry/delete6.2.3开源控制器的RESTAPIFloodlight的RESTAPIFloodlightdRESTAPI包括四类,分别为ACL(AccessControlList)、Firewall、StaticEntryPusher、VirtualNetworkFilter6.2.3开源控制器的RESTAPI用法示例
URIMethodDescriptionArgumentsControllerVersionControllerAPIs/wm/core/controller/switches/jsonGETListofallswitchDPIDsconnectedtothecontrollernoneall/wm/core/controller/summary/jsonGETControllersummary(#ofSwitches,#ofLinks,etc.)noneall/wm/core/module/all/jsonGETRetrieveallregistered(butnotloaded)modules.noneall/wm/core/module/loaded/jsonGETRetrieveallmodulesactivelyloadedbythemoduleloader.noneall/wm/core/memory/jsonGETCurrentcontrollermemoryusagenoneall/wm/core/health/jsonGETStatus/HealthofRESTAPInoneall/wm/core/version/jsonGETControllerversionandnamenoneall/wm/core/system/uptime/jsonGETControlleruptimenoneall/wm/core/storage/tables/jsonGETTablespresentinStorage.noneall6.2.3开源控制器的RESTAPI用法示例
URIMethodDescriptionArgumentsControllerVersionStatisticsAPIs/wm/statistics/config/enable/jsonPOSTPUTEnablestatisticscollectionSendemptystringv1.2andup/wm/statistics/config/disable/jsonPOSTPUTDisablestatisticscollectionSendemptystringv1.2andup/wm/statistics/bandwidth/<switchId>/<portId>/jsonGETFetchRX/TXbandwidthconsumptionswitchId:ValidSwitchDPIDascolon-delimitedhexstringorinteger.Use"all"forallswitches.portId:Validswitchportnumberv1.2andup/networkService/v1.1/tenants/<tenant>/networksGETShowsallnetworksandtheirgateway,ID,andhostsmacinjsonformat.
URIargument:
tenant:Currentlyignored.
v0.91andup6.2.3开源控制器的RESTAPI用法示例
URIMethodDescriptionArgumentsControllerVersionFirewallAPIs/wm/firewall/module/status/jsonGETQuerythestatusofthefirewall.
all/wm/firewall/module/enable/jsonPUTEnablethefirewall.Sendemptystringall/wm/firewall/module/disable/jsonPUTDisablethefirewall.Sendemptystringall/wm/firewall/module/subnet-mask/jsonGETGetthefirewall'sconfiguredsubnetmask.Noneall
POSTSetthesubnetmaskofthefirewall."subnet-mask":"X.X.X.X",whereX.X.X.XisavalidIPv4subnetmask.all6.2.3开源控制器的RESTAPI用法示例
URIMethodDescriptionArgumentsControllerVersionControllerPerformanceAPIs/wm/performance/jsonGETGetcontrollerperformancemonitoringstatus
nonev0.9andup/wm/performance/enable/jsonPOSTEnablecontrollerperformancemonitoringnonev0.9andup/wm/performance/disable/jsonPOSTDisablecontrollerperformancemonitoringnonev0.9andup/wm/performance/reset/jsonPOSTResetcontrollerperformancemonitoringnonev0.9andup/wm/performance/data/jsonGETRetrievetheaveragepacket-inprocessingtimeofthecontrollernonev0.9andup6.2.3开源控制器的RESTAPI检索交换机统计信息
b)获取统计数据
获取在URI中使用数据路径ID指定的交换机的desc统计信息。
用法:MethodGETURI/stats/desc/<dpid>6.2.3开源控制器的RESTAPI检索交换机统计信息
b)获取统计数据
获取在URI中使用数据路径ID指定的交换机的desc统计信息。
用法:MethodGETURI/stats/desc/<dpid>6.3.1 RESTCONF概述6.3.2 资源模型6.3RESTCONF协议6.3.3
消息6.3.4
操作6.3.1RESTCONF概述REST概念介绍:REST是RepresentationalStateTransfer的缩写,即表现层状态转化REST是一种基于HTTP的架构风格,不是标准网络中的实体被视为资源,资源有多种表现形式,如XML、JSON等状态转移指的是资源状态的改变,由于HTTP是无状态的,状态保存在服务端。当对服务端的资源进行操作时,必然存在数据状态的改变由于状态的改变基于表现层,所以称为表现层状态转移6.3.1RESTCONF概述REST实现细节:资源通过URI定位HTTP的Header中的Content-Type和Accept定义了资源的表现层形式使用HTTP中CURD动作(Create,Put,Get,Delete,patch..)去改变服务端的资源状态。REST应用示例通过GET请求访问书店图书资源:GET/products6.3.1RESTCONF概述RESTCONF概念引入:RESTCONF是RESTCONF(RESTfulConfiguration)的缩写,是一种通过REST来实现对网络设备管理的协议其本质和NETCONF很像,使用YANG进行数据的定义和约束,使用HTTP进行交互。使用NETCONF中datastore的概念,进行信息的储存RESTCONF是一种基于HTTP的协议,提供RESTful风格的编程接口,支持对网络设备的数据进行增、删、改、查操作6.3.1RESTCONF概述RESTCONF的必要性和优势:随着网络规模和复杂性的增加,自动化运维需求上升NETCONF虽然提供了基于RPC的应用编程接口,但已不能满足新的需求RESTCONF结合了NETCONF和HTTP的优点,提供了符合REST风格的标准化接口为用户提供了高效开发WEB化运维工具的能力RESTCONF与NETCONF比较6.3.2资源模型RESTCONF协议操作的对象是有层次结构的资源,首先处理它的顶级API资源。每个资源代表设备中的一个可管理组件。可以认为资源是由概念数据集合和允许操作该数据的方法集组成的。它可以包含子节点,即嵌套资源或域。子资源的类型和允许操作它们的方法是数据模型相关的。资源有它自己的媒体类型标识符,用HTTP响应头中的“Content-Type”字段表示。一个资源可以包含0个或多个嵌套资源。一个资源的创建和删除操作可以独立于它的父资源,如果它的父资源存在的话。6.3.2资源模型客户端应该首先获取顶级API资源,使用入口点URI“/.wellknown/restconf”RESTCONF协议没有包含资源发现机制。相反,服务器端发布的YANG组件定义了这些机制,用于构建可预测操作和数据资源标识符。当获取子资源时,使用请求参数“depth”可以控制返回子资源的层级深度。这个参数可以和GET方法一起使用,用于发现指定资源中的子资源。RESTCONF媒体类型6.3.3消息RESTCONF协议中使用的消息有个请求消息头和响应消息头,它们通常应用于数据来源。RESTCONF请求消息头RESTCONF响应消息头6.3.3消息RESTCONF报文编码:依据RFC2616进行HTTP编码。使用UTF-8字符集。报文文本位置:报文文本位于HTTP消息体中。编码格式内容编码为JSON或XML。XML编码规则遵循RFC6020。相同的编码规则适用于所有的XML内容。JSON编码规则遵循I-D.lhotka-netmod-json。普通的JSON不能被使用,因为有特殊的编码规则被用来处理多种模块的命名空间,还要提供一致的数据类型处理。6.3.3消息编码格式请求输入文本编码格式通过Content-Type头定义。如果存在一个报文体要发送,这个字段就必须出现。响应输出内容编码通过Accept头或查询参数“格式”标识。查询参数的“格式”,如果没有指定,就使用请求输入的编码格式默认输出编码格式为XML。文件扩展编码在请求中不被用来识别格式编码。
YANG到JSON映射映射遵循I-D.lhotka-netmod-json编码规则。该方式不不支持属性,因为YANG不支持数据节点中的元数据定义。RESTCONF元数据按JSON方式编码在一个特定的数据节点中一个元数据实例只能出现0次或1次根据[I-D.lhotka-netmod-json]编码规则,一个元数据实例与一个资源相关的编码就好像一个YANG叶子类型的字符串,除了以"@"(%40)字符开头的标示符。一个元数据实例关联到一个资源内的域的编码,就好像它是一个容器的元数据的值和容器内域的值的原生编码。这种编译方式根据[I-D.lhotka-netmod-json]原则,除了以"@"(%40)开头的元数据外。由容器的名称与容器的值组成的键值对将会在这个容器中重复出现,这个容器也包含域的名称与实际值的键值对。RESTCONF元数据按JSON方式编码缓存问题由于数据存储的内容存在不可预测的时间变化,RESTCONF服务器的响应通常不会被缓存。对每个回应来说,服务器应该包括一个“缓存-控制”头,它指定是否应该缓存响应。“Pragma”头可以指定“不-缓存”也可以指定不支持“缓存-控制”头。缓存控制替代使用HTTP缓存的,是客户端应该要追踪“ETag”和/或“最后-修改”头返回的服务器数据存储资源(或数据资源-如果服务器支持的话)。检索请求一个资源可以包括标题,如“如果没有匹配(IfNoneMatch)”或“如果修改是因为(IfModifiedSince)“这会让服务器返回一个“304”错误,即如果资源没有改变就不可修改状态栏。如果这个目标资源的元数据被维护着,客户端可以使用的方法来检索消息头,这应该包括“ETag”和“最后-修改”头。6.3.3消息RESTCONF元数据按JSON方式编码RESTCONF协议使用HTTP方法来为针对特别资源的请求定义CRUD操作。6.3.4操作OPTIONSOPTIONS方法是由客户端发送的,用来确定服务器针对特定资源支持哪种方法。它支持所有的多媒体类型。请求必须包含一个至少包含了输入点组件的URI请求。服务器会返回包含“204NoConten”的“Status-Line”头,并且在响应中包含一个“Allow”头。这个头将会根据目标多媒体资源类型来填值。响应中可能也会其他头。RESTCONF元数据按JSON方式编码6.3.4操作OPTIONS示例:客户端可能请
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年会策划范文集锦6篇
- 大学生实习报告范文锦集5篇
- 金融专业学生自我鉴定6篇
- 背手上铐的课件
- 建设监理合同(合集15篇)
- 2022大学生三下乡社会实践服务报告范文8篇
- 企业年终个人工作总结2021年
- 反心灵鸡汤课件
- 学校感恩节策划方案
- 节约粮食主题演讲稿
- 5.2《大学之道》课件+2024-2025学年统编版高中语文选择性必修上册
- 案例2-5 节能效果对比讲解
- 荆楚民艺智慧树知到期末考试答案章节答案2024年湖北第二师范学院
- SH/T 3065-2024 石油化工管式炉急弯弯管工程技术规范(正式版)
- 穿脱隔离衣的流程及注意事项
- GB/T 43878-2024旋挖钻机截齿
- 四年级语文上册期末试卷(下载)
- 拼多多营销总结报告
- 手术室护士交接流程
- 中式面点技艺智慧树知到期末考试答案2024年
- 干槽症的治疗方案
评论
0/150
提交评论