Slide 1

Slide 1 text

WebAPIͷઃܭ Yumemi 1DayΠϯλʔϯ 2022/03/18 @sun-yryr / גࣜձࣾΏΊΈ

Slide 2

Slide 2 text

ΏΔΏΔ / Taiyo Minagawa w גࣜձࣾΏΊΈ৽ଔೖࣾ w 4FSWFSTJEF&OHJOFFS΍ͬͯ·͢ɻ ܦྺ ޷͖ͳ͜ͱ w 4XJGU 4FSWFSTJEF $*$% w 75VCFS sun-yryr taittide taittide sunyryr 

Slide 3

Slide 3 text

ࢀߟਤॻ  λΠτϧ: Web API: The Good Parts ൃߦ: O'Reilly Ձ֨: ෺ཧຊ ¥2420 ిࢠຊ ¥1936

Slide 4

Slide 4 text

໨࣍ • ඒ͍͠WebAPI • URLઃܭͷϙΠϯτ • WebAPIઃܭͷํ਑ • Q&A 

Slide 5

Slide 5 text

ඒ͍͠WebAPI 

Slide 6

Slide 6 text

WebAPI • API => Application Programming Interface • HTTPϓϩτίϧΛ࢖ͬͯ֎෦ϦιʔεͷػೳΛݺͼग़͢ • ؔ਺ͷΑ͏ͳ΋ͷ 

Slide 7

Slide 7 text

“ඒ͍͠”ʁ • ୭ʹͱͬͯ΋࢖͍΍͍͢͜ͱ • มߋ͠΍͍͢͜ͱ • ੬ऑੑʹରͯ͠ؤڧͰ͋Δ͜ͱ • ஏ͔ͣ͘͠ͳ͍͜ͱ 

Slide 8

Slide 8 text

ඒ͍͠WebAPIΛ࡞ΔͨΊʹେ੾ͳ͜ͱ • RFCͳͲͷ࢓༷͕͋Δ৔߹͸ͦΕʹै͏͜ͱ • ࢓༷͕ͳ͍৔߹͸σϑΝΫτελϯμʔυʹै͏͜ͱ • ଞͷ༗໊APIΛࢀߟʹ͢Δ 

Slide 9

Slide 9 text

URLઃܭͷϙΠϯτ 

Slide 10

Slide 10 text

• ୹͍ • ਓ͕ؒಡΜͰཧղͰ͖Δ • খจࣈͷΈ • αʔόʔͷ࣮૷ʹґଘͯ͠ͳ͍ • ߏ଄͕౷Ұ͞Ε͍ͯΔ • HTTPϝιου͕نఆʹԊ͍ͬͯΔ 

Slide 11

Slide 11 text

• ୹͍ • ਓ͕ؒಡΜͰཧղͰ͖Δ • খจࣈͷΈ • αʔόʔͷ࣮૷ʹґଘͯ͠ͳ͍ • ߏ଄͕౷Ұ͞Ε͍ͯΔ • HTTPϝιου͕نఆʹԊ͍ͬͯΔ 

Slide 12

Slide 12 text

୹͍URL • ೖྗ͠΍͘͢ɺ֮͑΍͍͢ͷͰྑ͍  × http://api.example.com/api/v1/users/ " api͕υϝΠϯ෦෼ͱύε෦෼Ͱඃ͍ͬͯΔ ○ http://api.example.com/v1/users/

Slide 13

Slide 13 text

• ୹͍ • ਓ͕ؒಡΜͰཧղͰ͖Δ • খจࣈͷΈ • αʔόʔͷ࣮૷ʹґଘͯ͠ͳ͍ • ߏ଄͕౷Ұ͞Ε͍ͯΔ • HTTPϝιου͕نఆʹԊ͍ͬͯΔ 

Slide 14

Slide 14 text

ਓ͕ؒཧղͰ͖ΔURL • ਪଌ͠΍͍͢ɺԿ͕ى͜Δ͔෼͔Γ΍͍͢ • ೔ຊޠͳͲ͸Τϯίʔυ͞Εͯ͠·͍෼͔ΓͮΒ͘ͳΔͨΊɺ ආ͚ͨํ͕ྑ͍  × http://api.example.com/u/d/ " u΋d΋ҙຯ͕Θ͔Βͳ͍ɻ୹͚Ε͹୹͍΄Ͳྑ͍Θ͚Ͱ͸ͳ͍ɻ ○ http://api.example.com/users/detail/

