SlideShare a Scribd company logo
© Recochoku Co.,Ltd. Proprietary and Confidential
2017/02/07
Swaggerを利用した
新規サービス開発
株式会社レコチョク
事業システム推進部 ミュージックアーキテクトグループ
松木 佑徒
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
自己紹介
2
職業:フルスタックエンジニア(自称)
言語:C# (2008~2010) -> Java (2011~2015) -> Python (2016~)
趣味:ドラム / ジャグリング
Yuto Matsuki @yustam_jp id:yustam
2008: 某SIerにてシステムエンジニアとして色々な現場で仕事をする
2014: 株式会社レコチョクに転職
2014-2015: レコチョクの楽曲DB周辺のバッチなどをAWS環境上に再構築
2016-: 新サービスWIZYの開発リーダーとしてWebの開発に携わる
最近は研究開発的な事もしています。
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
レコチョクについて
3
https://eggs.mu http://playpass.jp
2015/02サービス開始 2016/03サービス開始
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
WIZYについて
4
2016/08サービス開始
https://wizy.jp
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
WIZYのシステム構成
5
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
WIZYを支える技術
6
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
Swagger
7
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
Swaggerを採用した経緯①
8
• re:Invent 2015 Bootcampで初めてSwaggerに触れる
• Swagger Api Gateway Importerを使用したハンズオン
• 用意されたSpecを利用してツールでAPI Gatewayにデ
プロイするというもの
• サーバレスという概念が出て来て間もない頃で非常に
画期的な印象
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
Swaggerを採用した経緯②
9
• 2015年末新規サービス開発のプロジェクトが始まる
• はじめてフロントのシステムを担当することに
• 最初のプロトタイプ開発は1人で
• 仕様書はExcelなどで書きたくない
• 書くならコードの自動生成/再利用性のあるもの
• 個人的にRAMLを使ったことがあったが
• CodeGeneratorがPythonに対応している
• Open API Initiativeが立ち上がりSwaggerを推し始めた
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
Swaggerを採用した経緯 ③使ってみる
10
• 簡単なSwaggerSpecをYAMLで作成
/projects/{project_id}:
get:
summary: プロジェクト取得
tags:
- Project
parameters:
- name: project_id
in: path
description: プロジェクトID
required: true
type: integer
responses:
200:
description: プロジェクト
schema:
$ref: '#/definitions/project'
project:
type: object
properties:
id:
type: integer
description: プロジェクトID
user_id:
type: integer
description: ユーザID
...
paths: definitions:
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
Swaggerを採用した経緯 ③使ってみる
11
• CodeGeneratorでPythonクライアントを生成
• definitionで定義したオブジェクトをそのままJSON化
• レスポンスはdefinitionsのオブジェクトで受け取れる
import swagger_client as sw
project_api = sw.ProjectApi(api_client=api)
project = project_api.projects_project_id_get(project_id)
print(type(project))
print(type(project.end_time))
<class 'swagger_client.models.project.Project'>
<class 'datetime.datetime'>
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
Swaggerを採用した経緯 ③使ってみる
12
• JSON Web Tokenを利用した認証
ApiKey:
type: apiKey
name: Authorization
in: header
securityDefinitions:
/authenticate:
post:
summary: 認証API
tags:
- Auth
parameters:
- name: authenticate
in: body
required: true
schema:
$ref: '#/definitions/authenticate'
responses:
200:
description: トークン
schema:
$ref: '#/definitions/token'
paths:
authenticate:
type: object
properties:
key:
type: string
description: 認証キー
secret:
type: string
format: string
description: 認証シークレット
token:
type: object
properties:
access_token:
type: string
description: 認証トークン
definitions:
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
Swaggerを採用した経緯 ③使ってみる
13
• JSON Web Tokenを使用した認証を採用
import swagger_client as sw
auth_api = sw.AuthApi(sw.ApiClient(API_HOST))
auth = sw.Authenticate(key='user',secret='hogehoge')
resp = auth_api.authenticate_post(authenticate=auth)
api = sw.ApiClient(host=API_HOST, header_name='Authorization',
header_value='JWT %s' % resp.access_token)
project_api = sw.ProjectApi(api_client=api)
project = project_api.projects_project_id_get(project_id)
curl-X POST -d '{"key":"user","secret":"hogehoge"}' http://${API_HOST}/authenticate
curl -X GET -H "Authorization: JWT ${JWT_TOKEN}" http://${API_HOST}/projects/${PROJECT_ID}
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
WIZYにおけるSwagger
14
• Swaggerの仕様バージョン2.0
• 開発言語はPython
• API側のフレームワークはFlask
• APIの認証はFlask-JWTを使用したJWTトークン認証
• 2017年2月時点でAPI数は 63 (pathベースで38)
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
Swagger Code Generator
15
YAMLで仕様を管理。YAMLから生成
https://github.com/swagger-api/swagger-codegen
html
python
/projects/{project_id}:
get:
summary: プロジェクト取得
tags:
- Project
parameters:
- name: project_id
in: path
description: プロジェクトID
required: true
type: integer
responses:
200:
description: プロジェクト
schema:
$ref: '#/definitions/project'
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
WIZYの開発手法
16
1. 機能要件に従ってテーブル定義等の仕様を決める
2. フロントの要件に従ってAPI仕様をSwagger Specで書く
3. Swagger Specに従ってAPIを実装
4. Swagger Code Generatorでクライアントを生成
5. 生成したクライアントを使用してフロントのアプリを実装
web api
client
cache database
spec
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
Swaggerを使って良かったこと(開発)
17
APIの仕様レビューがYAMLファイル上で行える
• diffで比較できるのでレビュー漏れが無い
• JSONよりYAMLの方が書き方に個人差が出ないのでオススメ
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
Swaggerを使って良かったこと(開発)
18
書式が決まっているのでAPIに必要な情報について曖昧さがない
実装前にある程度挙動を確認できるので手戻りが防げる
APIの開発者とクライアント側の開発者が並行で作業できる
他との矛盾/命名規則の違反などを発見しやすい
他のpaths/definitionsを再利用できる
/projects/{project_id}:
get:
summary: プロジェクト取得
tags:
- Project
parameters:
- name: project_id
in: path
description: プロジェクトID
required: true
type: integer
responses:
200:
description: プロジェクト
schema:
$ref: '#/definitions/project'
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
Swaggerを使って良かったこと(開発)
19
そのままコードになるのでレビューした内容とコードに差がない
ドキュメントにもなるのでコードとドキュメントの乖離がない
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
Swaggerを使って良かったこと(運用)
20
Web/APIを分離してバージョン管理しやすくなる
SwaggerSpecに変更がある場合のみAPI仕様に変更がある
swaggerのtags
webのtags apiのtags× ×
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
Swaggerを使って良かったこと(運用)
21
Blue-Green Deploymentにより無停止でバージョンアップ可能に
本番環境ELB
API-ELB
API v1.0
API v1.1ステージ環境ELB
Web v2.0
Web v2.1
しかしAPIに互換性がない場合は並行稼動できない…
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
Swaggerを使って良かったこと(運用)
22
APIのインタフェース仕様の変更が一目でわかるので
前のバージョンと互換性があるかの判断が簡単になる
→ pathの追加だけであれば問題ない。など
差分がない場合は仕様に変更がないことが保証されるが
ソート順などは表現されないのでインタフェース以外の
修正は個別で判断する必要がある
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
「operationId」の定義は必要か
23
https://apihandyman.io/writing-openapi-swagger-specification-tutorial-part-7-documentation/
paths:
/persons:
parameters:
- $ref: '#/parameters/userAgent'
get:
summary: Gets some persons
description: Returns a list containing all persons. The list supports paging.
operationId: searchUsers
[main] WARN io.swagger.codegen.DefaultCodegen - Empty operationId found
for path: post /projects/{project_id}/items. Renamed to auto-generated
operationId: projectsProject_idItemsPost
「operationId」はAPI単位にユニークな名前をつけるもの
書かないとCodeGeneratorに怒られます。。
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07
Swaggerの使い方について今後の課題①
24
# operationId未指定の場合
projects = project_api.projects_get(limit=10)
# operationIdを指定した場合
projects = project_api.search_projects(limit=10)
ルールを作るとしたら
• 「GET /XXXs」=>「search_XXXs」
• 「GET /XXXs/{YYY}」 => 「get_XXX_by_YYY」
• 変えたい場合もある。POST/PUT場合はどうする。。?
APIのpathとは別でルールを考える必要がありそう
Pythonクライアントの場合は自動でメソッド名が決まる
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 25
• OpenAPI 3.0 への移行
• 全体の99%を占めるpaths/definitionsに大きな変更なし?
• definitionsはcomponentsの配下に移動
• pathsはそのままに見えます…
https://www.openapis.org/news/blogs/2016/10/tdc-structural-improvements-explaining-30-spec-part-2
今後の課題(3.0対応)
© Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 26
ご静聴ありがとうございました!

