Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OpenAPI×LaravelでAPI開発を格段に便利にする方法
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ゆるゆる
October 03, 2021
Programming
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OpenAPI×LaravelでAPI開発を格段に便利にする方法
ゆるゆる
October 03, 2021
More Decks by ゆるゆる
See All by ゆるゆる
改行には気をつけよう
sunyryr
0
79
Docker bake(とCache)でCI/CDを改善する
sunyryr
0
690
WebAPI の設計
sunyryr
0
91
OpenAPIことはじめ
sunyryr
0
150
server side swift - codable
sunyryr
0
280
iOSアプリだけじゃないSwift
sunyryr
0
170
Other Decks in Programming
See All in Programming
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
670
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
1
480
MIZARU@SPAJAM2026 第二回予選
1901drama
0
110
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
430
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
260
Oxlintはいいぞ(続)
yug1224
1
550
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
830
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.8k
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
2
1.5k
Hono + Inertia + React で LP を構築した話
oukayuka
2
210
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
53
35k
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The Pragmatic Product Professional
lauravandoore
37
7.4k
The SEO identity crisis: Don't let AI make you average
varn
0
550
Exploring anti-patterns in Rails
aemeredith
3
490
Discover your Explorer Soul
emna__ayadi
2
1.3k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Writing Fast Ruby
sferik
630
63k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Become a Pro
speakerdeck
PRO
31
6.2k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
490
Transcript
OpenAPI × LaravelͰ API։ൃΛ֨ஈʹศརʹ͢Δํ๏ PHPΧϯϑΝϨϯε 2021/10/03 @sun-yryr / גࣜձࣾΏΊΈ
ΏΔΏΔ / Taiyo Minagawa w גࣜձࣾΏΊΈ৽ଔೖࣾ w 4FSWFSTJEF&OHJOFFSͬͯ·͢ɻ ܦྺ ͖ͳ͜ͱ
w 4XJGU 4FSWFSTJEF $*$% w 75VCFS sun-yryr taittide taittide sunyryr ࣗݾհ NOW→
ձࣾհ NOW→
ձࣾհ NOW→
ͪͳΈʹ… دΓಓ NOW→
࣍ • OpenAPI༷ॻΛʮ࡞Δʯ • ࣗಈੜ͢Δ • OpenAPI༷ॻΛʮ͏ʯ • E2EςετͷAssertʹ͏ •
FormRequestͷΘΓʹ͏ • Ҋ݅ͰͬͯΈͨײ
OpenAPI༷ॻΛ””ࣗಈੜ͢Δ
ࣗಈੜ͢Δ NOW→
ར༻͢ΔϥΠϒϥϦ • laravel-openapi Φϓγϣϯͱͯ͠ • annotations ࣗಈੜ͢Δ NOW→
vyuldashev/laravel-openapi • LaravelͷRouteใͱɺphpdocAttributesΛͬͯOpenAPI ༷ॻΛ࡞͢ΔϥΠϒϥϦ ࣗಈੜ͢Δ NOW→
LaravelCollective/annotations • Laravelͷ͞·͟·ͳઃఆΛphpdocͰ͍͍ײ͡ʹͬͯ͘ΕΔ ϥΠϒϥϦ • ࠓճRouteͷઃఆͷΈʹ͍·͢ ࣗಈੜ͢Δ NOW→
͍ํ - Annotations <?ph p namespace App\Providers ; use Collective\Annotations\AnnotationsServiceProvider
as ServiceProvider ; class AnnotationsServiceProvider extends ServiceProvider { protected $scanEvents = [] ; protected $scanRoutes = [] ; protected $scanModels = [] ; protected $scanWhenLocal = false ; protected $scanControllers = true ; protected $scanEverything = false ; } ࣗಈੜ͢Δ NOW→
͍ํ - Annotations ࣗಈੜ͢Δ NOW→
͍ํ - Annotations ࣗಈੜ͢Δ NOW→
͍ํ - laravel-openapi con fi g/app.php ࣗಈੜ͢Δ NOW→
͍ํ - laravel-openapi con fi g/openapi.php schema.json ࣗಈੜ͢Δ NOW→
͍ํ - laravel-openapi SwaggerUI ࣗಈੜ͢Δ NOW→
͍ํ - laravel-openapi ࣗಈੜ͢Δ NOW→
͍ํ - laravel-openapi ࣗಈੜ͢Δ NOW→
͍ํ - laravel-openapi ࣗಈੜ͢Δ NOW→
PHPͳΒͰͷ͍ํ ࣗಈੜ͢Δ NOW→
PHPͳΒͰͷ͍ํ ࣗಈੜ͢Δ NOW→
PHPͳΒͰͷ͍ํ ࣗಈੜ͢Δ NOW→
AssertʹOpenAPI༷ॻΛ͏
OASͷϑΥʔϚοτࢦఆ • σʔλܕʢinteger, number, string, booleanʣ • ϑΥʔϚοτʢint32, double, date-time,
binaryͳͲʣ • patternʢਖ਼نදݱʣ • ͦͷଞͷࢦఆʢ࠷খ, ࠷େ, จࣈྻͷ͞ͳͲʣ Assertʹ͏ NOW→
created_at: ? 1633219200 2021-10-03T09:00:00+09:00 2021-10-03 09:00:00 2021/10/03 09:00:00 Assertʹ͏
NOW→
E2EςετͷAssertʹOpenAPIΛ͏
༻ޠ ࠓճͷE2Eςετͱ • ࠓճͷE2Eςετ୯७ʹAPIϦΫΤετΛߦ͍ɺͦͷϨεϙϯ εΛνΣοΫ͢Δςετͷ͜ͱΛࢦ͍ͯ͠·͢ • ଏʹݴ͏APIςετ • :sorry:
E2Eʹ͏ NOW→
Α͋͘Δςετ E2Eʹ͏ NOW→
հ͢Δςετ E2Eʹ͏ NOW→
thephpleague/openapi-psr7-validator • OpenAPI༷ॻ͔ΒvalidatorΛੜ͢ΔϥΠϒϥϦ ͜Ε͚ͩͰOK
հ͢Δςετ E2Eʹ͏ NOW→
հ͢Δςετ E2Eʹ͏ NOW→
E2Eʹ͏ NOW→
ValidationͰ͖Δ༰ • σʔλܕʢis_stringͳͲɺis_ʓʓϝιουʹରԠʣ • ϑΥʔϚοτʢdouble, date-time, emailͳͲʣ • patternʢͦͷ··preg_matchΛར༻ʣ •
࠷খ, ࠷େ, จࣈྻͷ͞, enumͳͲ E2Eʹ͏ NOW→
͓͢͢Ί • OpenAPI༷ॻʹԊ͍ͬͯΔ͜ͱ͕อূ͞ΕΔ • ςετͷͨΊʹOpenAPI༷ॻΛৄ͘͠ॻ͘͜ͱʹͳΔͷͰɺ APIར༻ऀଆͱᴥᴪ͕ى͖ͮΒ͍ + ϞοΫͷྲྀ༻˓ • E2EςετͷAssertͷྔ͕ݮΔ
E2Eʹ͏ NOW→
• OpenAPI༷ॻΛಡΈࠐΉॲཧͷίετ͕େ͖͍ • ݱঢ়ͷ࣮ͩͱςετΫϥε͝ͱʹಡΈࠐΈ͕ΔͷͰɺେن ͳҊ݅ʹͳΔͱςετ͕ॏ͘ͳͬͯ͠·͏ • ͦͷͷ͕ͦΕͰ͋Δ͜ͱͷνΣοΫͰ͖ͳ͍ E2Eʹ͏
NOW→
FormRequestͷΘΓʹOpenAPIΛ͏
FormRequestʹ͏ NOW→
͓͢͢Ί • όϦσʔγϣϯΛOpenAPI༷ॻʹ౷ҰͰ͖Δ ʢೋॏཧʹͳΒͳ͍ʣ • FormRequestΛॻ͔ͳ͍͍ͯ͘ FormRequestʹ͏ NOW→
• ಡΈࠐΈ͕ωοΫʹͳΔɻࠓճϦΫΤετ͝ͱʹΔͷͰ༨ ܭҙࣝ͢Δඞཁ͕͋Δ • existͳͲlaravelͷศརͳόϦσʔγϣϯ͕͑ͳ͍ • messageͷੜ͕Ͱ͖ͳ͍ • લॲཧɾޙॲཧΛ࣮͢ΔʹFormRequest͕ඞཁʹͳΔ
FormRequestʹ͏ NOW→
Ҋ݅ͰͬͯΈͨײ OpenAPIͷࣗಈੜͱE2EςετͷAssertʹ͍ͭͯ
• ࣗಈੜͱGUIπʔϧਖ਼Ͳ͍ͬ͜Ͳ͍ͬ͜ • Ωʔ໊ίϝϯτͷ౷Ұͷ࣮Λ͖ͪΜͱΕɺࣗಈੜ ͷํ͕ศར • ·ͩதͷOSSͳͷͰɺ෦࣮ΛಡΜͰ͍Δਓ͕1ਓཉ ͍͠ ࣗಈੜʹ͍ͭͯ
ײ NOW→
E2EͷAssertʹ͍ͭͯ • ࠓޙΘͳ͍ཧ༝͕ͳ͍͘Β͍ศརͩͬͨ • Assertͷྔ͕ݮΔͷຊʹ࠷ߴ • ઌʹOpenAPI༷ॻ͕͋Δ߹Ͱ͑Δ • ༷ॻ͕όάͬͯΔͱςετόάͬͯΔ͜ͱʹͳΔ
ײ NOW→
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ ࠓճͷαϯϓϧίʔυͪ͜Β