一.Rest API简介

REST即表述性状态传递(RepreSentational State Transfer),是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

表述性状态转移是一组构架约束条件和原则,满足这些约束和原则的应用程序或设计就是RESTful,REST是设计风格而不是标准,它通常基于使用HTTP,URI,XML以及HTML这些现有的广泛流行的协议和标准。

REST定义了一组体系构架原则,可以根据这些原则设计以系统资源为中心的Web服务,包括使用不同语言编写的客户端如何通过HTTP处理和传输资源状态。

二.ryu中REST API简介

ryu已经提供了一些RESTAPI的定义,在ryu/app目录下可以找到如下相关的文件:

ofctl_rest.py rest_topology.py rest_firewall.py rest_qos.py rest_router.py

打开这些文件简单浏览下可以发现他们分别提供了和OpenFlow协议,拓扑等相关的信息查询和配置,查询的结果以json格式返回给浏览器,而配置会调用相关模块的相关函数,可以简单的看下获取SDN网络中的交换机的代码。获取switches的指令为:http://ip:port/stats/switches,首先会解析出Http请求(GET),以及所需要的内容(switches),然后调用对应的函数(get_dpids)。在函数中,得到对应的内容,然后以json形式返回

path = '/stats'
uri = path + '/switches'
mapper.connect('stats', uri,
controller=StatsController, action='get_dpids',
conditions=dict(method=['GET'])) def get_dpids(self, req, **_kwargs):
dps = list(self.dpset.dps.keys())
body = json.dumps(dps)
return Response(content_type='application/json', body=body)

了解代码是为了更好的用它,或者可以轻易的修改,得到自己想要的结果,浅尝辄止,不宜重复造车

在使用对应的RESTAPI之前,需要用ryu-manager *.rest*..py加载对应的模块

三. ryu常用的RESTAPI简介

最常用RESTAPI是ofctl_rest.py提供的RESTAPI,它提供了与OpenFlow相关的接口,如查看交换机,最有用的应该是查看、添加、修改流表等。在oftcl_rest.py文件的前面注释部分我们可以得到接口的使用方法,列举如下:

# Retrieve the switch stats
#
# get the list of all switches
# GET /stats/switches
#
# get the desc stats of the switch
# GET /stats/desc/<dpid>
#
# get flows stats of the switch
# GET /stats/flow/<dpid>
#
# get flows stats of the switch filtered by the fields
# POST /stats/flow/<dpid>
#
# get aggregate flows stats of the switch
# GET /stats/aggregateflow/<dpid>
#
# get aggregate flows stats of the switch filtered by the fields
# POST /stats/aggregateflow/<dpid>
#
# get table stats of the switch
# GET /stats/table/<dpid>

比如为了得到SDN网络中的所有交换机,需要用GET /stats/switches,如果要用浏览器进行查看,使用http://ip:port/stats/switches发送GET请求

四. ryu中RESTAPI的三种使用方式

  1. 在浏览器中输入类似http://ip:port/stats/switches命令来发送GET请求,获取信息,ip为控制器的IP,ryu提供的port为8080
  2. 用curl(curl是利用URL语法在命令行方式下工作的开源文件传输工具)代替浏览器,在终端输入curl http://ip:port/stats/switches来传输内容
  3. 利用chrome等浏览器提供的插件Postman,经过使用,非常推荐这种方法,原因如下:
    1. 提供了Pretty和Raw两种结果展示方法,Raw和前面两种方法的返回格式一样,但是Pretty的格式的可视性和便读性远远好于Raw
    2. 提供了JSON和XML两种格式展示结果
    3. 下发流表同样简单,可视化比较好,只需要在body里面按照python字典的格式书写流表,然后下发即可
    4. 可以显示对请求的response,比如成功的话STATUS会显示200 OK

流表的灵活性是SDN网络的优势之一,利用上述方法在查看流表,验证网络功能,开发APP具有非常重要的作用

