こんなに使える!今どきのapiドキュメンテーションツール

52
こんなに使える!今どきの APIドキュメンテーションツール 2016/10/25 権藤 尚樹

Upload: dcubeio

Post on 21-Apr-2017

6.472 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: こんなに使える!今どきのAPIドキュメンテーションツール

こんなに使える!今どきのAPIドキュメンテーションツール

2016/10/25 権藤 尚樹

Page 2: こんなに使える!今どきのAPIドキュメンテーションツール

自己紹介

● 権藤 尚樹

● ビズリーチ

● スタンバイ事業部

● バックエンドエンジニア

● Scala書いてます

● 一人旅が好きです

Page 3: こんなに使える!今どきのAPIドキュメンテーションツール

日本最大級の求人検索エンジン「スタンバイ」

Page 4: こんなに使える!今どきのAPIドキュメンテーションツール

いろいろ検索してみてください

Page 5: こんなに使える!今どきのAPIドキュメンテーションツール

スタンバイの開発はマイクロサービス化

● 複数のAPIに分けている

● チームも細かく分かれている

● 分業化も進めている

Page 6: こんなに使える!今どきのAPIドキュメンテーションツール

APIドキュメント書いてますか?

Page 7: こんなに使える!今どきのAPIドキュメンテーションツール

APIドキュメントは書くことが多い

● Host● Path● HTTPメソッド(GET, POST, PUT, DELETE, ...)● Request Header, Body● Query Parameter● Response Status Code● Respose Header, Body● Authrozation, Authentication● etc...

Page 8: こんなに使える!今どきのAPIドキュメンテーションツール

APIドキュメントは読みやすく

● 作るのはサーバーサイドエンジニア

● 読む人は様々○ フロントエンドエンジニア

○ ネイティブアプリエンジニア

○ マイクロサービスの場合、他チームのサーバーサイドエンジニア

● フォーマットを統一する必要がある○ 表形式では限界がある

Page 9: こんなに使える!今どきのAPIドキュメンテーションツール

JSON Schemaについて少し

Page 10: こんなに使える!今どきのAPIドキュメンテーションツール

JSON Schemaとは

● JSONの型をJSONで定義する

● 細かい定義が可能

● ライブラリやバリデーションが充実している

Page 11: こんなに使える!今どきのAPIドキュメンテーションツール

JSON SchemaではAPIドキュメントは書きづらい

● あくまでJSONを定義するためのフォーマット

● APIドキュメントを書くために作られたものではない

● (個人的には)そもそもJSONを書きたくない!

● アプリケーションの開発時には使える○ 覚えることは少ない

○ 各種バリデーション

○ モデルのGenerate

Page 12: こんなに使える!今どきのAPIドキュメンテーションツール

APIドキュメンテーションツール

Page 13: こんなに使える!今どきのAPIドキュメンテーションツール

APIドキュメンテーションツール

1. Swagger1.1. Swagger Specification1.2. Swagger UI1.3. Swagger Editor1.4. Swagger Core

2. API Blueprint2.1. Specification2.2. aglio

Page 14: こんなに使える!今どきのAPIドキュメンテーションツール

Swagger● Swagger Specという定義ファイルで管理

● 歴史は古く、コミュニティ規模は大きい

● Open API Initiative というREST APIの標準化を推進する団体ができた○ ツールとしてswaggerを使っている

Page 15: こんなに使える!今どきのAPIドキュメンテーションツール

Swagger Specification● JSON or YAMLで定義

○ ver2.0からYAMLに対応

● schemaの部分は、JSON Schema Draft4をベースとしている

● GFM(Github Flavored Markdown)が使える

● モデルはdefinitionで分割可能

● 詳細はこちら

○ http://swagger.io/specification/

Page 16: こんなに使える!今どきのAPIドキュメンテーションツール

Swagger Specification● 全体の情報

○ swaggerのバージョン

○ アプリケーションの情報

○ ホスト

○ パス

○ プロトコル

○ Mime Type

Page 17: こんなに使える!今どきのAPIドキュメンテーションツール

Swagger Specification(paths)● endpointごとの情報

○ HTTPメソッド

○ 説明

○ リクエストパラメータ

○ レスポンス

Page 18: こんなに使える!今どきのAPIドキュメンテーションツール

Swagger Specification(definitions)● モデルの情報

○ メンバ名

○ 型

○ 説明

○ 必須かどうか

● JSON Schemaとほぼ同じ

● $ref属性で分割可能

Page 19: こんなに使える!今どきのAPIドキュメンテーションツール

Swagger UI● Specをもとにドキュメント化

● デモサイト: http://petstore.swagger.io/● インタラクティブなドキュメントが特徴

● サーバーを立てれば、ブラウザ上でリクエスト

を送ったりできる

● 実態は静的HTML + jQuery○ カスタマイズもできる

Page 20: こんなに使える!今どきのAPIドキュメンテーションツール