More Related Content

What's hot

Spring I/O 2015 報告
Spring I/O 2015 報告Spring I/O 2015 報告
Spring I/O 2015 報告
Takuya Iwatsuka
 
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3techConsumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Toshiaki Maki
 
Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話
Alisa Sasaki
 
Springを使ったwebアプリにリファクタリングしよう
Springを使ったwebアプリにリファクタリングしようSpringを使ったwebアプリにリファクタリングしよう
Springを使ったwebアプリにリファクタリングしよう
土岐 孝平
 
2016/05/01 Visual Studio with Cordova
2016/05/01 Visual Studio with Cordova2016/05/01 Visual Studio with Cordova
2016/05/01 Visual Studio with Cordova
miso- soup3
 
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティスJsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Yoichi KIKUCHI
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
React NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようReact NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみよう
dcubeio
 
明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築
MILI-LLC
 
XP祭り2021LT資料(「俺のLT」完結編)
 XP祭り2021LT資料(「俺のLT」完結編) XP祭り2021LT資料(「俺のLT」完結編)
XP祭り2021LT資料(「俺のLT」完結編)
Fumihiro Sunada
 
React Nativeってどうなの?
React Nativeってどうなの?React Nativeってどうなの?
React Nativeってどうなの?
Ryosuke Hara
 
