zoukankan      html  css  js  c++  java
  • ryu的RESTAPI简介——我主要用于下发和查看流表

    一.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具有非常重要的作用

  • 相关阅读:
    递归判断字符串是否为回文
    原码,补码,反码
    Java语言程序设计2019.9.16
    四则运算---根据用户要求输出计算题源代码
    学生成绩管理系统-JAVA语言测试
    暑假生活第八周
    暑假生活第七周
    暑假生活第六周
    POJ 2400 Supervisor, Supervisee(KM二分图最大权值匹配)题解
    POJ 2226 Muddy Fields(最小点覆盖)题解
  • 原文地址:https://www.cnblogs.com/cotyb/p/5011544.html
Copyright © 2011-2022 走看看