SlideShare a Scribd company logo
SwaggerとAPIのデザイン
Swaggerではじめる楽々RESTful APIデザイン&ドキュメント管理
2017/5/12
Okachi.js vol.5
第1回
出演
{:company “Greative.GK”
:name “Kazuhiro Hara”
:twitter “@kara_d”
:interest “SPA, WebVR, Clojure,
Design research”}
Clojure / ClojureScript で
Electronアプリケーションを
作るためのスタートキット / プラットホーム
● オープンソースにてGitHubにて公開
● MITライセンス
● 現在のスター数 : 289
http://descjop.org/
+9 Point up
SwaggerとAPIのデザイン
本日のトピック
SwaggerとAPIのデザイン
http://swagger.io/
もくじ
1. 問題意識
2. Swaggerとは
3. ExpressとSwaggerのサンプルを見てみよう
4. 僕とSwagger (Clojureベースの環境で利用しています)
問題意識
RESTful APIのドキュメントどうしていますか?
RESTful APIのドキュメントあれこれ
● Wikiで管理
● Word / Excelで管理
● クラウドで同時編集可能なGoogle Docsで管理
● リポジトリ内のドキュメント
● 何かの自動生成ツールとか
RESTful APIのドキュメントあるある
● みんなに意見を聞く
そこで
Swagger!
Swaggerとは
SwaggerとAPIのデザイン
Swagger
Swagger is a powerful open source framework backed by a large ecosystem of tools that helps you design,
build, document, and consume your RESTful APIs.
Swagger
Swaggerは、RESTful APIの設計、構築、文書化、および使用に役立つ、大規模なエコシステムツールを使用し
た強力なオープンソースフレームワークです。(by Google翻訳)
発音
スゥァガー(YouTube調べ)
SwaggerとAPIのデザイン
Swaggerでできること(1)
● Swagger Editor
○ http://swagger.io/swagger-editor/
○ APIの設計を視覚的に行うことが出来るツール
○ エディターエリアとプレビューエリアがある
あとでデモします
Swaggerでできること(2)
● Swagger Codegen
○ http://swagger.io/swagger-codegen/
○ Swaggerで定義した仕様からサーバー側のコードを生成する
■ API clients
● ActionScript, Bash, C# (.net 2.0, 4.0 or later), C++ (cpprest, Qt5, Tizen), Clojure, Dart, Elixir, Go, Groovy, Haskell, Java
(Jersey1.x, Jersey2.x, OkHttp, Retrofit1.x, Retrofit2.x, Feign), Node.js (ES5, ES6, AngularJS with Google Closure Compiler
annotations) Objective-C, Perl, PHP, Python, Ruby, Scala, Swift (2.x, 3.x), Typescript (Angular1.x, Angular2.x, Fetch, jQuery,
Node)
■ Server stubs
● C# (ASP.NET Core, NancyFx), Erlang, Go, Haskell, Java (MSF4J, Spring, Undertow, JAX-RS: CDI, CXF, Inflector, RestEasy),
PHP (Lumen, Slim, Silex, Zend Expressive), Python (Flask), NodeJS, Ruby (Sinatra, Rails5), Scala (Finch, Scalatra)
■ API documentation generators: HTML, Confluence Wiki
■ Others: JMeter
Swaggerでできること(3)
● Swagger UI
○ http://swagger.io/swagger-ui/
○ Swaggerの仕様をサーバー側で実装しておくと、自動でドキュメントが生成される
○ たぶん、もっともよく使う部分
こちらもあとでデモします
ExpressとSwaggerのサンプルを
見てみよう
サンプル使用までの流れ
swagger-node
https://github.com/swagger-api/swagger-node
を使います
テンプレートをexpress, hapi, restify, sailsから選べる
$ npm install -g swagger
$ swagger project create hello-world
使ってみる(1)
まずは、Swagger Editor
$ swagger project edit
使ってみる(2)
Swagger UIを試す
/app.js を変えていく。まず、ミドルウェアライブラリの読み込み
続いて、appオブジェクトにミドルウェアを指定する
サーバの起動 : http://localhost:10010/docs/
$ swagger project start
var SwaggerUi = require('swagger-tools/middleware/swagger-ui');
app.use(SwaggerUi(swaggerExpress.runner.swagger));
僕とSwagger
Swagger UIは、様々な言語から利用できる
● Node.jsで開発している人でなくても利用できる
● 既存のアプリケーションに組み込むこともできる
● 一度仕様を作れば、万が一移植することになっても、
ドキュメント面の変更がほとんどない(出力されたものに関しては)
ClojureでのAPI開発に全面的に使用
● 使い道 : SPA開発のAPIデザイン & バックエンド開発
○ フロントエンドとバックエンド同時に作ったり
● compojure-apiというフレームワークでAPIを構築している
● Swaggerと統合されているのでこんなことがかんたんに出来る
○ リクエスト時のJSONの型を定義して実装にもドキュメントにも反映
○ レスポンス時のJSONの型を定義して実装にもドキュメントにも反映
○ Swaggerの仕様の基づいているので、実装しているAPIのパラメータ仕様などが
そのままドキュメントになる
○ 開発時だけSwaggerを有効にして、本番時は無効にする
サンプルコード : I/O周りの仕様定義
POST時のリクエストの仕様 (一部適当です)
POST時のレスポンスの仕様 (一部適当です)
(s/defschema RequestPost
"POSTのスキーマ"
{:data {:type (s/eq “markdown”)
:attributes {:markdown s/Any}}})
(s/defschema ResponsePost
"POST返り値のスキーマ"
{:data {:type (s/eq “markdown”)
(s/optional-key :errors) s/Any
:attributes {:result s/Any}}})
サンプルコード : APIの実装
(def kara-d-api
(api
{:swagger (if (env/dev?)
{:ui "/api-docs-markdown"
:options {:ui {:validatorUrl nil}}
:spec "/swagger-markdown.json"
:data {:info {:title "markdown API"
:description ""}
:tags [{:name "api-markdown", :description ""}]}}
nil)
:format { ... }}}
(context "/api/markdown" []
:tags ["api-markdown"]
(POST "/" request
:summary "markdown投稿"
:body [post RequestPost]
:return ResponsePost
(if-not (authenticated? request)
(bad-request (error/unauthorized config/api-type))
(ok (handler-api/post! post request))))
... 他のAPI定義
)))
Swaggerの定義メタデータ
各APIの実装
Swaggerいいことまとめ
● Swaggerが統合されたフレームワークであれば、実装コードにSwagger用のメタデー
タを付与するだけで、ドキュメントの構築が可能
○ 使い方は、それぞれのフレームワークのドキュメントを見よう
○ かなりの言語が対応しているはず
● 実装と仕様ドキュメントのずれがなくなる
● リポジトリで一緒に管理できる
● 動作するドキュメントとして、いろいろ試せる
● APIを設計するときに細かな仕様を考えられる
● とりあえず適当なサーバを立ち上げられる
どうですか
Swagger!
- END -
ありがとうございました
2017/5/12
Okachi.js vol.5

