"YANG, OpenAPI, Swagger"实操

因为要熟悉从YANG model到Swagger UI的过程,搜到这篇文章,然后就按部就班进行操作。
关于OpenAPI和Swagger的简介,可以看这里

前言

下面的操作演示了如何从一篇RFC文档通过各种开源工具直至生成Swagger的过程。RFC8299的题目是<YANG data Model for L3VPN Service Delivery>。是否懂得相关网络知识并不会影响下面的演示。

下面的操作是基于CentOS7.7系统进行的,需要先安装好需要的工具。

yum install git python-pip -y
easy_install --upgrade pip
pip install pyang
pip install --user --upgrade setuptools

通过网页浏览器可以看到看到最终的效果。

第一步

  • 创建工作目录
[root@localhost ~]# mkdir yang_rfcs
[root@localhost ~]#  cd yang_rfcs/
[root@localhost yang_rfcs]# 

第二步

  • 下载txt格式的rfc8299
[root@localhost yang_rfcs]# wget https://www.rfc-editor.org/rfc/rfc8299.txt

第三步

  • 使用开源工具xym来从RFC文档中提取出YANG model的相关内容
[root@localhost yang_rfcs]# git clone https://github.com/xym-tool/xym.git
[root@localhost yang_rfcs]# cd xym/
[root@localhost xym]# 
[root@localhost xym]# python setup.py install
...
[root@localhost xym]# xym ../rfc8299.txt --dstdir ../

Extracting 'ietf-l3vpn-svc@2018-01-19.yang'
Created the following models:
ietf-l3vpn-svc@2018-01-19.yang
[root@localhost xym]# 
[root@localhost xym]# cd ../
[root@localhost yang_rfcs]# ll
total 412
-rw-r--r-- 1 root root  72828 4月  11 08:13 ietf-l3vpn-svc@2018-01-19.yang
-rw-r--r-- 1 root root 344738 1月  20 2018 rfc8299.txt
drwxr-xr-x 9 root root    242 4月  11 08:05 xym
[root@localhost yang_rfcs]# 
[root@localhost yang_rfcs]# mv ietf-l3vpn-svc@2018-01-19.yang ietf-l3vpn-svc.yang
[root@localhost yang_rfcs]# 
[root@localhost yang_rfcs]# ll
total 412
-rw-r--r-- 1 root root  72828 4月  11 08:13 ietf-l3vpn-svc.yang
-rw-r--r-- 1 root root 344738 1月  20 2018 rfc8299.txt
drwxr-xr-x 9 root root    242 4月  11 08:05 xym
[root@localhost yang_rfcs]# 

第四步

  • 使用EAGLE from the OpenNetworkingFoundation将yang文件转为JSON
  • 按照原文操作是不行的,因为相关的tool是在这个project的一个分支上,所以应该直接拉取对应的分支
[root@localhost yang_rfcs]# git clone -b ToolChain https://github.com/OpenNetworkingFoundation/EagleUmlCommon.git
Cloning into 'EagleUmlCommon'...
remote: Enumerating objects: 5702, done.
remote: Total 5702 (delta 0), reused 0 (delta 0), pack-reused 5702
Receiving objects: 100% (5702/5702), 34.90 MiB | 3.45 MiB/s, done.
Resolving deltas: 100% (2627/2627), done.
[root@localhost yang_rfcs]# 
[root@localhost yang_rfcs]# 
[root@localhost EagleUmlCommon]# cd YangJsonTools/
[root@localhost YangJsonTools]# 
[root@localhost YangJsonTools]# ll
total 60
drwxr-xr-x 2 root root    23 4月  11 08:36 export
-rw-r--r-- 1 root root 16512 4月  11 08:36 json_schema.py
-rw-r--r-- 1 root root  3635 4月  11 08:36 README.md
-rw-r--r-- 1 root root 34409 4月  11 08:36 swagger.py
[root@localhost YangJsonTools]# 
  • 使用swagger.py这个工具进行转换,得到rfc8299.json这个OpenAPI JSON文件
[root@localhost YangJsonTools]# pyang --plugindir ./ -f swagger -p ../ -o export/rfc8299.json ../../ietf-l3vpn-svc.yang --generate-rpc=False
[root@localhost YangJsonTools]# 
[root@localhost YangJsonTools]# ll export/
total 1276
-rw-r--r-- 1 root root      42 4月  11 08:36 README.md
-rw-r--r-- 1 root root 1298758 4月  11 08:43 rfc8299.json
[root@localhost YangJsonTools]# 

[root@localhost export]# pwd
/root/yang_rfcs/EagleUmlCommon/YangJsonTools/export
[root@localhost export]# 
[root@localhost export]# export EXPORTS=`echo $PWD`
[root@localhost export]# 

第五步

  • 运行swagger这个docker,立即获得swagger-ui的相关环境(给docker点赞)
  • 同时将上一步生成的json文件进行关联
[root@localhost export]# docker run --name swagger -d -p 80:8080 -e BASE_URL=/swagger -e SWAGGER_JSON=/swaggerfiles/rfc8299.json -v $EXPORTS:/swaggerfiles swaggerapi/swagger-ui
Unable to find image 'swaggerapi/swagger-ui:latest' locally
latest: Pulling from swaggerapi/swagger-ui
4167d3e14976: Pull complete 
bb292c78f105: Pull complete 
06e2f99e39f6: Pull complete 
04b68d059149: Pull complete 
4835b8b58a75: Pull complete 
84c674289d42: Pull complete 
c76cef198b6e: Pull complete 
786449cea7ff: Pull complete 
Digest: sha256:296a52d58294d60936955c661023e80c18c64afd56e9da83a6b57283ed7cbe9b
Status: Downloaded newer image for swaggerapi/swagger-ui:latest
b79be97ac7a0b9a1caf6b3419418becd2a145f348ac4b4d0ab99de70be4f94b2
[root@localhost export]# 
[root@localhost export]# docker ps | grep swagger
b79be97ac7a0        swaggerapi/swagger-ui                    "sh /usr/share/nginx…"   About a minute ago   Up About a minute   80/tcp, 0.0.0.0:80->8080/tcp   swagger
[root@localhost export]# 

第六步

  • 打开网址http://<host-ip>/swagger


  • Web显示的相关项,可以对照JSON文件的相关段落

后续

上面只是生成了一个“空壳”,点击执行并不会有什么效果。后续需要添加相关的代码,实现对应的功能。原文中有举例,感兴趣的同学可以自己试试。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容