Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
概念から学ぶ正しくRESTfulなAPIとWP REST APIでの実例 #wb_rest
Potato4d(Hanatani Takuma)
September 03, 2017
Programming
6
2.4k
概念から学ぶ正しくRESTfulなAPIとWP REST APIでの実例 #wb_rest
2017.09.03 #wb_rest HANATANI Takuma #wbosaka #wbkyoto #wbnagano
9月のWordBenchの登壇スライドです。
Potato4d(Hanatani Takuma)
September 03, 2017
Tweet
Share
More Decks by Potato4d(Hanatani Takuma)
See All by Potato4d(Hanatani Takuma)
potato4d
9
3.5k
potato4d
21
4.4k
potato4d
0
410
potato4d
8
2.4k
potato4d
8
2k
potato4d
38
17k
potato4d
5
2.2k
potato4d
11
2.9k
potato4d
1
1.6k
Other Decks in Programming
See All in Programming
yosuke_furukawa
PRO
1
350
seike460
8
2.2k
bkuhlmann
4
300
hamakou108
4
520
77web
2
2.5k
drumato
1
250
shiba6v
0
200
mathetake
7
2.2k
jschaedl
2
110
sh_akira
3
130
sysrich
0
250
deepu105
0
240
Featured
See All Featured
reverentgeek
28
2.1k
erikaheidi
15
4.5k
hannesfritz
29
980
pedronauck
652
110k
jacobian
257
20k
bkeepers
PRO
408
58k
robhawkes
53
2.9k
roundedbygravity
84
7.9k
stephaniewalter
262
11k
nonsquared
81
3.4k
ammeep
657
54k
geoffreycrofte
27
1k
Transcript
֓೦͔ΒֶͿਖ਼͘͠RESTfulͳ APIͱWP REST APIͰͷ࣮ྫ 2017.09.03 #wb_rest HANATANI Takuma #wbosaka #wbkyoto
#wbnagano
ࠓRESTࡇΓ
͍··Ͱ୯ମͰಈ͘͜ͱΛલఏͱ͍ͯͨ͠ WordPress͕֎෦ʹใ͕ग़ͤ·͢
ͦͯ͠WP REST APIʹΑͬͯͦͷใΛ ΓͱΓ͢Δͱ෯͕͕Γ·͢Αʂ
͔֬ʹWordPressͷσʔλ͕ APIͱͯ͠ఏڙ͞ΕΔͱͰ͖ Δ͜ͱ૿͑Δ
࣮ࡍ͜͏͍͏׆༻ํ๏͕͋Γ·͢ʂ
طʹࣄྫࢁ͋Δ
ͦͷ্͜ͷAPI໊લͷ௨ΓRESTfulͰɺ ϞμϯͳߏͰ͍ͯ͘͢ศརͰ͢Αʂ
Ͱ͜ͷࠜఈͷRESTʹ͍ͭͯ ཧղ͍ͯ͠·͔͢ʁ
POST͚ͩͰͳ͘PUT DELETE͕ΘΕ͍ͯͨΒ REST? ʁ
URLͷܗ͕ࣜͦΕͬΆ͍ͷ͕ REST? ʁ
JSON͕ଟ͍͚ΕͲJSONͩͬ ͨΒREST? ʁ
RESTԿΛͬͯREST? ʁ
ʮWP REST APIʯͱ͍͏Ϟϊ
͚ͩͰͳ͘
RESTͱ͍͏֓೦ΛѲ͢Δ
Կ͕REST͔Λ໌֬ʹ͠ɺ RESTful APIͷڞ௨ʹ͍ͭͯ Δ
ʮ͏࣌ʯʮ࡞Δ࣌ʯ྆ํͷ ֶशίετΛେ෯ʹݮΒ͢
ࠓͷΰʔϧ
ΞδΣϯμ • RESTʹ͍ͭͯ • RESTͷجຊݪଇʹ͍ͭͯ • ͓͖͍֮͑ͯͨผʹREST͡Όͳ͍ϧʔϧ • RESTݪཧओٛΛ؏͘߹ͷͭΒ͞ •
WP REST APIʹ͓͚ΔRESTͱͷ͖߹͍ํ • ·ͱΊ
ΞδΣϯμ • RESTʹ͍ͭͯ • RESTͷجຊݪଇʹ͍ͭͯ • ͓͖͍֮͑ͯͨผʹREST͡Όͳ͍ϧʔϧ • RESTݪཧओٛΛ؏͘߹ͷͭΒ͞ •
WP REST APIʹ͓͚ΔRESTͱͷ͖߹͍ํ • ·ͱΊ
RESTʹ͍ͭͯ
RESTͱʁ ݯྲྀʹ͍ͭͯ • 2000ʹఏএ͞ΕͨจΛݯྲྀͱ͢ΔWeb։ൃʹ͓͚Δελ Πϧͷݺশ • ݱతͳWeb։ൃɺಛʹAPI։ൃͷͰओྲྀͱͳ͍ͬͯΔ • ࠓʹͳͬͯྲྀߦ͍ͬͯΔͷΞϓϦ։ൃɾSPA։ൃͳͲ͕ྗ ΛڧΊͨ͜ͱʹΑͬͯΫϥΠΞϯτɾαʔόʔϞσϧʹ͓͚
ΔͦΕͧΕ͕໌֬ʹ͠͡ΊͨͳͲ͕ཧ༝ https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
RESTͱʁ ҙ • RESTࣗମ༷Ͱͳ͚ΕΞʔΩςΫνϟͰͳ͘ɺطଘ ͷ֓೦ͷू·ΓͰ͋Δ • ҰԠ໌֬ͳఆٛଘࡏ͢Δ͕ɺ͋͘·Ͱ֓೦తͳͷͰ͋ Δ
ΞδΣϯμ • RESTʹ͍ͭͯ • RESTͷجຊݪଇʹ͍ͭͯ • ͓͖͍֮͑ͯͨผʹREST͡Όͳ͍ϧʔϧ • RESTݪཧओٛΛ؏͘߹ͷͭΒ͞ •
WP REST APIʹ͓͚ΔRESTͱͷ͖߹͍ํ • ·ͱΊ
RESTͷجຊݪଇʹ͍ͭͯ
RESTͷجຊݪଇʹ͍ͭͯ ࠷ݶѲ͓ͯ͘͠ͱྑ͍ݪଇ • εςʔτϨεͳΠϯλʔϑΣʔε • Ϧιʔεࢸ্ओٛʹΑΔҰҙͳࣝผࢠͷURIܗࣜͰͷఏڙ • Ϧιʔεʹରͯ͠ͷHTTPϝιουϕʔεͰͷૢ࡞ • ͦΕͧΕͷϦιʔεͷΞΫηεઌͷϦϯΫͷఆٛ
RESTͷجຊݪଇʹ͍ͭͯ εςʔτϨε • શͯͷHTTPϦΫΤετʹ͓͍ͯͦͷ௨৴ʹඞཁͳใ͕શͯ ؚ·Ε͍ͯΔ • ͯ͢ͷ௨৴ಠཱ͓ͯ͠ΓɺͦΕͧΕ͕લޙͷίϯςΩε τʹ͍ͭͯѲ͍ͯ͠Δඞཁ͕ͳ͍
RESTͷجຊݪଇʹ͍ͭͯ Ϧιʔεओٛ • RESTશͯͷΞΫηεͷతޠΛϦιʔεͱͯ͠ఆ͍ٛͯ͠ Δ( `posts`, `users` ͳͲ) • RESTʹ͓͍ͯɺ͜ΕΒͷϦιʔεશͯඞͣҰҙͳࣝผࢠ
Λ࣋ͪɺΞΫηε͕ՄೳͰ͋Δ(ྫ: /posts/1 )
RESTͷجຊݪଇʹ͍ͭͯ HTTPϝιουϕʔεͰͷΞΫηε • RESTͷϦιʔεͷૢ࡞ϙϐϡϥʔ͔ͭ࠷খݶͷ໋ྩηοτʹ Αͬͯදݱ͞ΕΔ • ΑΓ࣮ʹ͍ۙݺশͰHTTPͷ GET , POST
, PUT , DELETE ͷ4छΛ ར༻͢Δ • ͜Εඞͣ͠CRUDͱରԠ͢ΔͷͰͳ͍ • ͱ͍͑WordPressͷΑ͏ͳൺֱతϦϨʔγϣϯ͕؆ܿͳγεςϜʹ ͓͍ͯCRUDͱͷϚοϐϯάͱͳΓ͕ͪ
RESTͷجຊݪଇʹ͍ͭͯ ϦιʔεͷϋΠύʔϦϯΫ • ϦιʔεͷΞΫηε࣌ɺΞϓϦέʔγϣϯʹؔ͢Δใঢ় ଶͷมԽʹ͍ͭͯͷϦϯΫΛఏڙ͢Δ • ͋ΔಛఆͷϦιʔεΞΫηε͢ΔࡍɺͦͷϦιʔεͱؔ ࿈͢ΔϦιʔεͱΞΫηε͢Δ࣌ʹ୯७ʹͦͷϨεϙϯ εʹؚ·ΕΔϦϯΫΛḷΔ͚ͩͰྑ͍ •
ݪཧओٛͱͯ͠ɺಛఆͷΤϯυϙΠϯτʹΞΫηεͨ࣌͠ ͰؔΘΔϦιʔε͕શͯӾཡͰ͖Δ
ΞδΣϯμ • RESTʹ͍ͭͯ • RESTͷجຊݪଇʹ͍ͭͯ • ͓͖͍֮͑ͯͨผʹREST͡Όͳ͍ϧʔϧ • RESTݪཧओٛΛ؏͘߹ͷͭΒ͞ •
WP REST APIʹ͓͚ΔRESTͱͷ͖߹͍ํ • ·ͱΊ
͓͖͍֮͑ͯͨ ผʹREST͡Όͳ͍ϧʔϧ
REST͡Όͳ͍ϧʔϧ ͜ΕΒRESTͷඞਢཁ݅Ͱͳ͍ • JSON͕ඞਢͰͳ͍ • HTTPͷεςʔλείʔυΛ༗ޮ׆༻͢Δ͜ͱඞਢͰͳ͍ • BearerೝূඞਢͰͳ͍ • Ϧιʔε͕ෳܗͰ͋Δ͜ͱಛʹඞਢͰͳ͍
• όʔδϣχϯάඞਢͰͳ͍
REST͡Όͳ͍ϧʔϧ JSON͕ඞਢͰͳ͍ • JSONRESTͷඞਢཁ݅Ͱͳ͍ • ͳΜͰJSONͱͯ͠ఏڙ͞Ε͍ͯΔͨΊޡղ͕ͪ͠ • ݱʹɺRESTͷఏএऀ͕ޙʹ͍͋͛ͯΔʮRESTͷख़ʯͷ αϯϓϧXMLͰهड़͞Ε͍ͯΔ https://www.infoq.com/jp/news/2010/03/RESTLevels
REST͡Όͳ͍ϧʔϧ HTTPͷεςʔλείʔυΛ࠷େݶ׆༻͢Δඞཁͳ͍ • RESTࣗମ͕HTTPͷຊདྷͷػೳΛ࠷େݶ׆༻͢ΔΑ͏ʹ࡞Β Ε͍ͯΔͷͰؒҧ͍Ͱͳ͍ • ͱ͍͑͜Εࣗମඞͣ͠ར༻͠ͳ͚ΕͳΒͳ͍Θ͚Ͱ ͳ͍ • ϓϥάϚςΟοΫͳͱͯ͠ਖ਼͍͠
REST͡Όͳ͍ϧʔϧ BearerೝূඞਢͰͳ͍ • OAuth / BearerͰͷೝূʹΑͬͯRESTful APIͷೝূߦΘΕ ͕ͪͰ͋Δ͕ɺBearerࣗମඞਢͰͳ͍ • ͦͦ
Authorization ϔομʔΛ༩͍ͯ͠Δ͜ͱεςʔ τϨεͷ͔݅Βҳ͍ͯ͠ΔͷͰʁ • ͜ΕϓϥάϚςΟοΫͳͱͯ͠ਖ਼͍͠
REST͡Όͳ͍ϧʔϧ Ϧιʔε͕ෳܗͰ͋Δ͜ͱඞਢͰͳ͍ • ಛʹඞਢͰͳ͍ • ωοτ্ʹΑ͘ʮRESTfulͳAPIͷ։ൃͰશͯෳܗʹ͠ ·͠ΐ͏ʯͱ͋Δ͕ͦΕࣗମϕετϓϥΫςΟεͰ͋Δ • ϓϥάϚςΟοΫͳͱͯ͠ਖ਼͍͠
REST͡Όͳ͍ϧʔϧ όʔδϣχϯάඞਢͰͳ͍ • `/api/v1/` ͷΑ͏ͳߏΑ͘ݟΔ͕ඞਢͰͳ͍ • རศੑΛߟ͑Δͱ͋ͬͨ΄͏͕ྑ͍͜ͱؒҧ͍ͳ͍ • ϓϥάϚςΟοΫͳͱͯ͠ਖ਼͍͠
ΞδΣϯμ • RESTʹ͍ͭͯ • RESTͷجຊݪଇʹ͍ͭͯ • ͓͖͍֮͑ͯͨผʹREST͡Όͳ͍ϧʔϧ • RESTݪཧओٛΛ؏͘߹ͷͭΒ͞ •
WP REST APIʹ͓͚ΔRESTͱͷ͖߹͍ํ • ·ͱΊ
RESTݪཧओٛΛ؏͘߹ͷ ͭΒ͞
RESTݪཧओٛΛ؏͘߹ͷͭΒ͞ ೝূͲ͏͢ΔͶΜ • CookieηογϣϯʹΑͬͯϦΫΤετͰԣஅతͳίϯς Ωετ͕ੜ·Εͨ࣌ͰεςʔτϨεͰͳ͍ • ਖ਼͘͠εςʔτϨεͰ͋ΔͨΊʹೝূΛίϯςΩετʹґ ଘ͠ͳ͍ܗʹ͢Δඞཁ͕͋Δ • Authorization
ϔομʔΛར༻ͯ͠ Bearer ೝূ͕ϝδϟʔͰ ͋Δ͕ɺ͜ΕࣗೝূΛඞཁͱ͍ͯ͠Δ
RESTݪཧओٛΛ؏͘߹ͷͭΒ͞ /search?q= Ͳ͏͢ΔͶΜ • RESTʹ͓͍ͯɺURIͷରͱͳΔͷશͯϦιʔεͱͳΔͨ Ίɺ͜ΕతޠͱͳΔ໊ࢺͰ͋Δ͖Ͱ͋Δ • ͦͷதͰݕࡧΛදݱ͢Δ߹ɺ `search` ͱ͍͏୯ޠಉࢤͰ͋
ΔͨΊෆ߹͕ੜ͡Δ • Ұͭʹ /users?q= ͱ͍͏ղܾํ๏ΛͱΔ͜ͱՄೳͰ͋Δ͕ɺ ҰํͰ /users ͷऔಘʹ͔͔Δίετ্࣮ͷେ͖͍
RESTݪཧओٛΛ؏͘߹ͷͭΒ͞ ͜ΕΒʹ͍ͭͯͷղܾํ๏ • جຊతʹ REST API ͷݪଇͱͳΔ֓೦Ͱ͋ΔҎ্ͷҙຯ ࣋ͨͳ͍ͷͰɺʮRESTͬΆ͘ʯར༻ऀ͕ѻ͍͍͢ܗͰఏ ڙ͢Δ͜ͱ͕ཧ
• ࠷ऴతʹAPIΛར༻͢Δͷ API ϢʔβʔͱͳΔਓؒͳͷ Ͱਓؒʹѻ͍͍͢ܗͰ࡞Δ΄͏͕ྑ͍
Qiita API ඇ REST Ͱ͋Δ͕ൺֱత REST ʹ͍ۙ I/F Λఏڙ͍ͯ͠Δ
Qiita API ඇ REST Ͱ͋Δ͕ൺֱత REST ʹ͍ۙ I/F Λఏڙ͍ͯ͠Δ
esa API ඇ REST Ͱ͋Δ͕ൺֱత REST ʹ͍ۙ I/F Λఏڙ͍ͯ͠Δ
esa API ඇ REST Ͱ͋Δ͕ൺֱత REST ʹ͍ۙ I/F Λఏڙ͍ͯ͠Δ
ΞδΣϯμ • RESTʹ͍ͭͯ • RESTͷجຊݪଇʹ͍ͭͯ • ͓͖͍֮͑ͯͨผʹREST͡Όͳ͍ϧʔϧ • RESTݪཧओٛΛ؏͘߹ͷͭΒ͞ •
WP REST APIʹ͓͚ΔRESTͱͷ͖߹͍ํ • ·ͱΊ
WP REST APIʹ͓͚Δ RESTͱͷ͖߹͍ํ
WP REST APIʹ͓͚ΔRESTͱͷ͖߹͍ํ WP REST APIՄೳͳݶΓRESTͷ֓೦Λ९क͍ͯ͠Δ • WP REST APIRESTfulͰ͋Δ͜ͱΛࢸ্ͱͯ͠࡞͞Ε͍ͯ
Δ • WP REST APIɺRESTͰରॲ͖͠Εͳ͍ʹ͍ͭͯɺՄ ೳͳݶΓRESTΛ९क͢ΔΑ͏ਐΊ͍ͯΔ • ͱ͍࣮͑ࡍͱͯ͠ෆՄೳͳͱ͜Ζʹଥڠ͋Δ
WP REST APIͷREST९कʹ͍ͭͯͷઆ໌
WP REST APIʹ͓͚ΔRESTͱͷ͖߹͍ํ جຊతͳར༻ʹ͍ͭͯ • WP REST APIɺWordPress͕ͭେͳϦιʔεʹ͍ͭͯ جຊతͳૢ࡞ΛRESTʹԊͬͨܗͰఏڙ͍ͯ͠Δ •
ྫ͑ɺ [GET] /posts ʹͯ ߘͷҰཡͷऔಘΛɺ [GET] / posts/<id> ʹͯ୯ҰͷߘͷऔಘΛɺ [POST] /posts ʹͯ ߘͷ࡞Λߦ͏͜ͱ͕Մೳɻ • ͜ΕΒ͕ΧςΰϦɾϢʔβʔɾݻఆϖʔδͳͲͦΕͧΕʹର ͯ͠ఏڙ͞Ε͍ͯΔ
WP REST APIͷجຊతͳϦΫΤετʹ͍ͭͯͷpayload, response
WP REST APIʹ͓͚ΔRESTͱͷ͖߹͍ํ Searchʹ͍ͭͯ • WordPressͰRESTʹ͙ͦΘͳ͍ /search ܥͷΤϯυϙΠ ϯτͰͳ͘ɺ /posts
ͷ֦ுͱ͍͏ܗͰߦ͍ͬͯΔ • /posts?search= ͱ͍͏ܗࣜʹͯݕࡧ͕Մೳͱͳ͍ͬͯΔ • ͜ΕࣗମϦιʔεͱਖ਼͘͠Ϛον͓ͯ͠Γɺ͔ͭGETʹͯ ϦιʔεͷมԽ͕ߦΘΕͳ͍ͷͰਖ਼͍͠ͱ͍͑Δ
WP REST APIʹ͓͚ΔRESTͱͷ͖߹͍ํ ೝূʹ͍ͭͯ • WP REST APIͰɺೝূΛ OAuth, Basic,
ͦͯ͠CookieͰ ߦ͍ͬͯΔ
WP REST APIʹ͓͚Δೝূํ๏ͷछผʹ͍ͭͯ
WP REST APIʹ͓͚Δೝূํ๏ͷछผʹ͍ͭͯ
WP REST APIʹ͓͚Δೝূํ๏ͷछผʹ͍ͭͯ
WP REST APIʹ͓͚Δೝূํ๏ͷछผʹ͍ͭͯ
WP REST APIʹ͓͚ΔRESTͱͷ͖߹͍ํ ೝূʹ͍ͭͯ • WP REST APIͰɺೝূΛ OAuth, Basic,
ͦͯ͠CookieͰߦͬ ͍ͯΔ • Cookieʹ͍ͭͯεςʔτϨεͱݴ্͍͍ɺଞͷೝ ূ௨৴ʹίϯςΩετΛඞཁͱ͢Δ • WordPressͱ͍͏Ϧιʔεͷ࡞ʹ੍ݶΛ՝͢ͱ͍͏Ϟνϕʔ γϣϯʹ͓͍ͯؒҧ͍Ͱͳ͍ʢؾ͕͢Δʣ • ݱʹ͓͍ͯ͜͜ʹର͢Δਖ਼͍͠ιϦϡʔγϣϯͳ͍
ΞδΣϯμ • RESTʹ͍ͭͯ • RESTͷجຊݪଇʹ͍ͭͯ • ͓͖͍֮͑ͯͨผʹREST͡Όͳ͍ϧʔϧ • RESTݪཧओٛΛ؏͘߹ͷͭΒ͞ •
WP REST APIʹ͓͚ΔRESTͱͷ͖߹͍ํ • ·ͱΊ
·ͱΊ
·ͱΊ ᶃ RESTͷجຊ • REST͍·͔Β15Ҏ্લʹఏএ͞ΕͨWeb։ൃͷઃܭελΠϧ Ͱ͋Δ • RESTͷେ͖ͳಛͱͯ͠ɺҎԼͷ༷ͳͷ͕͋Δ • GET,
POST, PUT, DELETEΛར༻ͨ͠Ϧιʔεૢ࡞͕ఏڙ͞Ε͍ͯΔ • εςʔτϨεͰ͋Δ͜ͱʹΑΔѻ͍͍͢I/F͕ఏڙ͞Ε͍ͯΔ • ϦιʔεओٛͰ͋Δ͜ͱʹΑΓURIʹͯશ͕ͯ໌ࣔ͞Ε͍ͯΔ
·ͱΊ ᶄ ͭΒ͞ • RESTकΓ͗͢ΔͱͭΒ͍ • ਖ਼͍͠RESTfulઃܭਖ਼͍͠WebαʔϏεɾWebαΠτͷઃ ܭͰ͋ΔͱݶΒͳ͍ • ࠷ऴతʹར༻͢Δଆͷઢʹཱͬͯߏங͢Δ͜ͱ͕ॏཁ
·ͱΊ ᶅ WordPress • WP REST APIRESTͷجຊ෦क͍ͬͯΔͷͰRESTͷΠ ϝʔδ௨Γʹୟ͘ͱେͷૢ࡞ظ௨Γʹಈ͘ • جຊʹ࣮ͳ࡞ΓͰ͋ΔͷͰɺRESTʹֶ͍ͭͯͿʹஸ
ྑ͍ࢿྉͱͳ͍ͬͯΔ • ͱ͍͑Ұ෦CookieೝূͳͲଥڠ͕͋ΔͨΊશ͕ͯRESTful ͔ͱݴΘΕΔͱͦ͏Ͱͳ͍
͓ΘΓʹ
·ͱΊ • RESTͷجຊతͳಛϞμϯͳWebαʔϏεͰRESTͰͳ ͘ͱ࠾༻͞Ε͍ͯΔ • RESTͷجຊΛ͓֮͑ͯ͘ͱ༷ʑͳαʔϏεΛར༻͢Δࡍͷֶ शίετͷݮʹܨ͕Δ • ͱ͍͑࡞͢Δ߹ݻࣥ͗͢͠ͳ͍Α͏ʹ͠·͠ΐ͏
Ε͍ͯ·͕ͨ͠
ࣗݾհ Ֆ୩ຏ a.k.a @potato4d • དྷਓ͠·͢ • େࡕੜ·Εେࡕҭͪौ୩ࡏॅ • ීஈϑϩϯτΤϯυΤϯδχΞ
• ͱ͖Ͳ͖PHPͱ͔ॻ͍ͯ·͢ • PHPΧϯϑΝϨϯε2017Ͱొஃ͢Δͷ ͰԠԉ͍ͯͩ͘͠͞