SlideShare a Scribd company logo
Copyright © M&A Cloud All rights reserved.
PHPerKaigi2021 / LT
Akito Tsukahara
Web API開発をするなら、
ドキュメントは自動生成にしておこう!
1
Copyright © M&A Cloud All rights reserved.
自己紹介
株式会社M&Aクラウド
塚原 彰仁
   AkitoTsukahara
AkitoTsukahara
近況:先月転職しました!
2
3
事業売却と資金調達で次のステージへ

業界初の買い手の顔が見えるM&Aプラットフォーム

Copyright © M&A Cloud All rights reserved.
突然ですが・・・
突然ですが・・・
APIドキュメント用意するのって、
大変じゃないですか?
4
Copyright © M&A Cloud All rights reserved.
大変なんだよ、これが・・・
・そもそもAPIドキュメント書いている時間ない
・ある時期からドキュメントが更新されていない
・先にドキュメントしたらと、
 まずは動くものが欲しいと言われる
5
大変なんだよ、これが・・・
Copyright © M&A Cloud All rights reserved.
Swaggerを使ってみたお話です
6
このLTは解決策の1つとして、
Swaggerを使ってみたお話です
Copyright © M&A Cloud All rights reserved.
Swaggerとは?
SwaggerとはRESTful APIのドキュメントや、サーバ、クライアントコード、エ
ディタ、またそれらを扱うための仕様などを提供するフレームワークです。
(引用:Qiita)
7
Swaggerとは?
Copyright © M&A Cloud All rights reserved.
こんな感じになります
8
swagger UIの図を載せる
元のコードの図を載せる
コードからドキュメントができる
Copyright © M&A Cloud All rights reserved.
Swaggerとは?
9
お!良さげなのでは?
Copyright © M&A Cloud All rights reserved.
このLTで話すこと・話さないこと
10
このLTで話すこと・話さないこと
話すこと
・Swagger導入で解決できること
・導入してみて感じたこと
話さないこと
・REST APIの実装方法
・Swagger導入に必要な設定方法
→この辺りの話はQiitaで記事にしておきました!
Copyright © M&A Cloud All rights reserved.
ざっくり解説の前に
11
ざっくり解説の前に
・紹介するサンプルは CakePHP4で作られています
・サンプル中のREST APIはCakePHPクックブックを参考にしています
・Dockerでの動作確認ができる状態を目指してます
・サンプルのコードは以下で公開中
 https://github.com/AkitoTsukahara/swagger-cakephp
