48
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

今更Swagger Spec + ReDoc + Firebase HostingでAPI仕様ページを作ったら劇的に捗った件について

Last updated at Posted at 2019-02-15

はじめに

REST APIを開発する際に、開発メンバとAPIの仕様に関して
恥ずかしながらこんな感じで共有していました。
スクリーンショット 2019-02-15 14.54.01.png

さすがにダルすぎる....と思い今更ですが

  • Swagger Spec
  • ReDoc
  • Firebase Hosting

を使って、API仕様をWebブラウザで開発メンバに共有するようにしたので
そのやり方について書きます。

TL;DR

  • (当然だが)APIドキュメントを作ると捗るので、ちゃんと書こう
    • HTMLをホスティングして公開すると、常に全員が同じ仕様を見ることができるので良い。
      • Excelとかで仕様書渡しちゃうと、いろんなバージョンが各人のPCに出回るので...
  • ReDocは導入が超簡単で、ページもおしゃれなのでオススメ
  • Firebase Hostingを使ってできるだけ労力をかけずに公開すると捗る
    • 閲覧可能な接続元IPアドレス制限やベーシック認証などをかけましょう
  • swagger.yamlの更新が少しダルい

急いでいる方は直接手順をご覧ください。
手順

各ツールの簡単な紹介

Swagger Spec

swagger.png
Swagger Spec はRESTful APIを構築するためのオープンソースのフレームワーク「Swagger」の書式で記述した仕様書です。JSONもしくはYAML形式で記述します。

以下のようなAPI仕様を書くことで、以下のようなページの生成にも使えます。
swaggereditor.png

詳しくは以下を参照
Swaggerの概要をまとめてみた。

ReDoc

redoc-logo.png API仕様を書いたswagger.yaml, swagger.jsonを読み込みHTMLページを生成する APIドキュメンテーションツールです。

Swagger UIでもHTMLは生成できますが

  • 見た目がおしゃれ
  • 多少のカスタマイズが可能

ということで、今回はReDocを採用しました。

HTML に redoc.min.js と swagger.yaml(or swagger.json) を読み込ませるだけ以下のようなページを生成できます。

スクリーンショット 2019-02-15 15.14.47.png

今風なデザインでヌルヌルと動きます。
nested-demo.gif
code-samples-demo.gif

ReDoc GitHub ページ
https://github.com/Rebilly/ReDoc

参考
Swagger Specから静的なHTMLを作るHTMLジェネレータを色々ためしてみた
ReDoc - Angular な静的 Webページを生成できる REST API ドキュメンテーションツール

Firebase Hosting

firebase-hosting.png Firebase Hostingは、Google が提供しているモバイルおよび Web アプリケーションのバックエンドサービス 「Firebase」の静的コンテンツホスティング機能です。 無料で利用でき、デフォルトでHTTPS対応されています。

手順

1. Firebase Hosting用プロジェクトの作成

Firebase Hostingに公開するプロジェクトを作成します。
今回はこのプロジェクト内でAPIドキュメントページを作成します。

手順の詳細は以下が参考になります。
Firebase Hosting でWebサイトを公開する方法

2. Swagger Specを書く

開発しているREST APIの仕様をSwagger Specに書きます。
Swagger Editor
を使うのがおすすめです。

以下、サンプル。

swagger.yaml
swagger: '2.0'

info:
  version: "1.0.0"
  title: sample swagger spec

paths:
  /posts/{id}:
    get:
      description: |
        description
        説明文

      parameters:
        -
          name: id
          in: path
          description: Id of array
          required: true
          type: number
          format: double

      responses:
        200:
          description: Successful responses
          schema:
            title: ArrayOfPosts
            type: array
            items:
              title: Posts
              type: object
              properties:
                name:
                  type: string
                title:
                  type: string
                content:
                  type: string

3. ReDocでAPIドキュメントページを生成する

ReDocを使って、swagger.yaml(or swagger.json)を元にAPIドキュメントページを生成します。

3-1. ReDocのインストール(CDNを利用する場合は不要)

yarnを使ってインストール
yarn add redoc
npmを使ってインストール
npm install redoc --save

3-2. redoc モジュールをHTMLから読み込む

Firebase Hostingに公開するAPIドキュメントページ(index.html)に以下を追加します。

CDN経由で読み込む場合

<script src="https://cdn.jsdelivr.net/npm/redoc/bundles/redoc.standalone.js"> </script>

3-1.でインストールしたnode_modulesを読み込む場合

<script src="./node_modules/redoc/bundles/redoc.standalone.js"> </script>

index.htmlの全体像は以下になります。

index.html
<!DOCTYPE html>
<html>
  <head>
    <title>ReDoc - sample API</title>
    <link rel="icon" href="./favicon.ico">
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1">
  </head>
  <body>
    <redoc spec-url="./spec/swagger.yaml"></redoc>
    <script src="./node_modules/redoc/bundles/redoc.standalone.js"></script>
  </body>
</html>

※上記以外に、favicon.icoを設定しています。

ディレクトリーツリーは以下。
directory-tree.png

4. Firebase Hostingに公開する

deployコマンドで公開します。

firebase deploy

成功するとURLが払い出されます。
アクセスすると、無事APIドキュメントがFirebase Hosting上で公開されていることが確認できます。
sample-api-doc.png

このまま放置するとインターネット上に公開されているので
URLを知っていると誰でもアクセスできてしまいます。

これが困る場合は

などの対策を取ると良いです。

まとめ

Swagger Spec + ReDoc + Firebase Hostingで簡単にAPIドキュメントページが公開できました。
APIドキュメントページを作ったことにより、API仕様に関するやり取りを
「このURL見て」
で大体済ませることができるので非常に楽になりましたw

ただ、Swagger Specの定義の更新がちょっとだるいのである程度自動化する術とかないか探しています。

余談

APIドキュメントページを公開するとメンバから喜ばれましたw
result.png


最後までお読み頂きありがとうございました!
Twitterでも技術ネタやデザインについてなどもツイートしているので、よかったらフォローしてもらえると嬉しいです:stuck_out_tongue_closed_eyes:
→ Twitter@jonghyo_

48
42
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
48
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?