React Nativeで始めるアプリ開発
React Nativeで始めるアプリ開発React Nativeで始めるアプリ開発
React Nativeで始めるアプリ開発
Ryosuke Hara
 
React Native 入門
React Native 入門React Native 入門
React Native 入門
Seiichi Okumiya
 
大規模ライブ配信の苦労ポイント
大規模ライブ配信の苦労ポイント大規模ライブ配信の苦労ポイント
大規模ライブ配信の苦労ポイント
gree_tech
 
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworkerおれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
Toshiaki Maki
 
SpringベースのCloud Native Application
SpringベースのCloud Native ApplicationSpringベースのCloud Native Application
SpringベースのCloud Native Application
土岐 孝平
 
20191024 Get Start gRPC with ASP.NET
20191024 Get Start gRPC with ASP.NET20191024 Get Start gRPC with ASP.NET
20191024 Get Start gRPC with ASP.NET
Takayoshi Tanaka
 
アプリケーションへのRubyインタープリターの組み込み
アプリケーションへのRubyインタープリターの組み込みアプリケーションへのRubyインタープリターの組み込み
アプリケーションへのRubyインタープリターの組み込み
Kouhei Sutou
 

What's hot (19)

Spring I/O 2015 報告
Spring I/O 2015 報告Spring I/O 2015 報告
Spring I/O 2015 報告
 
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3techConsumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
 
Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話
 
Springを使ったwebアプリにリファクタリングしよう
Springを使ったwebアプリにリファクタリングしようSpringを使ったwebアプリにリファクタリングしよう
Springを使ったwebアプリにリファクタリングしよう
 
2016/05/01 Visual Studio with Cordova
2016/05/01 Visual Studio with Cordova2016/05/01 Visual Studio with Cordova
2016/05/01 Visual Studio with Cordova
 
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティスJsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
 
Spray intro
Spray introSpray intro
Spray intro
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
 
React NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようReact NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみよう
 
明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築
 
XP祭り2021LT資料(「俺のLT」完結編)
 XP祭り2021LT資料(「俺のLT」完結編) XP祭り2021LT資料(「俺のLT」完結編)
XP祭り2021LT資料(「俺のLT」完結編)
 
React Nativeってどうなの?
React Nativeってどうなの?React Nativeってどうなの?
React Nativeってどうなの?
 
React Nativeで始めるアプリ開発
React Nativeで始めるアプリ開発React Nativeで始めるアプリ開発
React Nativeで始めるアプリ開発
 
React Native 入門
React Native 入門React Native 入門
React Native 入門
 
大規模ライブ配信の苦労ポイント
大規模ライブ配信の苦労ポイント大規模ライブ配信の苦労ポイント
大規模ライブ配信の苦労ポイント
 
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworkerおれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
 
SpringベースのCloud Native Application
SpringベースのCloud Native ApplicationSpringベースのCloud Native Application
SpringベースのCloud Native Application
 
20191024 Get Start gRPC with ASP.NET
20191024 Get Start gRPC with ASP.NET20191024 Get Start gRPC with ASP.NET
20191024 Get Start gRPC with ASP.NET
 
アプリケーションへのRubyインタープリターの組み込み
アプリケーションへのRubyインタープリターの組み込みアプリケーションへのRubyインタープリターの組み込み
アプリケーションへのRubyインタープリターの組み込み
 

Viewers also liked

そうだApi公開しよう feat. 有志のエンジニア
そうだApi公開しよう feat. 有志のエンジニアそうだApi公開しよう feat. 有志のエンジニア
そうだApi公開しよう feat. 有志のエンジニア
recotech
 