Slide 15

Slide 15 text

• ୹͍ • ਓ͕ؒಡΜͰཧղͰ͖Δ • খจࣈͷΈ • αʔόʔͷ࣮૷ʹґଘͯ͠ͳ͍ • ߏ଄͕౷Ұ͞Ε͍ͯΔ • HTTPϝιου͕نఆʹԊ͍ͬͯΔ 

Slide 16

Slide 16 text

খจࣈͷΈͷURL • େจࣈ͕ࠞࡏ͢ΔͱΘ͔ΓͮΒ͘ͳΔ • ϗετ෦͸େจࣈ͕ແࢹ͞ΕΔ࢓༷͕͋ΔͨΊɺͦΕʹै͏  × http://api.example.com/Users/Detail " ϑΥϯτʹΑͬͯ͸େจࣈখจࣈ͕Θ͔ΓͮΒ͍ɻಛʹIͱlͳͲ ○ http://api.example.com/users/detail/

Slide 17

Slide 17 text

• ୹͍ • ਓ͕ؒಡΜͰཧղͰ͖Δ • খจࣈͷΈ • αʔόʔͷ࣮૷ʹґଘͯ͠ͳ͍ • ߏ଄͕౷Ұ͞Ε͍ͯΔ • HTTPϝιου͕نఆʹԊ͍ͬͯΔ 

Slide 18

Slide 18 text

αʔόʔͷ࣮૷ʹґଘͯ͠ͳ͍URL • ಺෦࣮૷͸஌ΒΕͳ͍ํ͕ηΩϡϦςΟతʹ΋˓  × http://api.example.com/cgi-bin/users.php " CGI൛ͷPHPͬΆ͍ͳͱΘ͔ͬͯ͠·͏ ○ http://api.example.com/users/

Slide 19

Slide 19 text

• ୹͍ • ਓ͕ؒಡΜͰཧղͰ͖Δ • খจࣈͷΈ • αʔόʔͷ࣮૷ʹґଘͯ͠ͳ͍ • ߏ଄͕౷Ұ͞Ε͍ͯΔ • HTTPϝιου͕نఆʹԊ͍ͬͯΔ 

Slide 20

Slide 20 text

ߏ଄͕౷Ұ͞Ε͍ͯΔURL • ౷Ұ͞Ε͍ͯΔͱ෼͔Γ΍͢͞ʹͭͳ͕Δ  × http://api.example.com/users/123/ Ϣʔβʔ৘ใৄࡉ × http://api.example.com/users/friends?user_id=123 ࢦఆͨ͠Ϣʔβʔͷ༑ୡҰཡ " ্͸ύεύϥϝʔλͰɺԼ͸ΫΤϦύϥϝʔλͱҰ؏ੑ͕ͳ͍ ○ http://api.example.com/users/123/ ○ http://api.example.com/users/123/friends/

Slide 21

Slide 21 text

• ୹͍ • ਓ͕ؒಡΜͰཧղͰ͖Δ • খจࣈͷΈ • αʔόʔͷ࣮૷ʹґଘͯ͠ͳ͍ • URLߏ଄͕౷Ұ͞Ε͍ͯΔ • HTTPϝιου͕نఆʹԊ͍ͬͯΔ 

Slide 22

Slide 22 text