Swagger Core● プロダクトコードから自動生成する

● 基本的にはコメントやアノテーションをつける

タイプが多い

● javadocのようなイメージ

● 様々な言語のフレームワークで対応

Page 21: こんなに使える!今どきのAPIドキュメンテーションツール

Swagger Editor● specをブラウザ上で編集できるツール

● デモサイト: http://editor.swagger.io● 実際にリクエストを送りながら編集ができる

● ローカルにインストールもできるが、 Web上のもので事足りる

Page 22: こんなに使える!今どきのAPIドキュメンテーションツール

Swagger Codegen● 定義ファイルからソースコードを生成

○ モックサーバーのソースコードを作れる

○ Client側のモデルのソースコードを作れる

● 様々な言語のフレームワークに対応

● Swagger Editor画面の左上にもついてる

Page 23: こんなに使える!今どきのAPIドキュメンテーションツール

Swaggerの良い点

● コードアノテーションで生成できる○ ソースコードとドキュメントの乖離がない!

○ 他のドキュメンテーションツールにない強み

○ テスト環境を用意する必要もない

● Swagger UIのインタラクティブドキュメントは便利

● 高機能○ swaggerの各種ツールが充実している

● 各種言語・Webフレームワークの対応が手厚い

● 外部ツールも対応している○ Postman○ Amazon API Gateway

Page 24: こんなに使える!今どきのAPIドキュメンテーションツール

Swaggerのイマイチと感じる点

● Swagger UIが少し使いづらい○ インタラクティブに動かすには Webサーバーが必要

○ カスタマイズが必要なケースもある

○ API Blueprintのaglioと比べると見た目が ...

● アノテーションは賛否両論○ モデルのClassがきちんと定義されている必要がある

○ コードがアノテーションだらけになるため、見づらくなる

○ 各フレームワークのバージョンと対応状況に注意

Page 25: こんなに使える!今どきのAPIドキュメンテーションツール

Play2(scala)のSwagger Core● 別プロジェクトで動いている

○ https://github.com/swagger-api/swagger-play

● 公式のものは残念ながらplay2.4まで対応、2.5は対応中

● (個人的には)ちょっと触った限り、少し面倒なところがある

○ Enum等のカスタムクラスの変換が難しそう

○ 別途annotationを加えればいけるが、記述量は多くなる

Page 26: こんなに使える!今どきのAPIドキュメンテーションツール

API Blueprint

Page 27: こんなに使える!今どきのAPIドキュメンテーションツール

● Markdownを使って定義を書く○ 拡張子は.apib

● Markdownそのままでも読みやすい○ aglioを使うとさらに見やすくなる

● 専用のエディターはないが、Atomエディタのプラグインあり○ https://atom.io/packages/api-blueprint-preview

API Blueprint

Page 28: こんなに使える!今どきのAPIドキュメンテーションツール

Specification● 基本情報

○ タイトル

○ ホスト

● グループ

○ swaggerでいうtags● 各endpointの処理

○ HTTPメソッド

○ endpoint○ リクエスト

○ パラメータ

○ レスポンス

Page 29: こんなに使える!今どきのAPIドキュメンテーションツール

Specification● Data Structuresでモデルを定義

○ swaggerでいうdefinitions● メンバの情報は一行で記述する

○ メンバ名

○ サンプル値

○ 型

○ 説明

Page 30: こんなに使える!今どきのAPIドキュメンテーションツール

aglio● API BlueprintをHTMLドキュメントに変換

● とても見やすい

● JSON Schemaを出力してくれる

Page 31: こんなに使える!今どきのAPIドキュメンテーションツール

こんな感じに出力してくれます

Page 32: こんなに使える!今どきのAPIドキュメンテーションツール

JSON Schemaも出してくれる

Page 33: こんなに使える!今どきのAPIドキュメンテーションツール

API Blueprintの良い点

● Markdownだけで直感的に書ける

● 自由に書きやすい

● シンプルにまとまっており、使いやすい

● aglioのHTMLドキュメントは素晴らしい

Page 34: こんなに使える!今どきのAPIドキュメンテーションツール

API Blueprintのイマイチだと思う点

● Swaggerほど高機能ではない○ コードアノテーションのような機能はない

● 細かいスキーマの定義ができない○ JSON Schemaでいうところのmaxlength, minlength, patternなど

○ コメントとして書くことである程度対応はできる

Page 35: こんなに使える!今どきのAPIドキュメンテーションツール

ドキュメントが正しいか確認する

Page 36: こんなに使える!今どきのAPIドキュメンテーションツール

Specファイルをもとにテストができる

● ドキュメントどおりの実装になっているか確認できる

● レビュー時に誤りに気づきやすい

● レビューアの負担が減る

Page 37: こんなに使える!今どきのAPIドキュメンテーションツール

1. Swagger Test Template2. Dredd

テストツール

