はじめに
API管理とAPI作成から公開までのチームが分かれている・権限をそれぞれ分けたいなどといった背景を元に、ローカル環境で作成したAPI製品を、開発者ツールキット経由でカタログに対してAPI製品を公開することがあります。開発者ツールキットについてはこちらにも書いています。
このときAPI Manager上のAPI製品ドラフト一覧には開発者ツールキットからステージングしたAPIがリストされません。が、その開発者ツールキットが入ったローカル環境が壊れたーとか、開発者メンバーが消えたーとか、、そんな状況で(APIとして公開はされてるけど)APIの元ネタであるyamlファイル自体が消えてしまった、なんて状況も実はありえます(そもそもyamlをgitなどで管理すべきというのは勿論なのですが、それをしてないところもあるのです・・・)。そんなときにも開発者ツールキットを使うとAPI Manager上に公開されているAPI製品を再度ダウンロードすることができます。プロバイダ組織所有者権限ユーザーが必要です。
今回はAPI情報を取得・ダウンロードする前にCLIでAPI Connectにログインする必要があるのですが、そこでつまづいたので備忘録です。
前提条件
- IBM CloudでAPI Connectのインスタンス作成済み
- apiconnectコマンド(開発者ツールキット)がローカル環境に導入済み
- 前提条件とか導入方法の参考はこちら
- IBM CloudのIAMでAPI Keyを作成済み
- 私の環境の場合
- Node.js: v10.17.0
- apiconnect: v5.0.8.7 (apiconnect: v5.0.25)
手順
4. apicコマンドを実行
コマンドラインでログインする前に、IBM Cloud上にあるAPI Connectの組織やカタログ情報をローカルにセットします。上記のカタログのリンクの文字列をそのまま実行できます。
apic config:set catalog=apic-catalog://us.apiconnect.ibmcloud.com/orgs/自分の組織名/catalogs/自分のカタログ名
上記の構成設定が終わったら、IAMのAPIKEYを使ってログインできます。試してないですが、シングルサインオン・オプション(--sso)など他のログイン方法でも可能と思います。
apic login -k APIKEY
us.apiconnect.ibmcloud.com に正常にログインしました
API情報が以下のように取得できます。API Connectのサーバー名や組織やカタログ情報はすでにローカルに構成されているので、オプションには不要でした。
apic apis:get API名:バージョン
例:
apic apis:get backend:1.0.0
名前: backend
バージョン: 1.0.0
タイトル: Backend
基本パス: /backend
状況: オンライン
実動エンドポイント: "https://api.us-south.apiconnect.appdomain.cloud/自分の組織名/カタログ名/backend"
開発エンドポイント: "https://api.us-south.apiconnect.appdomain.cloud/自分の組織名/カタログ名/backend"
製品: 自分の製品名:1.0.0
カタログ: カタログ名
組織: 自分の組織名
APIをダウンロードするには以下のコマンドを実行すると、apicコマンドを実行したディレクトリにyamlファイルがダウンロードされています。
apic apis:pull API名:バージョン
例:
apic apis:pull backend:1.0.0
backend:1.0.0 API 定義が 自分の組織名:カタログ名 [backend_1.0.0.yaml] からプルされました
終わりに
上記のように開発者ツールキットのコマンドを使うと、API Connect上に公開されているAPI情報の取得、yamlファイルのダウンロードができることがわかりました。今回はクラウド版nAPI Connectで実行していますが、オンプレでも同様に可能です。オンプレはAPIKEYによるログインではなく、従来のユーザー・パスワードで認証することになると思われます。
またAPI Connect v2018だと方法が変わる可能性があるので、今回の検証はV5ベースのクラウド版が対象であることにご留意ください。