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
Lumenで堅牢なAPIを設計する。
Search
Futoshi Endo
March 10, 2018
Technology
1
2.6k
Lumenで堅牢なAPIを設計する。
PHPerkaigi2018のLTで発表した内容です。
https://phperkaigi.jp/2018/proposal/c4c6998a-6433-4c5b-aa82-d13d4a03a023
Futoshi Endo
March 10, 2018
Tweet
Share
More Decks by Futoshi Endo
See All by Futoshi Endo
PHP8の機能を使って堅牢にコードを書く
fendo181
6
2.6k
Introduction to Typing Practice
fendo181
0
680
PsySHを使った効率的なデバッグ方法について / How debug efficiently using PsySH
fendo181
1
1.6k
PHP8によるデザインパターン入門 / Introduction to Design Patterns with PHP8
fendo181
1
1.5k
PHPerがGoに入門してみた/PHPer introduction to Go.
fendo181
0
4.5k
Laravel.shibuyaで改善してきた IRT勉強会の運営方法について / IRT Study Session Improved Through Laravel Shibuya
fendo181
0
510
EC事業部の各サービスを支えるCREチームの新体制 /New Structure Of EC CRE Team
fendo181
0
1.5k
GTB2020 Web アプリフレームワーク入門/REST API 入門 スライド/ GTB2020 Web App Framework and REST API Introduction
fendo181
1
5.9k
Laravel Pipe Dreamを使って 素早くプロジェクトを始める/Laravel Pipe Dream Start A Project Quickly
fendo181
0
750
Other Decks in Technology
See All in Technology
生成AIサービスPanorama AIご説明資料
sdt
0
300
オブジェクト指向CSSが叶えたかったことと、CSSのいま / The aims of Object-oriented CSS and the current state of CSS usage
shinkufencer
11
3.6k
2023 Japan AWS Jr.Championsに選出されての振り返りとこれから
hiropy877
1
130
データ品質をコード化! LINEヤフーのMLOpsを最適化する "ACP Data Quality" の紹介
lycorptech_jp
PRO
2
160
統計的学習理論読み Chapter 1
kmatsui
3
780
エンジニアブランディングチームの KPI / KPI's of engineer branding team
chaspy
1
140
Vos logs méritent mieux que la config par défaut
lyrixx
2
330
技育祭2024春 LT Finatextホールディングス
kevinrobot34
1
160
20240321_生成AI時代のDevOps
kzkmaeda
2
610
データ化エンジニアとしての1年を振り返る
sansantech
PRO
3
250
なんで私に登壇依頼が?! ~頼られるエンジニアになるためには~ /
mixi_engineers
PRO
2
200
これまでのキャリアとこれからMLエンジニアとしてどう動くか
masatakashiwagi
0
320
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
130
6.2k
WebSockets: Embracing the real-time Web
robhawkes
59
6.9k
No one is an island. Learnings from fostering a developers community.
thoeni
14
2k
Debugging Ruby Performance
tmm1
68
11k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
6
950
Fireside Chat
paigeccino
19
2.6k
Building Effective Engineering Teams - LeadDev
addyosmani
25
1.8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
153
14k
Navigating Team Friction
lara
177
13k
Keith and Marios Guide to Fast Websites
keithpitt
407
22k
Why You Should Never Use an ORM
jnunemaker
PRO
50
8.6k
What's new in Ruby 2.0
geeforr
335
31k
Transcript
ԕ౻ଠಙ(.01FQBCP *OD 1)1FS,BJHJ -VNFOͰݎ࿚ͳ"1*Λઃܭ͢Δ
ԕ౻ଠಙ ͑ΜͲ͎ʔ !'FOEP 4)ࣄۀ෦άʔϖ8FCΤϯδχΞ
୭ -BSBWFMͷνϡʔτϦΞϧΛ࡞ͬͯΈͨɻ ςετۦಈ։ൃೖ
͞ͳ͍ࣄ͓ͼ
ςετͷ
ςετͷ ઃܭͷ
None
ςετͷ ઃܭͷ 3&45GVMͷ
None
ʮ8FC"1*(PPE1BSUTʯ Λಡ͏
ݎ࿚ͱ
ݎ࿚ͱ 8FC"1*Ͱ௨ৗͷΣϒΞϓϦέʔγϣϯͱಉ༷ʹ)551Λ௨͡ ͯެ։͞ΕαʔϏεͰ͔͢Βɺಉ༷ʹ҆ఆੑηΩϡϦςΟ͕ཁٻ ͞Ε·͢ɻ l8FC"1*5IF(PPE1BSUTୈষΑΓ Q z
ηΩϡΞͰ҆ఆͨ͠"1*Λߏங͢Δ
ݎ࿚ͳ"1*Λઃܭ͢Δ 3FRVFTU Middleware 3PVUF $POUSPMMFS "QQMJDBUJPO .PEFM 3FTQPOT
ݎ࿚ͳ"1*Λઃܭ͢Δ ɾ08"414FDVSF)FBEFSTͷઃఆ ɾϒϥβܦ༝Ͱͷ"1*ΞΫηεʹΑΔ߈ܸରࡦ ɾ5ISPUUMFΛͬͨΞΫηε੍ݶͷઃఆ ɾ%P4߈ܸରࡦ wϥΠϒϥϦΛͬͨೝূ ɾKXUBVUI ࣌ؒͷ߹্հͰ͖ͳ͔ͬͨ෦-VNFOͰग़དྷΔηΩϡϦςʔରԠʹؔ͢Δ5JQT
08"414FDVSF)FBEFSTͷઃఆ
08"414FDVSF)FBEFSTͷઃఆ ΞϓϦέʔγϣϯͷηΩϡϦςΟΛڧԽ͢Δҝʹ༻Ͱ͖Δ)551Ϩεϙϯεϔο μʔͷΛ08"4"1͕ఆΊ͍ͯΔʹઃఆ͢ΔࣄͰ944+40/ϋΠδϟοΫͳ Ͳͷϒϥβ͔ΒͷΞΫηεΛఆͨ͠߹ͷ੬ऑੑΛར༻ͨ͠߈ܸʹ༗ޮͰ͢ɻ
08"414FDVSF)FBEFSTͷઃఆ .JEEMFXBSFʹՃ͢Δɻ
CPPUTUSBQBQQQIQʹొ͢Δɻ $app->routeMiddleware([ 'security' => App\Http\Middleware\SecurityHeaders::class, ]); SPVUFTXFCQIQͰݺͼग़͢ɻ $router->group(['prefix' => 'api',
'middleware'=>'security'], function() use ($router){ $router->get('hoges', ['uses' => 'HogesController@showAllHoges']); }); 08"414FDVSF)FBEFSTͷઃఆ
5ISPUUMFΛͬͨΞΫηε੍ݶͷઃఆ
5ISPUUMFΛͬͨΞΫηε੍ݶͷઃఆ ΞΫηεʹϨʔτϛϦοτΛ͔͚Δࣄ͕Ͱ͖Δ.JEEMFXBSFɻ %P4߈ܸͳͷͲͷେྔΞΫηεΛ͛Δɻ ˞-VNFOʹඪ४ͰඋΘͬͯͳ͍ͷͰɺ(JUIVC͔Βऔಘͯ͠ -VNFO༻ʹΧελϚΠζ͢Δɻ ‘throttleɿ3,1’ 1ؒʹ3ճͷϦΫΤετΛڐՄ͢Δɻ ‘throttleɿ300,1’1ؒʹ300ճͷϦΫΤετΛڐՄ͢Δɻ
5ISPUUMFΛͬͨΞΫηε੍ݶͷઃఆ 3PVUF XFCQIQ Ͱࢦఆ͢Δɻ $curl localhost:8010 {"status":429,"message":"Too Many Attempts."} ઃఆҎ্ʹϦΫΤετ͢ΔͱͱΤϥʔϝοηʔδΛฦ͢
$router->group(['middleware' => 'throttle:3,1'], function () use ($router) { $router->get('/', function () use ($router) { return view('index'); }); });
ϥΠϒϥϦΛͬͨೝূ
ϥΠϒϥϦΛͬͨೝূ ϥΠϒϥϦແ͠Ͱͷ-VNFOͰͷೝূਏ͍ʜ
ϥΠϒϥϦΛͬͨೝূ -VNFO-BSBWFMͷެࣜύοέʔδͰ͋Δ1BTTQPSU ೝূύοέʔδ Λ αϙʔτͯ͠ͳ͍ɻ ˞ඇެࣜͰͳΒଘࡏ͢Δ͕ෆ҆ఆ 0"VUIͳͲΛ࠷ॳ͔Β͏ͱ͢Δͱগ͠େมɻ ϥΠϒϥϦແ͠Ͱͷ-VNFOͰͷೝূਏ͍ʜ
ϥΠϒϥϦΛͬͨೝূ
͜Εͩ
υΩϡϝϯτͲͩ͜
ϥΠϒϥϦΛͬͨೝূ ৄࡉ(VJEFGPSTFUUJOHVQXJUI-VNFO
ϥΠϒϥϦΛͬͨೝূ
ಈ͔Ͷ͐
-VNFOͷ߹KXUPBVUI !EFW PSMBUFTUΛΠϯετʔϧ͢Δ $composer require tymon/jwt-auth:"^1.0@dev" ϥΠϒϥϦΛͬͨೝূ
ಈ͍ͨ
ͨͩʜ
ϥΠϒϥϦΛͬͨೝূ
ϥΠϒϥϦΛͬͨೝূ
ϥΠϒϥϦΛͬͨೝূ
҆ఆͯ͠ͳ͍ʜ
·ͱΊ
ɾηΩϡϦςΟʔʹ͍ͭͯ༨Γ͕ࣝͳ͔͕ͬͨ .JEEMFXBFϥΠϒϥϦʔΛՃ͢Εָʹରࡦ͕Ͱ͖Δ ·ͱΊ
ɾηΩϡϦςΟʔʹ͍ͭͯ༨Γ͕ࣝͳ͔͕ͬͨ .JEEMFXBFϥΠϒϥϦʔΛՃ͢Εָʹରࡦ͕Ͱ͖Δ ɾೝূपΓ-BSBWFMͱൺΔͱ-VNFOਏ͍ɻ ·ͱΊ
͓ ·ͱΊ
ݎ࿚ͳ"1*Λઃܭ͢Δ ɾ08"414FDVSF)FBEFSTͷઃఆ ɾϒϥβܦ༝Ͱͷ"1*ΞΫηεʹΑΔ߈ܸରࡦ ɾ5ISPUUMFΛͬͨΞΫηε੍ݶͷઃఆ ɾ%P4߈ܸରࡦ wϥΠϒϥϦΛͬͨೝূ ɾKXUBVUI ࣌ؒͷ߹্հͰ͖ͳ͔ͬͨ෦-VNFOͰग़དྷΔηΩϡϦςʔରԠʹؔ͢Δ5JQT
ݎ࿚ͳ"1*Λઃܭ͢Δ ɾ08"414FDVSF)FBEFSTͷઃఆ ɾϒϥβܦ༝Ͱͷ"1*ΞΫηεʹΑΔ߈ܸରࡦ ɾ5ISPUUMFΛͬͨΞΫηε੍ݶͷઃఆ ɾ%P4߈ܸରࡦ wϥΠϒϥϦΛͬͨೝূ ɾKXUBVUI ࣌ؒͷ߹্հͰ͖ͳ͔ͬͨ෦-VNFOͰग़དྷΔηΩϡϦςʔରԠʹؔ͢Δ5JQT ͦΕ-BSBWFMͰͰ͖ΔΑ
ݎ࿚ͳ"1*Λઃܭ͢Δ ɾ08"414FDVSF)FBEFSTͷઃఆ ɾϒϥβܦ༝Ͱͷ"1*ΞΫηεʹΑΔ߈ܸରࡦ ɾ5ISPUUMFΛͬͨΞΫηε੍ݶͷઃఆ ɾ%P4߈ܸରࡦ wϥΠϒϥϦΛͬͨೝূ ɾKXUBVUI ࣌ؒͷ߹্հͰ͖ͳ͔ͬͨ෦-VNFOͰग़དྷΔηΩϡϦςʔରԠʹؔ͢Δ5JQT ͦΕ-BSBWFMͰ ඪ४Ͱ͋ΔΑ
ͦΕ-BSBWFMͰͰ͖ΔΑ
ݎ࿚ͳ"1*Λઃܭ͢Δ ɾ08"414FDVSF)FBEFSTͷઃఆ ɾϒϥβܦ༝Ͱͷ"1*ΞΫηεʹΑΔ߈ܸରࡦ ɾ5ISPUUMFΛͬͨΞΫηε੍ݶͷઃఆ ɾ%P4߈ܸରࡦ wϥΠϒϥϦΛͬͨೝূ ɾKXUBVUI ࣌ؒͷ߹্հͰ͖ͳ͔ͬͨ෦-VNFOͰग़དྷΔηΩϡϦςʔରԠʹؔ͢Δ5JQT ͦΕ-BSBWFMͰ ඪ४Ͱ͋ΔΑ
ͦΕ-BSBWFMͷ 1BTTQPSUศརͩΑʂ ͦΕ-BSBWFMͰͰ͖ΔΑ
·ͱΊ ͋
ԕ౻ଠಙ(.01FQBCP *OD 1)1FS,BJHJ -VNFOͰݎ࿚ͳ"1*Λઃܭ͢Δ
ԕ౻ଠಙ(.01FQBCP *OD 1)1FS,BJHJ -VNFOͰݎ࿚ͳ"1*Λઃܭ͢Δ
ԕ౻ଠಙ(.01FQBCP *OD 1)1FS,BJHJ -VNFOͰݎ࿚ͳ"1*Λઃܭ͢Δ -BSBWFMͳΒΑΓݎ࿚ͳ"1*ΛઃܭͰ͖Δ
None
·ͱΊ -BSBWFMͰݎ࿚ͳ"1*Λ࡞Ζ͏
ͦΕͰ-VNFOͰݎ࿚ͳ"1*Λ࡞Γ͍ͨํ -VNFOͰग़དྷΔηΩϡϦςΟରࡦʹؔ͢Δ5JQT
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ ϓϩϑΟʔϧGFOEP1SPpMF