More Related Content

PDF
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
PDF
React VR ことはじめ
PDF
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
PDF
React系(別言語含む)の サーバーサイドレンダリング について考えよう
PDF
Swaggerを利用した新規サービス開発
PDF
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
PDF
ClojureでElectronアプリを作ろう
PDF
One Time Binding & Digest Loop
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
React VR ことはじめ
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
React系(別言語含む)の サーバーサイドレンダリング について考えよう
Swaggerを利用した新規サービス開発
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
ClojureでElectronアプリを作ろう
One Time Binding & Digest Loop

What's hot (20)

PDF
Gradleどうでしょう
PDF
Windows コンテナを AKS に追加する
PDF
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
PDF
Bicep + VS Code で楽々Azure Deploy
PDF
Swagger 入門
PPTX
Jjug 20140430 gradle_advanced
PDF
GitHub + Circle CI で幸せになろう
PDF
Riot + generator で始める新しいデータバインディング
PDF
VSCode Conference Japan 2021 kyusque
PPTX
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
PDF
海外で注目されてるJs framework “mithril”の特徴
PDF
Github codespaces すごく良い。もうこれで 十分なんじゃという話
PPTX
Riotjsハンズオン
PDF
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
PDF
Rancher使ってみたよ(初心者向け)
PDF
インフラ部門で働くCプログラマの話
PDF
はじめての CircleCI
PPTX
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
PDF
Om Next ~React.jsを超えて
PDF
AWS SDK for Go in #jawsmeguro
Gradleどうでしょう
Windows コンテナを AKS に追加する
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
Bicep + VS Code で楽々Azure Deploy
Swagger 入門
Jjug 20140430 gradle_advanced
GitHub + Circle CI で幸せになろう
Riot + generator で始める新しいデータバインディング
VSCode Conference Japan 2021 kyusque
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
海外で注目されてるJs framework “mithril”の特徴
Github codespaces すごく良い。もうこれで 十分なんじゃという話
Riotjsハンズオン
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
Rancher使ってみたよ(初心者向け)
インフラ部門で働くCプログラマの話
はじめての CircleCI
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
Om Next ~React.jsを超えて
AWS SDK for Go in #jawsmeguro
Ad