レコチョクのサービス群を支えるApiたち
レコチョクのサービス群を支えるApiたちレコチョクのサービス群を支えるApiたち
レコチョクのサービス群を支えるApiたち
recotech
 
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
KEISUKE KONISHI
 
Oracle racからaurora my sqlへの移行
Oracle racからaurora my sqlへの移行Oracle racからaurora my sqlへの移行
Oracle racからaurora my sqlへの移行
recotech
 
Mackerel x Twilio ~レコチョクの場合~
Mackerel x Twilio ~レコチョクの場合~Mackerel x Twilio ~レコチョクの場合~
Mackerel x Twilio ~レコチョクの場合~
recotech
 
#reco_tech Cloud searchでレコチョク検索の実現に向けて
#reco_tech   Cloud searchでレコチョク検索の実現に向けて#reco_tech   Cloud searchでレコチョク検索の実現に向けて
#reco_tech Cloud searchでレコチョク検索の実現に向けて
recotech
 
Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発
Takuro Sasaki
 
Git hubenterpriseを導入してみて
Git hubenterpriseを導入してみてGit hubenterpriseを導入してみて
Git hubenterpriseを導入してみて
recotech
 
#reco_tech OracleからAuroraへ feat. 開発しかやってこなかったエンジニア
#reco_tech   OracleからAuroraへ feat. 開発しかやってこなかったエンジニア#reco_tech   OracleからAuroraへ feat. 開発しかやってこなかったエンジニア
#reco_tech OracleからAuroraへ feat. 開発しかやってこなかったエンジニア
recotech
 
#reco_tech AWSへ全面移行した今を話ます。
#reco_tech   AWSへ全面移行した今を話ます。#reco_tech   AWSへ全面移行した今を話ます。
#reco_tech AWSへ全面移行した今を話ます。
recotech
 
#recotech_AWS移行してみたけどぶっちゃけどうよ。
#recotech_AWS移行してみたけどぶっちゃけどうよ。#recotech_AWS移行してみたけどぶっちゃけどうよ。
#recotech_AWS移行してみたけどぶっちゃけどうよ。
recotech
 
WIZY企画の裏側
WIZY企画の裏側WIZY企画の裏側
WIZY企画の裏側
recotech
 
OpenAPI Specification概要
OpenAPI Specification概要OpenAPI Specification概要
OpenAPI Specification概要
Kazuchika Sekiya
 
Swagger / Quick Start Guide
Swagger / Quick Start GuideSwagger / Quick Start Guide
Swagger / Quick Start Guide
Andrii Gakhov
 
Swagger 入門
Swagger 入門Swagger 入門
Swagger 入門
Yoshiaki Yoshida
 
Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形
Shinji Tanaka
 
失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring
失敗から学ぶAPI設計  #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring 失敗から学ぶAPI設計  #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring
失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring Yusuke Yamamoto
 
AWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearchAWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearch
Amazon Web Services Japan
 
Dynamic Inventory: no more host lists!
Dynamic Inventory: no more host lists!Dynamic Inventory: no more host lists!
Dynamic Inventory: no more host lists!
SATOSHI TAGOMORI
 
Google Cloud Endpoints の紹介
Google Cloud Endpoints の紹介Google Cloud Endpoints の紹介
Google Cloud Endpoints の紹介
Taiji Miyamoto
 

Viewers also liked (20)

そうだApi公開しよう feat. 有志のエンジニア
そうだApi公開しよう feat. 有志のエンジニアそうだApi公開しよう feat. 有志のエンジニア
そうだApi公開しよう feat. 有志のエンジニア
 
レコチョクのサービス群を支えるApiたち
レコチョクのサービス群を支えるApiたちレコチョクのサービス群を支えるApiたち
レコチョクのサービス群を支えるApiたち
 
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
 
Oracle racからaurora my sqlへの移行
Oracle racからaurora my sqlへの移行Oracle racからaurora my sqlへの移行
Oracle racからaurora my sqlへの移行
 
Mackerel x Twilio ~レコチョクの場合~
Mackerel x Twilio ~レコチョクの場合~Mackerel x Twilio ~レコチョクの場合~
Mackerel x Twilio ~レコチョクの場合~
 
#reco_tech Cloud searchでレコチョク検索の実現に向けて
#reco_tech   Cloud searchでレコチョク検索の実現に向けて#reco_tech   Cloud searchでレコチョク検索の実現に向けて
#reco_tech Cloud searchでレコチョク検索の実現に向けて
 
Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発
 
Git hubenterpriseを導入してみて
Git hubenterpriseを導入してみてGit hubenterpriseを導入してみて
Git hubenterpriseを導入してみて
 
