LoginSignup
1
0

More than 3 years have passed since last update.

swagger.yamlから、Pythonで、APIリスト.csvを作成してみました

Last updated at Posted at 2020-10-15

環境構築

ついでに、初めてQiitaで記事を書いてみました。

前提

MacBook Pro
macOS Catalina 10.15.7

導入

下記をインストールしました。

  1. Docker
  2. Visual Studio Code
  3. Visual Studio Code 拡張機能
    1. Japanese Language Pack
    2. Docker 1.6.0
    3. Remote - Containers 0.145.0
    4. Python
    5. PyLint
    6. Rainbow CSV 1.7.1
    7. YAML 0.11.1
    8. Swagger Viewer 3.0.1
    9. OpenAPI (Swagger) Editor 3.7.0

参考:

設定

  1. VS Code 同期設定の有効化
  2. 作業フォルダ作成 (dropbox内に作成しました)
  3. VS Code で作業フォルダを開く

作業

  1. Github でレポジトリ作成
  2. 手元で、microsoft/vscode-remote-try-pythonをコピー(git clone)
  3. フォルダ名と、git remote set-urlでremote 宛先を自分のレポジトリに変更

エラー対応

ライブラリのインストールや、Jupiterの利用で、エラーが出たため、
ひとまず、ユーザーをrootのままとするようなコメントアウトを行いました。

ライブラリインストール

PyYAMLライブラリ,CSVライブラリを使います。
requirements.txtに書いて、Rebuild And Rerunするだけなのでとても簡単で素晴らしいです。

requirements.txt
flask
pyyaml
csv
ipykernel

コーディング

yamlを開いて、
順繰りにCSVに書き込みたい内容を収集し、
CSV保存して
完了です。

yamlが辞書型というもので読み込まれるので、
欲しい条件に合致するようにループと変数取得を記述する所がポイントでした。

open-api-yaml-to-csv.py
import yaml
import csv

# yamlファイルのコンテンツを、辞書型の変数に格納
with open("oidc-swagger.yaml", "r") as yf:
    data = yaml.safe_load(yf)

# 辞書内から、必要な情報を抽出し、配列として格納
api_list_array = []
i = 0
api_list_array.append(["#", "operationId", "METHOD", "PATH"])
for path in data['paths'].keys():
    if path != "/swagger":
        for verb in data['paths'][path].keys():
            # if 'operationId' in data['paths'][path][verb]:
            name = data['paths'][path][verb]['operationId']
            i = i+1
            # print(i,name, verb, path)
            api_list_array.append([i, name, verb, path])

# 配列をCSVとして保存
with open('list.csv', 'w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerows(api_list_array)

以上、初投稿でした。環境構築部分は苦労したので、もう少し書き足そうと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0