Similar to SwaggerとAPIのデザイン (20)

PPTX
Swagger jjug ccc 2018 spring
PDF
こんなに使える!今どきのAPIドキュメンテーションツール
PDF
Swaggerのさわりだけ
PPTX
Automatic api document generation 101
PDF
Swaggerでのapi開発よもやま話
PDF
Swaggerで始めるモデルファーストなAPI開発
PDF
Apiドキュメンテーションツールを使いこなす【api blueprint編】
PPTX
Fun tech14-alibaba cloud api gateway-swagger
PDF
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
PDF
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
PDF
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
PPTX
Create entity from swagger in drupal8
PPTX
APIドキュメントの話 #sphinxjp
PDF
多分モダンなWebアプリ開発
PDF
カラーミーAPIドキュメントの今後
PDF
大規模なギョームシステムにHaxeを採用してみた話
PDF
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
PDF
Java scriptの進化
PDF
デバイス WebAPI設計の進め方
PPTX
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Swagger jjug ccc 2018 spring
こんなに使える!今どきのAPIドキュメンテーションツール
Swaggerのさわりだけ
Automatic api document generation 101
Swaggerでのapi開発よもやま話
Swaggerで始めるモデルファーストなAPI開発
Apiドキュメンテーションツールを使いこなす【api blueprint編】
Fun tech14-alibaba cloud api gateway-swagger
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
Create entity from swagger in drupal8
APIドキュメントの話 #sphinxjp
多分モダンなWebアプリ開発
カラーミーAPIドキュメントの今後
大規模なギョームシステムにHaxeを採用してみた話
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
Java scriptの進化
デバイス WebAPI設計の進め方
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Ad

More from Kazuhiro Hara (20)

PDF
MDX with Next.js
PDF
MDX and Next.js
PDF
About Plone Conference Tokyo 2018 Frontend Day
PDF
Gatsby & React Static
PDF
Clojure.tokyo.descjop
PDF
Re-frame and A-Frame
PDF
ひとりアドベントカレンダーのご紹介
PDF
(IDEユーザのための) ClojureのEmacs開発環境について
PDF
Cryogenでサイトつくろーじぇん
PDF
WebSocket+Akka(Remote)+Play 2.1 Java
PDF
第2回 -Play部屋- Play 2.0はじめて&もくもく会
PDF
-Play部屋- Play 2.0はじめて&もくもく会
PDF
Play framework 2.0のおすすめと1.2からのアップグレード
PDF
sbtマルチプロジェクトビルドの使いどころ
PDF
Playbay Play 2.0 plugin イロハのイ
PDF
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PDF
PlayFramework1.2.4におけるWebSocket
PDF
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
PDF
WP Jelly vol.01 WordPress管理画面にメニューを追加しよう
PDF
Play FrameworkとWeb Socketの話
MDX with Next.js
MDX and Next.js
About Plone Conference Tokyo 2018 Frontend Day
Gatsby & React Static
Clojure.tokyo.descjop
Re-frame and A-Frame
ひとりアドベントカレンダーのご紹介
(IDEユーザのための) ClojureのEmacs開発環境について
Cryogenでサイトつくろーじぇん
WebSocket+Akka(Remote)+Play 2.1 Java
第2回 -Play部屋- Play 2.0はじめて&もくもく会
-Play部屋- Play 2.0はじめて&もくもく会
Play framework 2.0のおすすめと1.2からのアップグレード
sbtマルチプロジェクトビルドの使いどころ
Playbay Play 2.0 plugin イロハのイ
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework1.2.4におけるWebSocket
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
WP Jelly vol.01 WordPress管理画面にメニューを追加しよう
Play FrameworkとWeb Socketの話

SwaggerとAPIのデザイン