Page 38: こんなに使える!今どきのAPIドキュメンテーションツール

Swagger Test Template● SpecファイルからJavascriptのテストコードを

自動生成して実行

● Swagger Nodeの機能に組み込まれている

Page 39: こんなに使える!今どきのAPIドキュメンテーションツール

Swagger Nodeについて少し

● https://github.com/swagger-api/swagger-node● Node.jsだけで一通り使えるようにしたもの

● 基本的なライフサイクル

○ specを書く

○ APIを実装する

○ テストコードを自動生成

○ テスト実行

● API Design First的な開発に向いている

Page 40: こんなに使える!今どきのAPIドキュメンテーションツール

Swagger Test Templateを使ってみて

● 導入はすぐにできた○ https://github.com/swagger-api/swagger-node○ http://apigee.com/about/blog/developer/swagger-test-templates-test-your-apis

● Specが増えるに連れ、運用面で障害になった

● リクエストパラメータを指定できない

● 自動生成とはいえ、テストコードを毎回作らないといけない○ 共通の定義が変わると全部作り直す必要がある

Page 41: こんなに使える!今どきのAPIドキュメンテーションツール

Dredd● apiary.ioが提供しているテストフレームワーク

● API Blueprintとswaggerのspecファイルを実行可能

● テストの設定ファイルをyamlで管理

● 各種CIツールにも対応

Page 42: こんなに使える!今どきのAPIドキュメンテーションツール

Dreddの良いところ

● テスト結果がわかりやすい○ コンソール上の情報でも十分わかる

○ 特にエラー時に役に立つ

○ ログレベルも変更可能

● リクエストパラメータを指定可能○ sample値を指定する必要はあるが、それだけで済む

● テストするendpointを指定可能○ 設定yamlのonlyに配列で指定可能

● hook処理を追加すれば細かい処理が可能

Page 43: こんなに使える!今どきのAPIドキュメンテーションツール

hookとは

● テストに前処理・後処理を加えることができる○ beforeAll, afterAll○ beforeEach, afterEach

● 特定のendpointに対してのみ追加することできる○ before, After

● 用途は様々○ DBのレコードの初期化・掃除

○ 認証・認可

○ 個別のテスト

● いくつかの言語で書ける○ Go, Node.js, Perl, PHP, Python, Ruby

Page 44: こんなに使える!今どきのAPIドキュメンテーションツール

まとめ

Page 45: こんなに使える!今どきのAPIドキュメンテーションツール

● 学習コストはどちらも同じくらい○ yamlを書くかmarkdownを書くかアノテーションを書くかの違いぐらい

● ドキュメント重視ならAPI Blueprintがおすすめ

● 定義を細かく書くならSwagger SpecをYAMLで● 厳格に管理するならSwagger Coreのアノテーションで

ドキュメンテーション編

Page 46: こんなに使える!今どきのAPIドキュメンテーションツール

テスト編

● テストを実行するならDreddがおすすめ○ さらに言えば、Dreddを採用するつもりならAPI Blueprintのほうが良い

● テストを実行しないという選択肢もある○ レビューや運用でカバーする

Page 47: こんなに使える!今どきのAPIドキュメンテーションツール

プロダクトやチームにあった方法を用いる

● 導入の際は開発メンバーでよく話し合うこと○ やること、やらないことを決める

● 開発の障害にならないように進めること○ テスト環境を揃えるのは思ったよりも大変

○ ドキュメントだけで十分ならば、レビューをしっかりやるのでも良いと思う

● 途中でツールを変えるのは大変○ 相互変換するライブラリもあるが、完璧ではない

○ 両方覚えるのは大変

● テストを過信しないこと○ オプショナルの項目が増えてもわからないこともある。レビューはしっかりと

Page 48: こんなに使える!今どきのAPIドキュメンテーションツール

参考にしたサイト

● APIドキュメントを支える技術

○ http://qiita.com/taizo/items/5a969ace57394a2d5b4a

● API Meetup Tokyo #15 〜OpenAPI Specification (Swagger)特集〜の勉強会に

参加してきた

○ http://tsuyoshi-nakamura.hatenablog.com/entry/2016/07/25/114347

● API Blueprintとその周辺ツール

○ http://qiita.com/sheepland/items/b4a0d03941f2e3cd8eaa

Page 49: こんなに使える!今どきのAPIドキュメンテーションツール

サンプルコード置いてます

● https://github.com/n-gondo123/api-doc-example

Page 50: こんなに使える!今どきのAPIドキュメンテーションツール

おまけ

Page 51: こんなに使える!今どきのAPIドキュメンテーションツール

RAMLも面白そう

● 割と新しめのAPIドキュメンテーションツール

● yamlで記述する

● swaggerと似ている

● 「swagger vs api blueprint vs raml」で検索すると面白い記事が見つかる

Page 52: こんなに使える!今どきのAPIドキュメンテーションツール

ご清聴ありがとうございました。