Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
dcubeio
PDF, PPTX
11,092 views
Apiドキュメンテーションツールを使いこなす【api blueprint編】
https://d-cube.connpass.com/event/60587/ で発表した内容です
Technology
◦
Read more
5
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 79
2
/ 79
Most read
3
/ 79
4
/ 79
5
/ 79
6
/ 79
Most read
7
/ 79
8
/ 79
9
/ 79
10
/ 79
11
/ 79
12
/ 79
13
/ 79
14
/ 79
15
/ 79
16
/ 79
17
/ 79
18
/ 79
19
/ 79
20
/ 79
21
/ 79
22
/ 79
23
/ 79
24
/ 79
25
/ 79
26
/ 79
27
/ 79
28
/ 79
29
/ 79
30
/ 79
31
/ 79
32
/ 79
33
/ 79
34
/ 79
35
/ 79
36
/ 79
37
/ 79
38
/ 79
39
/ 79
40
/ 79
41
/ 79
42
/ 79
43
/ 79
44
/ 79
45
/ 79
46
/ 79
47
/ 79
48
/ 79
49
/ 79
50
/ 79
51
/ 79
52
/ 79
53
/ 79
54
/ 79
55
/ 79
56
/ 79
57
/ 79
58
/ 79
59
/ 79
60
/ 79
61
/ 79
62
/ 79
63
/ 79
64
/ 79
65
/ 79
66
/ 79
67
/ 79
68
/ 79
69
/ 79
70
/ 79
71
/ 79
72
/ 79
73
/ 79
74
/ 79
75
/ 79
76
/ 79
77
/ 79
78
/ 79
79
/ 79
More Related Content
PDF
こんなに使える!今どきのAPIドキュメンテーションツール
by
dcubeio
PDF
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
by
pospome
PDF
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
by
Recruit Lifestyle Co., Ltd.
PDF
Apache Arrow - データ処理ツールの次世代プラットフォーム
by
Kouhei Sutou
PDF
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
by
LINE Corporation
PDF
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
PDF
40歳過ぎてもエンジニアでいるためにやっていること
by
onozaty
こんなに使える!今どきのAPIドキュメンテーションツール
by
dcubeio
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
by
pospome
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
by
Recruit Lifestyle Co., Ltd.
Apache Arrow - データ処理ツールの次世代プラットフォーム
by
Kouhei Sutou
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
by
LINE Corporation
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
40歳過ぎてもエンジニアでいるためにやっていること
by
onozaty
What's hot
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
PDF
リッチなドメインモデル 名前探し
by
増田 亨
PDF
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
by
shinjiigarashi
PDF
PlaySQLAlchemy: SQLAlchemy入門
by
泰 増田
PDF
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
by
Rakuten Group, Inc.
PPTX
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
SpringBootTest入門
by
Yahoo!デベロッパーネットワーク
PDF
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
PPTX
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
by
Tadahiro Ishisaka
PDF
ChatGPTは思ったほど賢くない
by
Carnot Inc.
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
by
Miki Shimogai
PDF
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
by
Mikiya Okuno
PPTX
分散システムについて語らせてくれ
by
Kumazaki Hiroki
PDF
Where狙いのキー、order by狙いのキー
by
yoku0825
PPTX
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
PDF
目grep入門 +解説
by
murachue
PDF
怖くないSpring Bootのオートコンフィグレーション
by
土岐 孝平
PDF
Goの時刻に関するテスト
by
Kentaro Kawano
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
リッチなドメインモデル 名前探し
by
増田 亨
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
by
shinjiigarashi
PlaySQLAlchemy: SQLAlchemy入門
by
泰 増田
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
by
Rakuten Group, Inc.
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
SpringBootTest入門
by
Yahoo!デベロッパーネットワーク
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
by
Tadahiro Ishisaka
ChatGPTは思ったほど賢くない
by
Carnot Inc.
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
by
Miki Shimogai
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
by
Mikiya Okuno
分散システムについて語らせてくれ
by
Kumazaki Hiroki
Where狙いのキー、order by狙いのキー
by
yoku0825
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
目grep入門 +解説
by
murachue
怖くないSpring Bootのオートコンフィグレーション
by
土岐 孝平
Goの時刻に関するテスト
by
Kentaro Kawano
マイクロにしすぎた結果がこれだよ!
by
mosa siru
Similar to Apiドキュメンテーションツールを使いこなす【api blueprint編】
PDF
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
by
Daichi Koike
PDF
Swaggerでのapi開発よもやま話
by
KEISUKE KONISHI
PDF
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
by
Kazuya Sugimoto
PPTX
Swagger jjug ccc 2018 spring
by
kounan13
PDF
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
by
Toru Kawamura
PDF
多分モダンなWebアプリ開発
by
tak-nakamura
PDF
JSON Schema で Web API のスキマを埋めよう
by
VOYAGE GROUP
PDF
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
by
Tomoki Oyamatsu
PDF
Pyramid入門
by
Atsushi Odagiri
PDF
AWS SDK for Haskell開発
by
Nomura Yusuke
PDF
インターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPC
by
Kent Ohashi
PDF
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
by
Kazuhiro Sera
PPTX
APIドキュメントの話 #sphinxjp
by
Takeshi Komiya
PDF
Swaggerのさわりだけ
by
Masakazu Muraoka
PPTX
HTML5&API総まくり
by
Shumpei Shiraishi
PDF
SwaggerとAPIのデザイン
by
Kazuhiro Hara
PDF
Mongo db + xsd:xml(20130219)
by
Michael Nguyen
PDF
Swaggerを利用した新規サービス開発
by
recotech
PPTX
Create entity from swagger in drupal8
by
Kyotaro Kon
PPTX
Web API デザインの鉄則 第2章
by
Taichi Watanabe
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
by
Daichi Koike
Swaggerでのapi開発よもやま話
by
KEISUKE KONISHI
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
by
Kazuya Sugimoto
Swagger jjug ccc 2018 spring
by
kounan13
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
by
Toru Kawamura
多分モダンなWebアプリ開発
by
tak-nakamura
JSON Schema で Web API のスキマを埋めよう
by
VOYAGE GROUP
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
by
Tomoki Oyamatsu
Pyramid入門
by
Atsushi Odagiri
AWS SDK for Haskell開発
by
Nomura Yusuke
インターフェース定義言語から学ぶモダンなWeb API方式: REST, GraphQL, gRPC
by
Kent Ohashi
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
by
Kazuhiro Sera
APIドキュメントの話 #sphinxjp
by
Takeshi Komiya
Swaggerのさわりだけ
by
Masakazu Muraoka
HTML5&API総まくり
by
Shumpei Shiraishi
SwaggerとAPIのデザイン
by
Kazuhiro Hara
Mongo db + xsd:xml(20130219)
by
Michael Nguyen
Swaggerを利用した新規サービス開発
by
recotech
Create entity from swagger in drupal8
by
Kyotaro Kon
Web API デザインの鉄則 第2章
by
Taichi Watanabe
More from dcubeio
PPTX
Kinesis Firehoseを使ってみた
by
dcubeio
PDF
すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー!
by
dcubeio
PPTX
Play2 scalaを2年やって学んだこと
by
dcubeio
PDF
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
by
dcubeio
PDF
Go初心者がGoでコマンドラインツールの作成に挑戦した話
by
dcubeio
PDF
DynamoDBを導入した話
by
dcubeio
PDF
【freee】プロダクトマネージャーの仕事と魅力
by
dcubeio
PDF
ビットコインとブロックチェーンを初めからていねいに(超基礎編)
by
dcubeio
PDF
BizReach x Marketo連携
by
dcubeio
PPTX
春の脆弱性祭り 2017/06/13
by
dcubeio
PDF
Python × Herokuで作る 雑談slack bot
by
dcubeio
PPT
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
by
dcubeio
PDF
Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
by
dcubeio
PDF
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
by
dcubeio
PPTX
HR Tech x 機械学習 導入事例紹介
by
dcubeio
PDF
【ビズリーチ】プロダクトマネージャーの仕事と魅力
by
dcubeio
PDF
機械学習を支えるX86 64の拡張命令セットを読む会 20170212
by
dcubeio
PPTX
Scalaマクロ入門 bizr20170217
by
dcubeio
PDF
20171206 d3 health_tech発表資料
by
dcubeio
PDF
AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」
by
dcubeio
Kinesis Firehoseを使ってみた
by
dcubeio
すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー!
by
dcubeio
Play2 scalaを2年やって学んだこと
by
dcubeio
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
by
dcubeio
Go初心者がGoでコマンドラインツールの作成に挑戦した話
by
dcubeio
DynamoDBを導入した話
by
dcubeio
【freee】プロダクトマネージャーの仕事と魅力
by
dcubeio
ビットコインとブロックチェーンを初めからていねいに(超基礎編)
by
dcubeio
BizReach x Marketo連携
by
dcubeio
春の脆弱性祭り 2017/06/13
by
dcubeio
Python × Herokuで作る 雑談slack bot
by
dcubeio
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
by
dcubeio
Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
by
dcubeio
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
by
dcubeio
HR Tech x 機械学習 導入事例紹介
by
dcubeio
【ビズリーチ】プロダクトマネージャーの仕事と魅力
by
dcubeio
機械学習を支えるX86 64の拡張命令セットを読む会 20170212
by
dcubeio
Scalaマクロ入門 bizr20170217
by
dcubeio
20171206 d3 health_tech発表資料
by
dcubeio
AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」
by
dcubeio
Recently uploaded
PDF
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
by
TomohiroKusu
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
by
PC Cluster Consortium
PDF
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
by
Sugiyama Yugo
PDF
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
by
たけおか しょうぞう
PPTX
DrupalCon Nara 2025の記録 .
by
iPride Co., Ltd.
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
by
TomohiroKusu
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
by
PC Cluster Consortium
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
by
Sugiyama Yugo
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
by
たけおか しょうぞう
DrupalCon Nara 2025の記録 .
by
iPride Co., Ltd.
Apiドキュメンテーションツールを使いこなす【api blueprint編】
1.
APIドキュメンテーションツールを使い こなす【Api Blueprint編】
2.
自己紹介 権藤尚樹 2015年5月に株式会社ビズリーチに入社 求人検索エンジン「スタンバイ」 (https://jp.stanby.com) のエンジニ アやってます 普段の業務ではScalaを書いてます Webアプリケーションエンジニア歴は3年半ぐらい 将棋と一人旅が趣味
3.
前回の発表 こんなに便利!今どきのAPIドキュメンテーションツール(https://d- cube.connpass.com/event/43057/) SwaggerとApi Blueprintの比較に重きを置いた内容でした
4.
目次 1. APIドキュメントの概要 2. Api
Blueprintについて 3. Api Blueprintの記法 4. Api Blueprintを支えるツール 5. プロジェクトに導入した話
5.
本日のゴール Api Blueprintについて知ってもらう Api Blueprintでいい感じのAPIドキュメントを作れるようになる Api
Blueprintを用いて開発を(なるべく)楽にできるようになる
6.
サンプルコード https://github.com/n-gondo123/api-blueprint-example スライドで紹介するサンプルの内容と若干違うところもあります が、ご了承ください
7.
1. APIドキュメントの概要
8.
APIドキュメントをつくる目的 APIサーバーに求められるもの Request/Response REST API 誰がどういう目的で使うのか 利用する側: どのように使えば良いのか 提供する側:
提供したいものが正しいかどうか
9.
APIドキュメントに書くこと HTTPリクエスト・レスポンス URI (host, path,
query, ...) Http Method (GET, POST, PUT, DELETE, ...) Header (Content-Type, Accept, ...) Body (json, xml, ...) schema Authorization, Authentication
10.
APIドキュメントに書くこと APIの概要・注意点 APIが返すステータスコードの補足 200系、400系、500系 API固有の仕様 コード値の意味 Custom Validation
11.
2. Api Blueprint
12.
Api Blueprintとは 公式(https://apiblueprint.org/) 「A powerful
high-level API description language for web APIs」 APIドキュメントの記述に特化した言語 拡張子は.apibだが、.mdのほうが便利なことが多い syntax highlightingが効く Markdown previewが効く(特にgithub) .mdで困ることは殆どないので、個人的にはこちらを推奨
13.
Api Blueprint vs
Swagger Github (https://github.com/apiaryio/api-blueprint) Star数は5,539 (資料作成時) Swaggerツール群(https://github.com/swagger-api) と比べると Swagger Spec cationよりは覚えることは少ないし、導入の敷居も 低い(個人的な感想) Swaggerについての話はまたの機会に
14.
3. Api Blueprintの記法
15.
Api Blueprint Speci
cation ドキュメント (https://apiblueprint.org/documentation/speci cation.html) 幾つかのSectionで構成されている 一部拡張Markdown書式があるが、プレーンなMarkdownとしても十 分読める MSON(後述)の知識がなくても使えるが、基本的にはセットで覚える 必要がある
16.
Section Structure (Header-de
ned) ヘッダータグの深さは特に気にしなくて良いですが、sectionはネスト 関係にあるのでそこだけ意識すると良いです # API共通仕様 <ここに説明を書く> # Group ユーザー <ここに説明を書く> ## ユーザー一覧の取得 [GET /users/] <ここに説明を書く>
17.
Section Structure (List-de
ned) インデントは4スペース推奨 + Request (application/json) <ここに説明を書く> + Body { "message": "Hello World" } + Response 200 (application/json) <ここに説明を書く> + Body { "message": "OK" }
18.
全体的な構造 1. Metadata section 2.
API name & overview section 3. Resource group section 4. Resource section・Action section 5. Parameters section 6. Payload section 6.1. Request section 6.2. Response section 7. Data Structures section
19.
Metadata section Meta情報を記述 FORMAT: 1A HOST:
https://example.com
20.
API name &
overview section APIの概要を記述 # Sample App サンプルアプリです
21.
Resource group section グループの分割単位 Resource
sectionの親section ただし、Resource sectionは必須ではなくテキストだけでも良い 後述のAglioでのレンダリングでは、この単位でグルーピングされ る # Group コード値一覧 ## 性別 |コード値 |名前| |--------|----| |Male |男性| |Female |女性|
22.
Resouce section・Action section アクションを記述 親子関係はResouce
section > Action sectionだが、実際にはどちらか でURI templateを用いてHttp methodとPathを記述する必要があ る。実質、この2つは一体的なものとして捉えるとよい 複数の書き方があるが、書き方は統一した方がよい せめて2種類ぐらいには統一したい Action sectionにはResponse sectionが必須
23.
パターン1 ## ユーザー一覧を取得する [GET
/users{?offset,limit}] <Parameters section> <Response section> ## ユーザーを作成する [POST /users] <Request section> <Response section>
24.
パターン2 ## ユーザーの更新・削除 [/users/{userId}] <Parameters
section> ### ユーザーを更新する [PUT] <Request section> <Response section> ## ユーザーを削除する [DELETE] <Response section>
25.
URI template URIを記述、パラメータはRFC6570準拠 path /users/{userId} query /users{?offset,limit} fragment /users{#var}
26.
Parameters section MSONで指定 path + Parameters +
userId: 1 (number, required) - ユーザーID query + Parameters + offset: 0 (number, optional) - オフセット + limit: 10 (number, optional) - リミット
27.
Payload section HTTPのリクエストやレスポンスについて記述 以下のsectionを含む Header section Body
section Schema section Attributes section Request・Response sectionはこれを継承している Media Typeを指定できる
28.
Request section Requestに関する情報を記述 + Request
(application/json) + Attributes + firstName: Naoki (string, required) - 名 + lastName: Gondo (string, required) - 姓
29.
Response section Requestに関する情報を記述 Media Typeやステータスコードごとに分けられる +
Response 200 (application/json) + Attributes (User) + Response 400
30.
Body・Schema・Attributes sectionの使い分け Attributes sectionにMSONで書くのがオススメ 後述のAglioを使用する際も、Attributes
sectionのほうが便利 Schemaの定義は後でいい、という場合はBody sectionだけというの もあり 後述のDrakovでMockサーバーを使うときなど Schema sectionを用いることはあまりないと思う 強いていえば、MSONで定義できないJSON Schema( maxLength な ど)を使いたい場合ぐらい Attributes sectionとの相性が悪いので、Body sectionとのセット で使うのを推奨
31.
Multiple Request/Response 複数記述できる RequestのパターンによってResponseが微妙に違うようなケースに 有効 + Request
A + Response 200 (application/xml) + Response 200 (application/json) + Request B + Response 200 + Response 400 + Request C + Request D + Response 200
32.
Data Structures section sectionに名前を定義して参照できる 基本的にはAttributes
sectionで用いるもの(Model)を書く Modelの定義の例 # Data Structures # User (object) - ユーザー + id: 1 (number, required) - ユーザーID + firstName: Naoki (string, required) - 名 + lastName: Gondo (string, required) - 姓 + gender (Gender, required) - 性別 + birthday (object, optional) - 生年月日 + year: 1988 (number, required) - 西暦年 + month: 2 (number, required) - 月 + day: 18 (number, required) - 日
33.
Data Structures section Enumの定義 #
Gender (enum, fixed) - 性別 ## Members + Male - 男性 + Female - 女性
34.
Data Structures section Data
Structuresで定義したものを使う + Response 200 (application/json) + Attributes + total: 3 (number, required) - 全件数 + list (array[User], required, fixed-type) - ユーザー一覧
35.
MSONについて Markdown Syntax Object
Notation (https://apiblueprint.org/documentation/mson/speci cation.html) 型を定義するための記述方法。JSON Schemaをシンプルにしたよう なもの 一般的に使うには、覚えることはそこまで多くない (凝った書きかたをする場合はこの限りではない) JSON Schemaと比べると機能が少ないためシンプル その分、細かなvalidationルールは書けない
36.
Example ユーザー一覧を取得するAPIのレスポンス + Attributes + total:
3 (number, required) - 全件数 + list (array, required, fixed-type) - ユーザー一覧 + (object) + id: 1 (number, required) - ユーザーID + firstName: Naoki (string, required) - 名 + lastName: Gondo (string, required) - 姓 + gender (Gender, required) - 性別 + birthday (object, optional) - 生年月日 + year: 1988 (number, required) - 西暦年 + month: 2 (number, required) - 月 + day: 18 (number, required) - 日
37.
書式 基本的には以下のように書く + プロパティ名: サンプル値
(型属性1, 型属性2) - 説明 プロパティ名は必須 サンプル値・説明は省略可 型属性は複数指定可 型属性は省略可能だが、必ず書くことを推奨 省略時は(string, required) が適用される 階層構造(型属性: object)の場合はインデントでネストさせる
38.
型属性 string number boolean object array enum
39.
その他の属性 required optional nullable
40.
その他の機能 Type Inheritance Mixin Type Generic
Named Type 詳しくはドキュメントで
41.
4. Api Blueprintを支えるツール
42.
Api Blueprintを支えるツールたち 一覧: (https://apiblueprint.org/tools.html) 今回紹介するものは以下の3つ 1.
Renderers (Aglio) 2. Testing (Dredd) 3. Mock serevers (Drakov) このスライドの冒頭に記載しているサンプルコードにもありますの で、実際に手元で動かしてみてください
43.
4.1 Aglio HTMLレンダリングツール(https://github.com/danielgtaylor/aglio) 複数のThemeを提供 ライブリロード機能 ファイル分割
44.
Quick start HTMLへの出力 $ npm
install -g aglio $ aglio -i input.md -o output.html ライブリロード $ aglio -i input.md -s -p 3001 http://localhost:3001 で編集しながら確認 文法がおかしい場合はコンソールにエラーが出る
45.
ファイル分割とコンパイル examples/ ├── base.md ├── endpoints │
└── users.md ├── meta │ └── common.md └── models └── models.md endpoints/users.md にはGroup Sectionを記述 meta/common.md にはMetadata Sectionを記述 models/models.md にはData Structuresを記述
46.
ファイル分割とコンパイル examples/base.mdの内容 FORMAT: 1A # Sample
App <!-- include(meta/common.md) --> <!-- include(endpoints/users.md) --> <!-- include(models/models.md) --> コンパイル $ aglio -i examples/base.md -c -o output.md
47.
Aglioについての所感 Attribute sectionを書けばJSON Schemaをレンダリングしてくれる のが非常に便利 元々のMarkdownもHTMLにしてくれるので、表や内部リンクも使え る ファイルの分割機能が便利 この機能を知るまでは自前のシェルスクリプトで頑張って結合し ていた
48.
Aglioについての所感 Attributes sectionを書くとBody sectionで書いた内容が反映されな い ActionごとのExample
valueを指定できない かといってBody sectionとSchema sectionを両方書く気にはなら ない しかしこのあたりはswaggerも一緒なので妥協しています Attributes sectionをもとにJSON Schemaをレンダリングする挙動が 少しおかしい時がある JSON Schemaが壊れるほどではないので、許容範囲
49.
4.2 Dredd テスティングツール(https://github.com/apiaryio/dredd) ドキュメント(https://dredd.readthedocs.io/en/latest) 実際に動いているAPIサーバーに対してリクエストを行い、レスポン スの内容をテストすることができる デフォルトではResponse sectionでの定義(ステータスコード、 Header・Body)のチェックを行う BodyについてはJSON
SchemaでのValidationを行う hook処理を用いることで細かな制御やテストも可能 実はSwagger Specも実行できる(少し制限があるが)
50.
Quick start $ npm
install -g dredd $ dredd init $ dredd ※ dredd init で設定する項目は公式ドキュメントを参照
51.
テストの成功例 リクエストの実行順は、デフォルトではSpeci cationで上から書いた順 番に行われる(設定ファイルで変更可能)。 > ./node_modules/dredd/bin/dredd info:
Configuration './dredd.yml' found, ignoring other arguments. info: Beginning Dredd testing... pass: GET /users?offset=0&limit=10 duration: 47ms pass: POST /users duration: 27ms pass: PUT /users/1 duration: 18ms pass: DELETE /users/1 duration: 6ms complete: 4 passing, 0 failing, 0 errors, 0 skipped, 4 total complete: Tests took 106ms
52.
テストの失敗例 下記の例(一部抜粋)では「 list[0].id とlist[1].id
の型が、仕様書では string だけどnumber になってるよ」と言っている > ./node_modules/dredd/bin/dredd info: Configuration './dredd.yml' found, ignoring other arguments. info: Beginning Dredd testing... fail: GET /users?offset=0&limit=10 duration: 56ms pass: POST /users duration: 17ms pass: PUT /users/1 duration: 18ms pass: DELETE /users/1 duration: 9ms info: Displaying failed tests... fail: GET /users?offset=0&limit=10 duration: 56ms fail: body: At '/list/0/id' Invalid type: number (expected string) body: At '/list/1/id' Invalid type: number (expected string)
53.
設定ファイル(dredd.yaml) 起動オプションでも同じような指定ができる blueprint : Api
Blueprint Speci cationファイルの指定 endpoint : テストするAPIのhostの指定 hookfiles : hookファイルの指定 header : 全てのRequestに付与するHeader情報を指定 only : テストするtransactionの指定 method : テストするHTTPメソッドの指定 level : ログレベル
54.
hookについて 複数の言語で書ける(Go, Node.js, Perl,
PHP, Python, Ruby) 前処理・後処理が書ける Requestをカスタマイズできる デフォルトではExample ValueやDefault Valueが使われるため Responseに対してCustom Validationが書ける 詳しくはドキュメントやExample (https://github.com/apiaryio/dredd-example) を参照
55.
hook例(前処理・後処理) var hooks =
require('hooks'); hooks.beforeAll(function(transaction) { // テスト全体での前処理 }); hooks.beforeEach(function(transaction) { // transation毎の前処理 }); hooks.afterAll(function(transaction) { // テスト全体での後処理 });
56.
hook例(指定したtransactionの前処理) hooks.before('Transaction Name', function(transaction)
{ // Requestの書き換え var url = transaction.fullPath; transaction.fullPath = url.replace('1', '12345'); });
57.
hook例(テストのスキップ) hooks.before('Transaction Name', function(transaction)
{ transaction.skip = true; });
58.
hook例(Custom validation) var assert
= require('assert'); hooks.after('Transaction Name', function(transaction) { // JSONの完全一致チェック var expected = JSON.parse(transaction.expected.body); var actual = JSON.parse(transaction.real.body); assert.deepEqual(expected, actual); });
59.
Transaction Name Resouce section・Action
sectionの書き方によって決まる サンプルの例だと、'ユーザー > ユーザー一覧を取得する> ユーザー 一覧を取得する'となる パターンが多いので、よくわからない時はログを仕込んで調べてみ てください hooks.beforeEach(function(transaction) { console.log(transaction.name); });
60.
Transaction Object hookスクリプトで引数に受け取る関数の引数 「speci cationをもとに生成された、HTTPリクエスト・レスポンス に必要なものが揃っている」という認識でOKです 詳しくはドキュメントで (https://dredd.readthedocs.io/en/latest/data-structures/)
61.
Dreddについての所感 デフォルトでスキーマのテストができるのが便利 hookを組み合わせれば細かなチェックやパターン網羅もできる
62.
Dreddについての所感 hookでできることを知らないと少々大変 e2eテストのレベルのことをやるべきではない ステートレスなものだけやるのは楽(HTTPでいうとGETメソッド だけ、とか) ステートフルなものはDBの初期化などがどうしても必要になる その仕組みを作るのに時間をかけるのであれば、skipするとい うのもひとつの手 目的に応じて、ユニットテストやその他のe2eテストをやりましょ う
63.
4.3 Drakov モックサーバー (https://github.com/Aconex/drakov) Quick
start $ npm install -g drakov $ drakov -f example1.md $ curl -XGET http://localhost:3000/users
64.
Drakovについての所感 APIを作る側と使う側が並行してアプリケーションを開発する場合に 役に立つ 結合テストの前にローカル環境で動作を確認できる watch機能があるのでMockサーバーを立ち上げたままでも編集しな がら確認ができる 汎用的にMockサーバーとして使いたい場合は、Body sectionをきち んと書く必要がある Attributes sectionだけ書いた場合はExample
Valueを用いてレス ポンスが作られるので、ニーズに合わないことがある arrayのサイズが1固定になってしまう、など
65.
ツールの裏側について(開発者向け) Api Blueprint用の独自ツールを作りたい場合は参考にすると良いです 1. drafterでApi
Blueprintをパースし、Api Elementsに変換 drafter (https://github.com/apiaryio/drafter) Api Elements (http://api-elements.readthedocs.io/en/latest/) 2. 各種ツールはこのApi Elementsをもとに処理 Dreddの場合、さらにdredd-transactionsでHttp Transactionに変 換(https://github.com/apiaryio/dredd-transactions)
66.
Apiaryサービスについて この他、Apiaryが提供するサービスもあるhttps://apiary.io/ Githubとの連携 Apiary Editor テスティングレポート 無償で使えるのはpublic repositoryのみ
67.
他にもいろいろなツールがあるので、試してみ てください Converters (https://apiblueprint.org/tools.html#converters) Api Blueprint
speci cationからコードを自動生成するツール
68.
5. プロジェクトに導入した話
69.
新規API作成案件 1. アプリケーションの内部はブラックボックスとし、 Request/Responseだけ先に定義 2. APIの注意点も書いておく RequestのValidation Responseのリストの並び順 3.
仕様書をもとに設計ミーティングで擦り合わせ 4. 実装中に変更点があったらドキュメントも修正してすぐに通知
70.
既存のAPI作り替え案件 1. ドキュメントはCon uenceでまとめていたが、所どころ乖離が見ら れたので、Aglioできちんとまとめることにした 同じgithub
repositoryで管理したいというのもあった 2. 表と内部リンクを組み合わせる箇所が多かった 3. Multiple Request/Responseが役に立った Requestのパターンが多く、それに対応したResponseを定義して Dreddでテストした
71.
既存のAPI案件(1) (現在進行中)APIドキュメント作成中 リリース優先で作り込みをやってきたのでAPIドキュメントが整備 しきれていない Request・Responseのパターンが多く漏れがある optionalな項目が多いとDreddのテストでも気付けないので見落と しがち ステートを持つものは基本的にテストをskipさせている Dockerでのクリーンな環境構築も考え中
72.
既存のAPI案件(2) Aglioだけ用いている Dreddは用いていないが、ユニットテストをしっかり行っている Restfulな設計になっている ルールが徹底しているのでドキュメントの更新漏れがない I/Fに変更がある場合は、同じPull Requestで修正する
73.
所感 APIドキュメントを使った開発フローを徹底するのはどうだろうか Request/ResponseのModelはドキュメントから自動生成する APIのI/Fが変わる時は先にドキュメントを更新することになる Modelのpackageや継承関係もはっきりさせておく RequestのValidationルールを明記する
74.
まとめ
75.
まとめ Api Blueprintを使うと手軽にAPIドキュメントが作れる ベースはMarkdownなので、自由に書きやすい MSONは少し複雑だが、主に使うものは決まっているのでそこだ け覚えればOK HTMLでのドキュメント出力ができる HTTPリクエスト・レスポンスのテストができる Dreddは高機能だがハマることもあるので、チームで話し合って 決めてください モックサーバーを用いての開発ができる
76.
Swagger Speci cationとの比較 SwaggerはJSON
Schemaに準拠しているだけあって、厳格に書ける より開発者向け Api Blueprintは仕様について任意の箇所でテキスト(Markdown)で記 述しやすい 開発者や勿論、ディレクター向けの仕様書としても書きやすい
77.
ドキュメントが先かソースコードが先か APIドキュメントをきちんと書いた上で、開発を進めるのがよいと思 います 個人的な意見としては APIドキュメントは「仕様」である ソースコードが示すのは「挙動」であり「仕様」ではない APIドキュメントに限らず、ドキュメントはきちんと書きましょう どこかでツケを払う時期が来ます...
78.
参考にさせていただいた資料 aglioとdrakovでAPI仕様書とMockを生成する手順 (http://takemikami.com/2017/01/05/agliodrakovAPIMock.html) すごーい!APIドキュメントを更新するだけでAPIが自動テストでき ちゃう!たのしー! https://www.slideshare.net/dcubeio/api-blueprint-75780293
79.
ご静聴ありがとうございました
Download