HTTPϝιου͕نఆʹԊ͍ͬͯΔ • ࢓༷ʹै͏ • GETͰߋ৽͠ͳ͍ͳͲ  (&5 ৘ใΛऔಘ͢Δ 1045 ৽͍͠৘ใΛొ࿥͢Δ 165 ࢦఆͨ͠63-ʹ৘ใΛొ࿥͢Δ ৘ใΛ্ॻ͖͢Δ 1"5$) 165ʹࣅ͍ͯΔ ৘ใͷҰ෦Λߋ৽͢Δ %&-&5& ࢦఆͨ͠৘ใΛ࡟আ͢Δ

Slide 23

Slide 23 text

WebAPIઃܭͷਐΊํ 

Slide 24

Slide 24 text

1. ػೳͷҰཡΛ࡞੒͢ΔʢϢʔεέʔεͷ࡞੒ʣ 2. Ϣʔεέʔε͝ͱʹඞཁͳAPIΛߟ͑Δ 3. 2Ͱߟ͑ͨඞཁͳAPIʹରͯ͠ɺHTTP Method, URL, ϦΫΤε τͷཁૉ΍ϨεϙϯεΛܾΊ͍ͯ͘ 

Slide 25

Slide 25 text

Q&A 

Slide 26

Slide 26 text

໊ࢺ͸୯਺ܥʁෳ਺ܗʁ • αʔϏεʹΑͬͯ୯਺ͩͬͨΓෳ਺ͩͬͨΓ͢Δ • جຊతʹू߹Λද͢΋ͷ͸ෳ਺ܗ͕ద੾ͱ͞Ε͍ͯΔ • ςʔϒϧ໊΋େମෳ਺ܗͳͷͰἧ͑Δͱ෼͔Γ΍͔ͬͨ͢Γ΋ ͢Δ 
 ʢ˞ςʔϒϧͱશ͘ಉ͡ΤϯυϙΠϯτΛ༻ҙ͢Δ͚ͩ͸✖ʣ 

Slide 27

Slide 27 text

ಈࢺ͸࢖ͬͯ͸μϝʁ • ઈରͰ͸ͳ͍ • searchͳͲͷಈࢺΛ࢖͍ͬͯΔαʔϏε΋͋Δ • ͨͩɺHTTPMethodͰදͤΔ”GET”ͳͲ͸࢖Θͳ͍ํ͕ྑ͍ 

Slide 28

Slide 28 text

୯ޠͷ࿈݁͸ʮ-ʯʁʮ_ʯʁ • ͲͪΒ͔ยํͰ౷Ұ͢Ε͹ྑ͍ • SEOతʹ͸ϋΠϑϯͷํ͕ྑ͍͕ɺWebAPIʹ͸ؔ܎ͳ͍ • Ξϯμʔόʔ͸ϦϯΫදهͷԼઢͱඃΔ͜ͱ͕͋ΔͷͰɺϋΠ ϑϯΛ͓͢͢Ί͍ͨ͠ 

Slide 29

Slide 29 text

ΫΤϦͱύεͷ࢖͍෼͚ • URL͸ϦιʔεΛද͢΋ͷͰ͋ΔͨΊɺҰҙʹܾ·Δ΋ͷͰ͋ Ε͹ύεʹؚΊͨํ͕ྑ͍ʢྫ: ϢʔβʔIDʣ • লུͰ͖Δ΋ͷ͸ΫΤϦʹ͢Δͱྑ͍ʢྫ: ҰཡऔಘͷߜΓࠐ Έ৚݅ʣ 

Slide 30

Slide 30 text

ඞͣ൚༻తʹ͢Δඞཁ͸ͳ͍ • ޿͘ެ։ͤͣɺࣗ෼ΒͰดͨ͡APIͷ৔߹͸൚༻తʹ͢Δ͜ͱͰ ͔͑ͬͯ࢖͍ͮΒ͘ʢ=Ԛ͘ʣͳͬͯ͠·͏͜ͱ͕͋Δ • ྫ͑͹ɺτοϓϖʔδʹඞཁͳ͢΂ͯͷ৘ใΛ1౓ʹฦ͢APIΛ ࡞ͬͯ΋͍͍ • ϢʔεέʔεΛେࣄʹͯ͠ઃܭ͍ͯ͘͠ͱྑ͍ 

Slide 31

Slide 31 text

OpenAPIʹ͍ͭͯগ͠ 

Slide 32

Slide 32 text

OpenAPI / Swaggerͱ͸ • REST APIͷهड़ϑΥʔϚοτ • yaml or jsonͰهड़Ͱ͖Δ • όʔδϣϯ2·Ͱ͸Swaggerͱݺ͹Ε͍͕ͯͨɺݱࡏ͸OpenAPI ͱݺ͹Ε͍ͯΔ • ݱࡏόʔδϣϯ3 

Slide 33

Slide 33 text



Slide 34

Slide 34 text

ࣗ෼͕ਪͤΔઃܭΛ໨ࢦͯ͠ ؤு͍ͬͯͩ͘͞