Copyright © M&A Cloud All rights reserved.
できるようになること
12
できるようになること
1.コードからドキュメント生成
2.クライアント化
3.モックサーバー
Copyright © M&A Cloud All rights reserved.
ドキュメントができる流れ
13
ドキュメントができる流れ
swagger-php swagger-ui
コード中のアノテー
ションからJSONを生
成
JSONファイルを
ドキュメントに変換
code JSON document
Copyright © M&A Cloud All rights reserved.
composer require --dev zircote/swagger-php
導入手順1
scriptにコマンドを登録しておくと、開発中の実行が楽になるのでおすすめ!
14
Swaggerのインストール
Composer scriptsにコマンドを追加
console
composer.json
"openapi": "openapi --output openapi.json --format y src/Controller/Api/"
composer.json
Copyright © M&A Cloud All rights reserved.
<?php
declare(strict_types=1);
/**
* @OAInfo(
* title="CakePHP Swagger",
* description="CakePHP Swagger LT API
Automatically generate documental",
* version="1.0.0",
* )
*/
/**
* @OAServer(
* description="localhost",
* url="http://localhost"
* )
*/
導入手順2
15
共通ドキュメント APIドキュメント
~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* Index method
*
* @OAGet(
* path="/api/recipe/index.json",
* tags={"Recipe"},
* summary="レシピをすべて取得する
",
* @OAResponse(
* response=200,
* description="OK",
* @OAJsonContent(
~~~~~~~~~~~~~~~~~~~~~~~~~~~
/src/Controller/Api/swagger.php(共通化パーツはここ) src/Controller/Api/RecipeController.php
参考
CakePHP 4.x Strawberry Cookbook REST
Copyright © M&A Cloud All rights reserved.
swagger-ui:
image: swaggerapi/swagger-ui
container_name: swagger_cakephp-ui
ports:
- 8002:8080
volumes:
- ./server:/tmp
environment:
SWAGGER_JSON: /tmp/openapi.json
composer openapi
導入手順3
16
ドキュメントの作成
Swagger UIのDockerイメージを追加
console
docker-compose.yml
Copyright © M&A Cloud All rights reserved.
Swagger UIを開いてみると
17
swagger UIの図を載せる
元のコードの図を載せる
Swagger UIを開いてみると
Copyright © M&A Cloud All rights reserved.
クライアント化
Swagger UIを利用するとドキュメントに
合わせたパラメータでリクエストを送信して結果を
確認することができます。
18
クライアント化
Copyright © M&A Cloud All rights reserved.
モックサーバー
Swagger Editorを利用するとドキュメント同じJSONを
返すモックサーバーを作成できます。 



プロトタイプ時でサーバー実装が完了していない場
合でも、モックサーバーがあればフロントエンドも同
時開発可能になります。 

19
モックサーバー
Copyright © M&A Cloud All rights reserved.
生成したモックサーバーを      することで、利用できる様になります。
Swagger Editor からモックサーバーを生成
20
Swagger Editor からモックサーバーを生成
yarn start
Copyright © M&A Cloud All rights reserved.
Swagger Editorのイメージ映像
21
Copyright © M&A Cloud All rights reserved.
社内で共有したところ
22
社内で共有してみたところ
コード中にドキュメントがあるから、
変更時のドキュメント更新を忘れなくなりそう
実際に動かして、リクエストと
レスポンス内容を確認できるのが便利!
Copyright © M&A Cloud All rights reserved.
こんな声もありました
23
アノテーション書くの大変じゃない...?
Copyright © M&A Cloud All rights reserved.
この言葉が出てきたらむしろ成功
この言葉が出てきたらむしろ成功
Copyright © M&A Cloud All rights reserved.
一番少ない設定ならこれだけ!完璧な状態からのギャップを
25
一番少ない設定ならこれだけ!完璧な状態からのギャップを
/**
* @OAInfo(
* title="CakePHP Swagger",
* version="1.0.0",
* )
*/
/**
* view method
*
* @OAGet(
* path="/api/recipe/view/{id}.json",
* tags={“Recipe”}
* @OAParameter(
* name="id",
* in="path",
* required=true,
* @OASchema(type="string"),
* ),
* @OAResponse(
* response=200,
* description="OK"
* ),
* )
/src/Controller/Api/swagger.php
src/Controller/Api/RecipeController.php
最低限必要な項目
・info
 ・title
 ・version
・paths
 ・parameter
 ・response
Copyright © M&A Cloud All rights reserved.
同じスキーマは共通化する
26
同じスキーマは共通化する
* @OAProperty(
* property="id",
* type="string",
* description="レシピID",
* ),
* @OAProperty(
* property="title",
* type="string",
* description="レシピ名",
* ),
* @OAProperty(
* property="description",
* type="string",
* description="レシピ内容",
* ),
src/Controller/Api/RecipeController.php
・共通化したいしたいスキーマオブジェクトを 
 
 共通ファイルに定義する
・呼び出したい箇所で
$refを使い、
 共通化したオブジェクトを呼び出す
Copyright © M&A Cloud All rights reserved.
同じスキーマは共通化する
* @OASchema(
* schema="recipe_object",
* type="object",
* @OAProperty(
* property="id",
* type="string",
* description="レシピID",
* ),
* @OAProperty(
* property="title",
* type="string",
* description="レシピ名",
* ),
* @OAProperty(
* property="description",
* type="string",
* description="レシピ内容",
* )
* )
*/ 27
例1)レスポンスのオブジェクト
/src/Controller/Api/swagger.php
/ **
* @OAResponse(
* type="object",
* @OAJsonContent(
ref="#/components/schemas/recipe_object")
* ),
* ),
src/Controller/Api/RecipeController.php
Copyright © M&A Cloud All rights reserved.
同じスキーマは共通化する
28
例2)エラーレスポンス
/ **
* @OASchema(
* schema="default_error_response_content",
* type="object",
* @OAProperty(
* property="message",
* type="string",
* description="エラーメッセージ",
* ),
* example={
* "message"="予期しないエラーです
"
* },
* )
*/
/src/Controller/Api/swagger.php
/ **
* @OAResponse(
* response="default",
* description="Unexpected Error",
* @OAJsonContent(
ref="#/components/schemas/
default_error_response_content")
* ),
* ),
src/Controller/Api/RecipeController.php
Copyright © M&A Cloud All rights reserved.
コピペ用のデフォルトアノテーションを用意する
29
コピペ用のデフォルトアノテーションを用意しておく
@OAResponse(response=200, description="OK")
@OAResponse(response=201, description="Created")
@OAResponse(response=202, description="Accepted")
@OAResponse(response=204, description="No Content")
@OAResponse(response=207, description="Multi-Status")
@OAResponse(response=304, description="Not Modified")
@OAResponse(response=400, description="Bad Request")
@OAResponse(response=401, description="Unauthorized")
@OAResponse(response=403, description="Forbidden")
@OAResponse(response=405, description="Method Not Allowed")
@OAResponse(response=500, description="Internal Server Error")
@OAResponse(response=503, description="Service Unavailable")
レスポンス一覧
こちらも参考に
swagger-php で書く Annotation テンプレ3種
Copyright © M&A Cloud All rights reserved.
まとめ
・コードからドキュメントを生成できる開発体験は素敵でした!
・先にドキュメントを用意しておけば、
 フロントエンドと同時進行で開発できるのも素敵!