ryu的RESTAPI简介——我主要用于下发和查看流表的更多相关文章

  1. FAST:通过Floodlight控制器下发流表

    参考: Floodlight+Mininet搭建OpenFlow(四):流表操作 通过Floodlight控制器下发流表 下发流表的方式有两种: 1.借助Floodlight的北向API,利用curl ...

  2. OpenDayLight Beryllium版本 下发流表实现hardtimeout

    1. 实验拓扑 2. 创建拓扑 from mininet.topo import Topo class MyTopo(Topo): def __init__(self): # initilaize t ...

  3. 实验 6:OpenDaylight 实验——OpenDaylight 及 Postman 实现流表下发

    一.实验目的 熟悉 Postman 的使用:熟悉如何使用 OpenDaylight 通过 Postman 下发流表. 二.实验任务 流表有软超时和硬超时的概念,分别对应流表中的 idle_timeou ...

  4. 实验 6 :OpenDaylight 实验——OpenDaylight 及 Postman实现流表下发

    实验 6 :OpenDaylight 实验--OpenDaylight 及 Postman实现流表下发 一.实验目的 熟悉 Postman 的使用:熟悉如何使用 OpenDaylight 通过 Pos ...

  5. openflow流表项中有关ip掩码的匹配的问题(控制器为ryu)

    一.写在前面 唉,被分配到sdn安全方向,顶不住,顶不住,感觉搞不出来什么有搞头的东西.可若是让我水水的应付,我想我也是做不到的,世上无难事只怕有心人.好了,进入正题,本次要讨论的时一个比较细节的东西 ...

  6. Floodlight下发流表过程分析

    https://blog.csdn.net/vonzhoufz/article/details/32166445 当一个packet到达openflow交换机,会进行流表的匹配,如果没有找到相应的流表 ...

  7. SDNLAB技术分享(四):利用ODL下发流表创建VxLAN网络

    邓晓涛,当前就职于江苏省未来网络创新研究院,是CDN团队的一名研发人员,主要从事SDN相关的研发相关工作.曾就职于三星电子于先行解决方案研发组任高级工程师.思科系统于云协作应用技术部(CCATG)任工 ...

  8. 实验 6:OpenDaylight 实验——OpenDaylight 及 Postman 实现流表下发

    一.实验目的 熟悉 Postman 的使用;熟悉如何使用 OpenDaylight 通过 Postman 下发流表. 二.实验任务 流表有软超时和硬超时的概念,分别对应流表中的 idle_timeou ...

  9. ryu 下发流表配置

    资料链接:http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html 运行ryu进程: ryu-manager --ofp-tcp-listen-p ...

随机推荐

  1. 使用Guava报错NoSuchMethodError的解决方法

    在使用Guava缓存的时候.系统报错: java.lang.NoSuchMethodError: com.google.common.base.Objects.firstNonNull 错误原因就是找 ...

  2. oracle 存储过程 ,触发器练习

    /*以下代码是对emp表进行显示宽度设置 */col empno for 9999;col ename for a10;col job for a10;col mgr for 9999;col hir ...

  3. JBoss jar包冲突及jar加载顺序

    http://blog.163.com/javaee_chen/blog/static/17919507720116149511489/将一个完整的.war包部署到Jboss容器中,启动后报如下错误: ...

  4. linux磁盘满时,如何定位并删除文件

    原文链接: http://www.cnblogs.com/yinxiangpei/articles/4211743.html @1.一般情况   一般情况下先df看一下,然后cd到要满的盘,执行: d ...

  5. Azure Storage Blob 属性设置

    概述 在使用SDK做Blob对象属性的获取或设置时,如果只是直接使用get或set方法,是无法成功获取或设置blob对象的属性.主要是因为在获取对象时,对象的属性默认并未被填充到对象,这就需要执行额外 ...

  6. 阻塞IO、非阻塞IO的区别

    1.类与类之间的关系:依赖,实现,泛化(继承),关联,组合,聚合. 1)依赖(虚线):一个类是 另一个类的函数参数 或者 函数返回值. 2)实现(实线加小圆):对纯虚函数类(抽象类)的实现. 3)继承 ...

  7. 区分SQL Server关联查询之inner join,left join, right join, full outer join并图解

    1.from A inner join B on A.ID=B.ID :两表都有的记录才列出 A表:  ID   Name                           B表: ID  Clas ...

  8. 使用 P3P 规范让 IE 跨域接受第三方 cookie

    前两天帮同事处理一个 js 跨域问题,使用 jsonp 跨域提交用户名密码请求,实现自动登录第三方网站,即 SSO(single-sign-on) 单点登录,一处登录处处登录.在 Chrome 下没问 ...

  9. [k8s]k8s架构图解

    k8s架构图解 启动参数及证书梳理 master端必须要装flannel 注: flannel网络能确保各节点间 Pod 网段实现互通 master 节点与 node 节点上的 Pods 通过 Pod ...

  10. 品茗论道说广播(Broadcast内部机制讲解)(下)

    下面我们来看,递送广播动作中最重要的processNextBroadcast(). 3.2 最重要的processNextBroadcast() 从processNextBroadcast()的代码, ...