Slide 1

Slide 1 text

OpenAPIの導入による CAMのSchema 駆動開発 実例3選 松本 涼平

Slide 2

Slide 2 text

Agenda 1. OpenAPIとは 2. OpenAPIの導入による Schema駆動開発 実例3選 a. レガシーサービスへの適応編 b. クライアントライブラリ自動生成編 c. OSS Vironにおける管理画面への活用編 3. まとめ

Slide 3

Slide 3 text

{ "name": "松本 涼平", "company": "株式会社CAM", "since": "fourth year", "work": "BackendEngineer💻", "skills": ["Go", "Node.js", "Java"], "sports": "Futsal⚽", "latestHobby": "Billiards🎱" } Introduction

Slide 4

Slide 4 text

OpenAPIとは

Slide 5

Slide 5 text

OpenAPIとは HTTP API定義における標準化を 目的に作成されたAPIの仕様定義書 プログラミング言語に依存しない インターフェイス定義可能 => サービスの機能の把握しやすい

Slide 6

Slide 6 text

OpenAPIを用いてできること - Documentation - Data Validators - SDK Generators - Mock Servers - Security etc… OpenAPIとは

Slide 7

Slide 7 text

a. レガシーサービスへの適応編 b. クライアントライブラリ自動生成編 c. OSS Vironにおける管理画面への活用編 OpenAPIの導入によるSchema駆動開発 実例3選

Slide 8

Slide 8 text

a. レガシーサービスへの適応編 b. クライアントライブラリ自動生成編 c. OSS Vironにおける管理画面への活用編 OpenAPIの導入によるSchema駆動開発 実例3選

Slide 9

Slide 9 text

1. 仕様書と実装が乖離している 2. バリデーションが未実装 レガシーなAPI とは

Slide 10

Slide 10 text

1. 仕様書と実装が乖離している 2. バリデーションが未実装 レガシーなAPI とは

Slide 11

Slide 11 text

API仕様書 { "name": "matsumoto", "work": "BackendEngineer", "nickname": "matsuhei" } 実際の返却値 { "name": "matsumoto", "work": "BackendEngineer" } ⚠ nickname が 存在しない!? 仕様書と実装が乖離している

Slide 12

Slide 12 text

API仕様書 { "name": "matsumoto", "work": "BackendEngineer", "nickname": "matsuhei" } 実際の返却値 { "name": "matsumoto", "work": "BackendEngineer" } ⚠ nickname が 存在しない!? 仕様書と実装が乖離している ⚠障害や開発遅延の原因に…

Slide 13

Slide 13 text

1. 仕様書と実装が乖離している 2. バリデーションが未実装 レガシーなAPI とは

Slide 14

Slide 14 text

⚠ ageの型が違 う!? 理想の requestBody { "name": "matsumoto", "work": "BackendEngineer", "age": 26 } 実際の requestBody { "name": "matsumoto", "work": "BackendEngineer", "age": "26歳" } バリデーションが未実装

Slide 15

Slide 15 text

⚠ ageの型が違 う!? 理想の requestBody { "name": "matsumoto", "work": "BackendEngineer", "age": 26 } 実際の requestBody { "name": "matsumoto", "work": "BackendEngineer", "age": "26歳" } バリデーションが未実装 ⚠障害や開発遅延の原因に…

Slide 16

Slide 16 text

1. 仕様書と実装が乖離している 2. バリデーションが未実装 レガシーなAPI へ利用するOpenAPIを用いてできること Documentation✨ Data Validators✨

Slide 17

Slide 17 text

OpenAPIで仕様書を記述することでDocumentation作成 🎉 レガシー環境で抱えていた問題の解決

Slide 18

Slide 18 text

OpenAPIで定義したSchemaでValidationを実現 🎉 Schemaを見るため、仕様書の乖離が発生しない✨ レガシー環境で抱えていた問題の解決 Data Validators Middlewares 形式が違うrequestBody validation error

Slide 19

Slide 19 text

1. 既存のAPIが多く短期間ですべてを検証しきれない 2. 過去に利用したが今使っていないAPIが存在する そのまま導入すると…? 実際にレガシー環境に導入する上で 困ったこと ⚠API検証漏れ ⚠不要なAPIが 消せない

Slide 20

Slide 20 text

v1 → v2 実際にレガシー環境に導入する上で 困ったこと 移管時に不要なAPI を確認可能 APIの精査が容易🎉 スモールリプレイス により 事故リスクの軽減🎉 スモールリプレイスを計画🚧 APIをV1からV2へ V2側にMiddlewareを実装で解消

Slide 21

Slide 21 text

a. レガシーサービスへの適応編 b. クライアントライブラリ自動生成編 c. OSS Vironにおける管理画面への活用編 OpenAPIの導入によるSchema駆動開発 実例3選

Slide 22

Slide 22 text

クライアントからの呼び出しを都度実装 クライアントからの呼び出し

Slide 23

Slide 23 text

クライアントからの呼び出しをOpenAPIを用いて自動生成 クライアントからの呼び出し

Slide 24

Slide 24 text

OpenAPI準拠にクライアントライブラリの生成が可能 openapi-generator 自動生成

Slide 25

Slide 25 text

クライアント側が都度実装する必要がない 管理コスト及び開発量を軽減・効率化が可能🎉 クライアントライブラリ自動生成 流れ

Slide 26

Slide 26 text

Contributor 🎉 contribute

Slide 27

Slide 27 text

a. レガシーサービスへの適応編 b. クライアントライブラリ自動生成編 c. OSS Vironにおける管理画面への活用編 OpenAPIの導入によるSchema駆動開発 実例3選

Slide 28

Slide 28 text

Viron とは

Slide 29

Slide 29 text

CAM製OSS Viron - 管理画面 for OpenAPI- Viron

Slide 30

Slide 30 text

ノーコードでのフロントエンドの実装が可能 フロントエンドの開発が必要なくなり効率化🎉 Viron

Slide 31

Slide 31 text

VironDashボードにて複数サービスの管理画面への導線が作成可能🎉 Viron

Slide 32

Slide 32 text

TechBlog https://cam-inc.co.jp/p/techblog/640829048905270209

Slide 33

Slide 33 text

OpenAPIを用いると? validation generator viron まとめ ● Schema駆動開発により 仕様把握が容易 🎉 ● 様々な面において効率化が 可能 🎉

Slide 34

Slide 34 text

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