#reco_tech OracleからAuroraへ feat. 開発しかやってこなかったエンジニア
#reco_tech   OracleからAuroraへ feat. 開発しかやってこなかったエンジニア#reco_tech   OracleからAuroraへ feat. 開発しかやってこなかったエンジニア
#reco_tech OracleからAuroraへ feat. 開発しかやってこなかったエンジニア
 
#reco_tech AWSへ全面移行した今を話ます。
#reco_tech   AWSへ全面移行した今を話ます。#reco_tech   AWSへ全面移行した今を話ます。
#reco_tech AWSへ全面移行した今を話ます。
 
#recotech_AWS移行してみたけどぶっちゃけどうよ。
#recotech_AWS移行してみたけどぶっちゃけどうよ。#recotech_AWS移行してみたけどぶっちゃけどうよ。
#recotech_AWS移行してみたけどぶっちゃけどうよ。
 
WIZY企画の裏側
WIZY企画の裏側WIZY企画の裏側
WIZY企画の裏側
 
OpenAPI Specification概要
OpenAPI Specification概要OpenAPI Specification概要
OpenAPI Specification概要
 
Swagger / Quick Start Guide
Swagger / Quick Start GuideSwagger / Quick Start Guide
Swagger / Quick Start Guide
 
Swagger 入門
Swagger 入門Swagger 入門
Swagger 入門
 
Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形
 
失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring
失敗から学ぶAPI設計  #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring 失敗から学ぶAPI設計  #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring
失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring
 
AWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearchAWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearch
 
Dynamic Inventory: no more host lists!
Dynamic Inventory: no more host lists!Dynamic Inventory: no more host lists!
Dynamic Inventory: no more host lists!
 
Google Cloud Endpoints の紹介
Google Cloud Endpoints の紹介Google Cloud Endpoints の紹介
Google Cloud Endpoints の紹介
 

Similar to Swaggerを利用した新規サービス開発

2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
Issei Hiraoka
 
fluxflex meetup in Tokyo
fluxflex meetup in Tokyofluxflex meetup in Tokyo
fluxflex meetup in TokyoKyosuke Inoue
 
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App InventorHands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hong Chen
 
Swagger jjug ccc 2018 spring
Swagger jjug ccc 2018 springSwagger jjug ccc 2018 spring
Swagger jjug ccc 2018 spring
kounan13
 
Fluxflex meetup 2011 in Tokyo
Fluxflex meetup 2011 in TokyoFluxflex meetup 2011 in Tokyo
Fluxflex meetup 2011 in TokyoKyosuke Inoue
 
【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう
富士通クラウドテクノロジーズ株式会社
 
Project Prague を試してみました
Project Prague を試してみましたProject Prague を試してみました
Project Prague を試してみました
Atsushi Yokohama (BEACHSIDE)
 
Ignite 2021秋 recap - 開発者向け新機能紹介
Ignite 2021秋 recap - 開発者向け新機能紹介Ignite 2021秋 recap - 開発者向け新機能紹介
Ignite 2021秋 recap - 開発者向け新機能紹介
Kazushi Kamegawa
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
DIVE INTO CODE Corp.
 