・運用ルールはチームで話し合いながら、決めていくのが良さそう
・最初は大変だけど、慣れれば簡単だよ
30
使ってみた感想
Copyright © M&A Cloud All rights reserved.
細かい部分はこっちを見てね!
Swagger導入をまとめた記事
今回のLTで紹介した実装方法の詳細記事
Web API開発をするなら、ドキュメントは自動生成にしておこう!(CakePHP編)
参考にさせていただいた記事
APIドキュメントを支える技術
CakePHP4 で Swagger3 を使って API ドキュメントを作る
OpenAPI (Swagger) の基本的なあれこれ
31
Copyright © M&A Cloud All rights reserved.
ありがとうございました!
32

More Related Content

PDF
インフラエンジニアの綺麗で優しい手順書の書き方
KEY
やはりお前らのMVCは間違っている
PPTX
世界一わかりやすいClean Architecture
PDF
コンテナにおけるパフォーマンス調査でハマった話
PDF
MagicOnion入門
PPTX
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
PDF
例外設計における大罪
PDF
開発速度が速い #とは(LayerX社内資料)
インフラエンジニアの綺麗で優しい手順書の書き方
やはりお前らのMVCは間違っている
世界一わかりやすいClean Architecture
コンテナにおけるパフォーマンス調査でハマった話
MagicOnion入門
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
例外設計における大罪
開発速度が速い #とは(LayerX社内資料)

What's hot (20)

PDF
Dockerからcontainerdへの移行
PPTX
分散システムについて語らせてくれ
PDF
DockerとPodmanの比較
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
PDF
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
PDF
TLS, HTTP/2演習
PDF
Dockerfileを改善するためのBest Practice 2019年版
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PDF
ソフトウェアにおける 複雑さとは何なのか?
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
PDF
Pythonによる黒魔術入門
PDF
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
PDF
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
PDF
Tackling Complexity
PDF
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
PDF
オブジェクト指向エクササイズのススメ
Dockerからcontainerdへの移行
分散システムについて語らせてくれ
DockerとPodmanの比較
新入社員のための大規模ゲーム開発入門 サーバサイド編
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
【Unite Tokyo 2019】Understanding C# Struct All Things
TLS, HTTP/2演習
Dockerfileを改善するためのBest Practice 2019年版
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
コンテナの作り方「Dockerは裏方で何をしているのか?」
ソフトウェアにおける 複雑さとは何なのか?
強いて言えば「集約どう実装するのかな、を考える」な話
Pythonによる黒魔術入門
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Tackling Complexity
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
オブジェクト指向エクササイズのススメ
Ad