[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成
shouta yoshikai
 
ゆるふわAzure Functions
ゆるふわAzure FunctionsゆるふわAzure Functions
ゆるふわAzure Functions
Keiji Kamebuchi
 
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
拓将 平林
 
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
Masanori Ishigami
 
20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward
Naoki Shimizu
 
UnityとAmazon Web Servicesで生み出す新しい価値
UnityとAmazon Web Servicesで生み出す新しい価値UnityとAmazon Web Servicesで生み出す新しい価値
UnityとAmazon Web Servicesで生み出す新しい価値
Keisuke Nishitani
 
AI-first Code Editor 「Cursor」の機能紹介
AI-first Code Editor 「Cursor」の機能紹介AI-first Code Editor 「Cursor」の機能紹介
AI-first Code Editor 「Cursor」の機能紹介
ssuser39314d
 
#recotech_WIZY開発の裏側
#recotech_WIZY開発の裏側#recotech_WIZY開発の裏側
#recotech_WIZY開発の裏側
recotech
 
IPv6 アプリケーション開発入門
IPv6 アプリケーション開発入門IPv6 アプリケーション開発入門
IPv6 アプリケーション開発入門
v6app
 
静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応
Masaru Horioka
 
Wolcome to swift
Wolcome to swiftWolcome to swift
Wolcome to swift
Kyohei Ito
 

Similar to Swaggerを利用した新規サービス開発 (20)

2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
 
fluxflex meetup in Tokyo
fluxflex meetup in Tokyofluxflex meetup in Tokyo
fluxflex meetup in Tokyo
 
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App InventorHands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App Inventor
 
Swagger jjug ccc 2018 spring
Swagger jjug ccc 2018 springSwagger jjug ccc 2018 spring
Swagger jjug ccc 2018 spring
 
Fluxflex meetup 2011 in Tokyo
Fluxflex meetup 2011 in TokyoFluxflex meetup 2011 in Tokyo
Fluxflex meetup 2011 in Tokyo
 
【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう
 
Project Prague を試してみました
Project Prague を試してみましたProject Prague を試してみました
Project Prague を試してみました
 
Ignite 2021秋 recap - 開発者向け新機能紹介
Ignite 2021秋 recap - 開発者向け新機能紹介Ignite 2021秋 recap - 開発者向け新機能紹介
Ignite 2021秋 recap - 開発者向け新機能紹介
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成
 
ゆるふわAzure Functions
ゆるふわAzure FunctionsゆるふわAzure Functions
ゆるふわAzure Functions
 
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
 
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
 
20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward
 
UnityとAmazon Web Servicesで生み出す新しい価値
UnityとAmazon Web Servicesで生み出す新しい価値UnityとAmazon Web Servicesで生み出す新しい価値
UnityとAmazon Web Servicesで生み出す新しい価値
 
AI-first Code Editor 「Cursor」の機能紹介
AI-first Code Editor 「Cursor」の機能紹介AI-first Code Editor 「Cursor」の機能紹介
AI-first Code Editor 「Cursor」の機能紹介
 
#recotech_WIZY開発の裏側
#recotech_WIZY開発の裏側#recotech_WIZY開発の裏側
#recotech_WIZY開発の裏側
 
IPv6 アプリケーション開発入門
IPv6 アプリケーション開発入門IPv6 アプリケーション開発入門
IPv6 アプリケーション開発入門
 
静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応
 
Wolcome to swift
Wolcome to swiftWolcome to swift
Wolcome to swift
 

More from recotech

RecoChoku tech night #09 -reinvent2018報告会- オープニング
RecoChoku tech night #09 -reinvent2018報告会-  オープニングRecoChoku tech night #09 -reinvent2018報告会-  オープニング
RecoChoku tech night #09 -reinvent2018報告会- オープニング
recotech
 
Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-
recotech
 
Amazon Kinesis Streams デモ
Amazon Kinesis Streams デモAmazon Kinesis Streams デモ
Amazon Kinesis Streams デモ
recotech
 
Amazon SageMaker の紹介 + デモ
Amazon SageMaker の紹介 + デモ Amazon SageMaker の紹介 + デモ
Amazon SageMaker の紹介 + デモ
recotech
 
Aws導入時にまず考える〇〇のこと
Aws導入時にまず考える〇〇のことAws導入時にまず考える〇〇のこと
Aws導入時にまず考える〇〇のこと
recotech
 
業界あるある Music偏
 業界あるある Music偏 業界あるある Music偏
業界あるある Music偏
recotech
 
レコチョク・ラボが考える人工知能
レコチョク・ラボが考える人工知能レコチョク・ラボが考える人工知能
レコチョク・ラボが考える人工知能
recotech
 
#recotech_レガシーなシステムから立て直すためにしたこと
#recotech_レガシーなシステムから立て直すためにしたこと#recotech_レガシーなシステムから立て直すためにしたこと
#recotech_レガシーなシステムから立て直すためにしたこと
recotech
 

More from recotech (8)

RecoChoku tech night #09 -reinvent2018報告会- オープニング
RecoChoku tech night #09 -reinvent2018報告会-  オープニングRecoChoku tech night #09 -reinvent2018報告会-  オープニング
RecoChoku tech night #09 -reinvent2018報告会- オープニング
 
Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-
 
Amazon Kinesis Streams デモ
Amazon Kinesis Streams デモAmazon Kinesis Streams デモ
Amazon Kinesis Streams デモ
 
Amazon SageMaker の紹介 + デモ
Amazon SageMaker の紹介 + デモ Amazon SageMaker の紹介 + デモ
Amazon SageMaker の紹介 + デモ
 
Aws導入時にまず考える〇〇のこと
Aws導入時にまず考える〇〇のことAws導入時にまず考える〇〇のこと
Aws導入時にまず考える〇〇のこと
 
業界あるある Music偏
 業界あるある Music偏 業界あるある Music偏
業界あるある Music偏
 
レコチョク・ラボが考える人工知能
レコチョク・ラボが考える人工知能レコチョク・ラボが考える人工知能
レコチョク・ラボが考える人工知能
 
#recotech_レガシーなシステムから立て直すためにしたこと
#recotech_レガシーなシステムから立て直すためにしたこと#recotech_レガシーなシステムから立て直すためにしたこと
#recotech_レガシーなシステムから立て直すためにしたこと
 

Recently uploaded

TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 

Recently uploaded (14)

TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 

Swaggerを利用した新規サービス開発

  • 1. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swaggerを利用した 新規サービス開発 株式会社レコチョク 事業システム推進部 ミュージックアーキテクトグループ 松木 佑徒
  • 2. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 自己紹介 2 職業:フルスタックエンジニア(自称) 言語:C# (2008~2010) -> Java (2011~2015) -> Python (2016~) 趣味:ドラム / ジャグリング Yuto Matsuki @yustam_jp id:yustam 2008: 某SIerにてシステムエンジニアとして色々な現場で仕事をする 2014: 株式会社レコチョクに転職 2014-2015: レコチョクの楽曲DB周辺のバッチなどをAWS環境上に再構築 2016-: 新サービスWIZYの開発リーダーとしてWebの開発に携わる 最近は研究開発的な事もしています。
  • 3. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 レコチョクについて 3 https://eggs.mu http://playpass.jp 2015/02サービス開始 2016/03サービス開始
  • 4. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 WIZYについて 4 2016/08サービス開始 https://wizy.jp
  • 5. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 WIZYのシステム構成 5
  • 6. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 WIZYを支える技術 6
  • 7. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swagger 7
  • 8. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swaggerを採用した経緯① 8 • re:Invent 2015 Bootcampで初めてSwaggerに触れる • Swagger Api Gateway Importerを使用したハンズオン • 用意されたSpecを利用してツールでAPI Gatewayにデ プロイするというもの • サーバレスという概念が出て来て間もない頃で非常に 画期的な印象
  • 9. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swaggerを採用した経緯② 9 • 2015年末新規サービス開発のプロジェクトが始まる • はじめてフロントのシステムを担当することに • 最初のプロトタイプ開発は1人で • 仕様書はExcelなどで書きたくない • 書くならコードの自動生成/再利用性のあるもの • 個人的にRAMLを使ったことがあったが • CodeGeneratorがPythonに対応している • Open API Initiativeが立ち上がりSwaggerを推し始めた
  • 10. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swaggerを採用した経緯 ③使ってみる 10 • 簡単なSwaggerSpecをYAMLで作成 /projects/{project_id}: get: summary: プロジェクト取得 tags: - Project parameters: - name: project_id in: path description: プロジェクトID required: true type: integer responses: 200: description: プロジェクト schema: $ref: '#/definitions/project' project: type: object properties: id: type: integer description: プロジェクトID user_id: type: integer description: ユーザID ... paths: definitions:
  • 11. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swaggerを採用した経緯 ③使ってみる 11 • CodeGeneratorでPythonクライアントを生成 • definitionで定義したオブジェクトをそのままJSON化 • レスポンスはdefinitionsのオブジェクトで受け取れる import swagger_client as sw project_api = sw.ProjectApi(api_client=api) project = project_api.projects_project_id_get(project_id) print(type(project)) print(type(project.end_time)) <class 'swagger_client.models.project.Project'> <class 'datetime.datetime'>
  • 12. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swaggerを採用した経緯 ③使ってみる 12 • JSON Web Tokenを利用した認証 ApiKey: type: apiKey name: Authorization in: header securityDefinitions: /authenticate: post: summary: 認証API tags: - Auth parameters: - name: authenticate in: body required: true schema: $ref: '#/definitions/authenticate' responses: 200: description: トークン schema: $ref: '#/definitions/token' paths: authenticate: type: object properties: key: type: string description: 認証キー secret: type: string format: string description: 認証シークレット token: type: object properties: access_token: type: string description: 認証トークン definitions:
  • 13. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swaggerを採用した経緯 ③使ってみる 13 • JSON Web Tokenを使用した認証を採用 import swagger_client as sw auth_api = sw.AuthApi(sw.ApiClient(API_HOST)) auth = sw.Authenticate(key='user',secret='hogehoge') resp = auth_api.authenticate_post(authenticate=auth) api = sw.ApiClient(host=API_HOST, header_name='Authorization', header_value='JWT %s' % resp.access_token) project_api = sw.ProjectApi(api_client=api) project = project_api.projects_project_id_get(project_id) curl-X POST -d '{"key":"user","secret":"hogehoge"}' http://${API_HOST}/authenticate curl -X GET -H "Authorization: JWT ${JWT_TOKEN}" http://${API_HOST}/projects/${PROJECT_ID}
  • 14. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 WIZYにおけるSwagger 14 • Swaggerの仕様バージョン2.0 • 開発言語はPython • API側のフレームワークはFlask • APIの認証はFlask-JWTを使用したJWTトークン認証 • 2017年2月時点でAPI数は 63 (pathベースで38)
  • 15. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swagger Code Generator 15 YAMLで仕様を管理。YAMLから生成 https://github.com/swagger-api/swagger-codegen html python /projects/{project_id}: get: summary: プロジェクト取得 tags: - Project parameters: - name: project_id in: path description: プロジェクトID required: true type: integer responses: 200: description: プロジェクト schema: $ref: '#/definitions/project'
  • 16. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 WIZYの開発手法 16 1. 機能要件に従ってテーブル定義等の仕様を決める 2. フロントの要件に従ってAPI仕様をSwagger Specで書く 3. Swagger Specに従ってAPIを実装 4. Swagger Code Generatorでクライアントを生成 5. 生成したクライアントを使用してフロントのアプリを実装 web api client cache database spec
  • 17. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swaggerを使って良かったこと(開発) 17 APIの仕様レビューがYAMLファイル上で行える • diffで比較できるのでレビュー漏れが無い • JSONよりYAMLの方が書き方に個人差が出ないのでオススメ
  • 18. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swaggerを使って良かったこと(開発) 18 書式が決まっているのでAPIに必要な情報について曖昧さがない 実装前にある程度挙動を確認できるので手戻りが防げる APIの開発者とクライアント側の開発者が並行で作業できる 他との矛盾/命名規則の違反などを発見しやすい 他のpaths/definitionsを再利用できる /projects/{project_id}: get: summary: プロジェクト取得 tags: - Project parameters: - name: project_id in: path description: プロジェクトID required: true type: integer responses: 200: description: プロジェクト schema: $ref: '#/definitions/project'
  • 19. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swaggerを使って良かったこと(開発) 19 そのままコードになるのでレビューした内容とコードに差がない ドキュメントにもなるのでコードとドキュメントの乖離がない
  • 20. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swaggerを使って良かったこと(運用) 20 Web/APIを分離してバージョン管理しやすくなる SwaggerSpecに変更がある場合のみAPI仕様に変更がある swaggerのtags webのtags apiのtags× ×
  • 21. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swaggerを使って良かったこと(運用) 21 Blue-Green Deploymentにより無停止でバージョンアップ可能に 本番環境ELB API-ELB API v1.0 API v1.1ステージ環境ELB Web v2.0 Web v2.1 しかしAPIに互換性がない場合は並行稼動できない…
  • 22. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swaggerを使って良かったこと(運用) 22 APIのインタフェース仕様の変更が一目でわかるので 前のバージョンと互換性があるかの判断が簡単になる → pathの追加だけであれば問題ない。など 差分がない場合は仕様に変更がないことが保証されるが ソート順などは表現されないのでインタフェース以外の 修正は個別で判断する必要がある
  • 23. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 「operationId」の定義は必要か 23 https://apihandyman.io/writing-openapi-swagger-specification-tutorial-part-7-documentation/ paths: /persons: parameters: - $ref: '#/parameters/userAgent' get: summary: Gets some persons description: Returns a list containing all persons. The list supports paging. operationId: searchUsers [main] WARN io.swagger.codegen.DefaultCodegen - Empty operationId found for path: post /projects/{project_id}/items. Renamed to auto-generated operationId: projectsProject_idItemsPost 「operationId」はAPI単位にユニークな名前をつけるもの 書かないとCodeGeneratorに怒られます。。
  • 24. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 Swaggerの使い方について今後の課題① 24 # operationId未指定の場合 projects = project_api.projects_get(limit=10) # operationIdを指定した場合 projects = project_api.search_projects(limit=10) ルールを作るとしたら • 「GET /XXXs」=>「search_XXXs」 • 「GET /XXXs/{YYY}」 => 「get_XXX_by_YYY」 • 変えたい場合もある。POST/PUT場合はどうする。。? APIのpathとは別でルールを考える必要がありそう Pythonクライアントの場合は自動でメソッド名が決まる
  • 25. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 25 • OpenAPI 3.0 への移行 • 全体の99%を占めるpaths/definitionsに大きな変更なし? • definitionsはcomponentsの配下に移動 • pathsはそのままに見えます… https://www.openapis.org/news/blogs/2016/10/tdc-structural-improvements-explaining-30-spec-part-2 今後の課題(3.0対応)
  • 26. © Recochoku Co.,Ltd. Proprietary and Confidential 2017/02/07 26 ご静聴ありがとうございました!