Similar to Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_ (20)

PDF
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
PDF
SwaggerとAPIのデザイン
PDF
Swaggerを利用した新規サービス開発
PPTX
Swagger jjug ccc 2018 spring
PPTX
Automatic api document generation 101
PDF
Swaggerで始めるモデルファーストなAPI開発
PDF
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
PPTX
「Swagger」によるAPI仕様の管理と標準化
PDF
カラーミーAPIドキュメントの今後
PDF
Swaggerのさわりだけ
PDF
Swagger 入門
PPTX
Fun tech14-alibaba cloud api gateway-swagger
PDF
こんなに使える!今どきのAPIドキュメンテーションツール
PDF
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
PDF
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
PDF
Symfony2#5 LT
PDF
「新しい」を生み出すためのWebアプリ開発とその周辺
PDF
Swaggerでのapi開発よもやま話
PDF
10分でわかるFuelPHP @ 2011/12
PDF
Apiドキュメンテーションツールを使いこなす【api blueprint編】
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
SwaggerとAPIのデザイン
Swaggerを利用した新規サービス開発
Swagger jjug ccc 2018 spring
Automatic api document generation 101
Swaggerで始めるモデルファーストなAPI開発
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
「Swagger」によるAPI仕様の管理と標準化
カラーミーAPIドキュメントの今後
Swaggerのさわりだけ
Swagger 入門
Fun tech14-alibaba cloud api gateway-swagger
こんなに使える!今どきのAPIドキュメンテーションツール
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Symfony2#5 LT
「新しい」を生み出すためのWebアプリ開発とその周辺
Swaggerでのapi開発よもやま話
10分でわかるFuelPHP @ 2011/12
Apiドキュメンテーションツールを使いこなす【api blueprint編】
Ad

Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_

  • 1. Copyright © M&A Cloud All rights reserved. PHPerKaigi2021 / LT Akito Tsukahara Web API開発をするなら、 ドキュメントは自動生成にしておこう! 1
  • 2. Copyright © M&A Cloud All rights reserved. 自己紹介 株式会社M&Aクラウド 塚原 彰仁    AkitoTsukahara AkitoTsukahara 近況:先月転職しました! 2
  • 4. Copyright © M&A Cloud All rights reserved. 突然ですが・・・ 突然ですが・・・ APIドキュメント用意するのって、 大変じゃないですか? 4
  • 5. Copyright © M&A Cloud All rights reserved. 大変なんだよ、これが・・・ ・そもそもAPIドキュメント書いている時間ない ・ある時期からドキュメントが更新されていない ・先にドキュメントしたらと、  まずは動くものが欲しいと言われる 5 大変なんだよ、これが・・・
  • 6. Copyright © M&A Cloud All rights reserved. Swaggerを使ってみたお話です 6 このLTは解決策の1つとして、 Swaggerを使ってみたお話です
  • 7. Copyright © M&A Cloud All rights reserved. Swaggerとは? SwaggerとはRESTful APIのドキュメントや、サーバ、クライアントコード、エ ディタ、またそれらを扱うための仕様などを提供するフレームワークです。 (引用:Qiita) 7 Swaggerとは?
  • 8. Copyright © M&A Cloud All rights reserved. こんな感じになります 8 swagger UIの図を載せる 元のコードの図を載せる コードからドキュメントができる
  • 9. Copyright © M&A Cloud All rights reserved. Swaggerとは? 9 お!良さげなのでは?
  • 10. Copyright © M&A Cloud All rights reserved. このLTで話すこと・話さないこと 10 このLTで話すこと・話さないこと 話すこと ・Swagger導入で解決できること ・導入してみて感じたこと 話さないこと ・REST APIの実装方法 ・Swagger導入に必要な設定方法 →この辺りの話はQiitaで記事にしておきました!
  • 11. Copyright © M&A Cloud All rights reserved. ざっくり解説の前に 11 ざっくり解説の前に ・紹介するサンプルは CakePHP4で作られています ・サンプル中のREST APIはCakePHPクックブックを参考にしています ・Dockerでの動作確認ができる状態を目指してます ・サンプルのコードは以下で公開中  https://github.com/AkitoTsukahara/swagger-cakephp
  • 12. Copyright © M&A Cloud All rights reserved. できるようになること 12 できるようになること 1.コードからドキュメント生成 2.クライアント化 3.モックサーバー
  • 13. Copyright © M&A Cloud All rights reserved. ドキュメントができる流れ 13 ドキュメントができる流れ swagger-php swagger-ui コード中のアノテー ションからJSONを生 成 JSONファイルを ドキュメントに変換 code JSON document
  • 14. Copyright © M&A Cloud All rights reserved. composer require --dev zircote/swagger-php 導入手順1 scriptにコマンドを登録しておくと、開発中の実行が楽になるのでおすすめ! 14 Swaggerのインストール Composer scriptsにコマンドを追加 console composer.json "openapi": "openapi --output openapi.json --format y src/Controller/Api/" composer.json
  • 15. Copyright © M&A Cloud All rights reserved. <?php declare(strict_types=1); /** * @OAInfo( * title="CakePHP Swagger", * description="CakePHP Swagger LT API Automatically generate documental", * version="1.0.0", * ) */ /** * @OAServer( * description="localhost", * url="http://localhost" * ) */ 導入手順2 15 共通ドキュメント APIドキュメント ~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * Index method * * @OAGet( * path="/api/recipe/index.json", * tags={"Recipe"}, * summary="レシピをすべて取得する ", * @OAResponse( * response=200, * description="OK", * @OAJsonContent( ~~~~~~~~~~~~~~~~~~~~~~~~~~~ /src/Controller/Api/swagger.php(共通化パーツはここ) src/Controller/Api/RecipeController.php 参考 CakePHP 4.x Strawberry Cookbook REST
  • 16. Copyright © M&A Cloud All rights reserved. swagger-ui: image: swaggerapi/swagger-ui container_name: swagger_cakephp-ui ports: - 8002:8080 volumes: - ./server:/tmp environment: SWAGGER_JSON: /tmp/openapi.json composer openapi 導入手順3 16 ドキュメントの作成 Swagger UIのDockerイメージを追加 console docker-compose.yml
  • 17. Copyright © M&A Cloud All rights reserved. Swagger UIを開いてみると 17 swagger UIの図を載せる 元のコードの図を載せる Swagger UIを開いてみると
  • 18. Copyright © M&A Cloud All rights reserved. クライアント化 Swagger UIを利用するとドキュメントに 合わせたパラメータでリクエストを送信して結果を 確認することができます。 18 クライアント化
  • 19. Copyright © M&A Cloud All rights reserved. モックサーバー Swagger Editorを利用するとドキュメント同じJSONを 返すモックサーバーを作成できます。 
 
 プロトタイプ時でサーバー実装が完了していない場 合でも、モックサーバーがあればフロントエンドも同 時開発可能になります。 
 19 モックサーバー
  • 20. Copyright © M&A Cloud All rights reserved. 生成したモックサーバーを      することで、利用できる様になります。 Swagger Editor からモックサーバーを生成 20 Swagger Editor からモックサーバーを生成 yarn start
  • 21. Copyright © M&A Cloud All rights reserved. Swagger Editorのイメージ映像 21
  • 22. Copyright © M&A Cloud All rights reserved. 社内で共有したところ 22 社内で共有してみたところ コード中にドキュメントがあるから、 変更時のドキュメント更新を忘れなくなりそう 実際に動かして、リクエストと レスポンス内容を確認できるのが便利!
  • 23. Copyright © M&A Cloud All rights reserved. こんな声もありました 23 アノテーション書くの大変じゃない...?
  • 24. Copyright © M&A Cloud All rights reserved. この言葉が出てきたらむしろ成功 この言葉が出てきたらむしろ成功
  • 25. Copyright © M&A Cloud All rights reserved. 一番少ない設定ならこれだけ!完璧な状態からのギャップを 25 一番少ない設定ならこれだけ!完璧な状態からのギャップを /** * @OAInfo( * title="CakePHP Swagger", * version="1.0.0", * ) */ /** * view method * * @OAGet( * path="/api/recipe/view/{id}.json", * tags={“Recipe”} * @OAParameter( * name="id", * in="path", * required=true, * @OASchema(type="string"), * ), * @OAResponse( * response=200, * description="OK" * ), * ) /src/Controller/Api/swagger.php src/Controller/Api/RecipeController.php 最低限必要な項目 ・info  ・title  ・version ・paths  ・parameter  ・response
  • 26. Copyright © M&A Cloud All rights reserved. 同じスキーマは共通化する 26 同じスキーマは共通化する * @OAProperty( * property="id", * type="string", * description="レシピID", * ), * @OAProperty( * property="title", * type="string", * description="レシピ名", * ), * @OAProperty( * property="description", * type="string", * description="レシピ内容", * ), src/Controller/Api/RecipeController.php ・共通化したいしたいスキーマオブジェクトを     共通ファイルに定義する ・呼び出したい箇所で $refを使い、  共通化したオブジェクトを呼び出す
  • 27. Copyright © M&A Cloud All rights reserved. 同じスキーマは共通化する * @OASchema( * schema="recipe_object", * type="object", * @OAProperty( * property="id", * type="string", * description="レシピID", * ), * @OAProperty( * property="title", * type="string", * description="レシピ名", * ), * @OAProperty( * property="description", * type="string", * description="レシピ内容", * ) * ) */ 27 例1)レスポンスのオブジェクト /src/Controller/Api/swagger.php / ** * @OAResponse( * type="object", * @OAJsonContent( ref="#/components/schemas/recipe_object") * ), * ), src/Controller/Api/RecipeController.php
  • 28. Copyright © M&A Cloud All rights reserved. 同じスキーマは共通化する 28 例2)エラーレスポンス / ** * @OASchema( * schema="default_error_response_content", * type="object", * @OAProperty( * property="message", * type="string", * description="エラーメッセージ", * ), * example={ * "message"="予期しないエラーです " * }, * ) */ /src/Controller/Api/swagger.php / ** * @OAResponse( * response="default", * description="Unexpected Error", * @OAJsonContent( ref="#/components/schemas/ default_error_response_content") * ), * ), src/Controller/Api/RecipeController.php
  • 29. Copyright © M&A Cloud All rights reserved. コピペ用のデフォルトアノテーションを用意する 29 コピペ用のデフォルトアノテーションを用意しておく @OAResponse(response=200, description="OK") @OAResponse(response=201, description="Created") @OAResponse(response=202, description="Accepted") @OAResponse(response=204, description="No Content") @OAResponse(response=207, description="Multi-Status") @OAResponse(response=304, description="Not Modified") @OAResponse(response=400, description="Bad Request") @OAResponse(response=401, description="Unauthorized") @OAResponse(response=403, description="Forbidden") @OAResponse(response=405, description="Method Not Allowed") @OAResponse(response=500, description="Internal Server Error") @OAResponse(response=503, description="Service Unavailable") レスポンス一覧 こちらも参考に swagger-php で書く Annotation テンプレ3種
  • 30. Copyright © M&A Cloud All rights reserved. まとめ ・コードからドキュメントを生成できる開発体験は素敵でした! ・先にドキュメントを用意しておけば、  フロントエンドと同時進行で開発できるのも素敵! ・運用ルールはチームで話し合いながら、決めていくのが良さそう ・最初は大変だけど、慣れれば簡単だよ 30 使ってみた感想
  • 31. Copyright © M&A Cloud All rights reserved. 細かい部分はこっちを見てね! Swagger導入をまとめた記事 今回のLTで紹介した実装方法の詳細記事 Web API開発をするなら、ドキュメントは自動生成にしておこう!(CakePHP編) 参考にさせていただいた記事 APIドキュメントを支える技術 CakePHP4 で Swagger3 を使って API ドキュメントを作る OpenAPI (Swagger) の基本的なあれこれ 31
  • 32. Copyright © M&A Cloud All rights reserved. ありがとうございました! 32