Slide 1

Slide 1 text

3&45 ͷ੍໿ ܊ࢁতਔ https://twitter.com/koriym

Slide 2

Slide 2 text

܊ࢁতਔ http://twitter.com/koriym

Slide 3

Slide 3 text

)ZQFS5FYU .BSLVQ-BOHVBHF

Slide 4

Slide 4 text

Hypertext ͱ͸ ෳ਺ͷςΩετΛ૬ޓʹؔ࿈෇͚ɺ݁ͼ෇͚Δ࢓૊Έ http://www.ltrebing.de/studium/hypertext/hypertext.gif https://ja.wikipedia.org/wiki/%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

http://www.nextnature.net/2009/12/the-playboy-interview-marshall-mcluhan/ Marshall McLuhan (1911-1980) l୭͕ਫΛൃݟͨ͠ͷ͔஌Βͳ͍͕ɺ ͦΕ͕ڕͰͳ͍͜ͱ͚ͩ͸͔֬ͩz

Slide 7

Slide 7 text

https://blog.steveklabnik.com/posts/2011-07-03-nobody-understands-rest-or-http

Slide 8

Slide 8 text

https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm ΞʔΩςΫνϟελΠϧͱωοτϫʔΫϕʔεͷιϑτ΢ΣΞΞʔΩςΫνϟͷઃܭɻ
 ത࢜࿦จɺΧϦϑΥϧχΞେֶΞʔόΠϯߍɺ2000೥

Slide 9

Slide 9 text

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven 3&45"1*͸ϋΠύʔςΩετۦಈͰ͸ͳ͍ ͱ͍͚ͳ͍ɻ ୯ͳΔ)551"1*͕3&45"1*ͱݺ͹ΕͯΔ ͜ͱʹϑϥετϨʔγϣϯΛײ͡Δɻ

Slide 10

Slide 10 text

•REST API͸ݻఆͷϦιʔε໊΍֊૚Λ ఆٛͯ͠͸ͳΓ·ͤΜɻ… ͦͷ୅Γʹ ͲͷΑ͏ʹURIΛ૊ΈཱͯΔ͔Λࢦࣔ ͠·͢ɻ •Ϧιʔεͷදݱ΍ΞϓϦέʔγϣϯঢ় ଶͷۦಈʹ࢖༻͞ΕΔϝσΟΞλΠϓ ͷఆٛ౳ͷهड़ʹ౒ྗΛ͢Δඞཁ͕͋ Γ·͢ http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

Slide 11

Slide 11 text

https://developer.twitter.com/en/docs/api-reference-index

Slide 12

Slide 12 text

https://petstore.swagger.io/

Slide 13

Slide 13 text

http://t-code.pl/blog/2016/02/rest-misconceptions-1/

Slide 14

Slide 14 text

https://stackoverflow.com/questions/6845772/rest-uri-convention-singular-or-plural-name-of-resource-while-creating-it

Slide 15

Slide 15 text

https://youtu.be/pspy1H6A3FM

Slide 16

Slide 16 text

"1*7FSTJPOJOH W

Slide 17

Slide 17 text

https://www.slideshare.net/evolve_conference/201308-fielding-evolve

Slide 18

Slide 18 text

https://www.slideshare.net/evolve_conference/201308-fielding-evolve

Slide 19

Slide 19 text

https://twitter.com/fielding/status/376835835670167552

Slide 20

Slide 20 text

https://www.ca.com/content/dam/ca/jp/files/ebook/a-guide-to-rest-and-api-design.pdf

Slide 21

Slide 21 text

3&45"1* )ZQFSNFEJB"1*

Slide 22

Slide 22 text

8FCͷ੒ޭཁҼͱͯ͠ͷ ͭͷॏཁͳ8FCͷΞʔΩςΫνϟͷಛੑ ෼ࢄϋΠύʔϝσΟΞ ௿͍ࢀೖোน ֦ுੑ Πϯλʔωοτن໛

Slide 23

Slide 23 text

௿͍ࢀೖোน w 8FCαΠτΛར༻͢Δͷ΋ɺ࡞੒͢Δͷ΋؆୯ ෼ࢄϋΠύʔϝσΟΞ ௿͍ࢀೖোน ֦ுੑ Πϯλʔωοτن໛

Slide 24

Slide 24 text

֦ுੑ w ΫϥΠΞϯτͷಈ࡞ʹӨڹΛ༩͑Δࣄͳ͘ɺ8FCαΠ τΛมߋ͢Δࣄ͕Ͱ͖Δɻ ෼ࢄϋΠύʔϝσΟΞ ௿͍ࢀೖোน ֦ுੑ Πϯλʔωοτن໛

Slide 25

Slide 25 text

෼ࢄϋΠύʔϝσΟΞ w σʔλͱڞʹ࣍ʹͰ͖Δૢ࡞Λαʔόʔ͕఻͑ɺ σʔλࣗମͱಉ͡Α͏ʹѻ͍·͢ɻ ෼ࢄϋΠύʔϝσΟΞ ௿͍ࢀೖোน ֦ுੑ Πϯλʔωοτن໛

Slide 26

Slide 26 text

Πϯλʔωοτن໛ w ແடংͳεέʔϥϏϦςΟ w ಠཱͨ͠഑උ ෼ࢄϋΠύʔϝσΟΞ ௿͍ࢀೖোน ֦ுੑ Πϯλʔωοτن໛

Slide 27

Slide 27 text

"1*˺8FC w " Ϋϩʔζυͳ؀ڥ w # )551 $36%31$ w $ 3&45 ௿͍ࢀೖোน ֦ுੑ Πϯλʔωοτن໛ ௿͍ࢀೖোน ֦ுੑ ϋΠύʔϝσΟΞ ௿͍ࢀೖোน ֦ுੑ Πϯλʔωοτن໛ Πϯλʔωοτن໛

Slide 28

Slide 28 text

"1*˺8FC IVNBO NBDIJOF

Slide 29

Slide 29 text

wΫϥΠΞϯτʗαʔό wεςʔτϨεੑ wΩϟογϡ w֊૚ԽγεςϜ w ίʔυΦϯσϚϯυ w౷ҰΠϯλϑΣʔεɹ ΠϯλʔϑΣΠε੍໿ʣ wϦιʔεͷࣝผ 63* wදݱʹΑΔϦιʔεૢ࡞ wࣗݾهड़తϝοηʔδ wϋΠύʔϝσΟΞ੍໿ )"5&0"4 3&45ʢ'JFMEJOHʣ੍໿ 29 https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm ΞʔΩςΫνϟ੍໿ ΠϯλʔϑΣΠε੍໿

Slide 30

Slide 30 text

ͭͷΠϯλʔϑΣΠε੍໿

Slide 31

Slide 31 text

౷ҰΠϯλʔϑΣΠεͷޡղ w σʔλͷૢ࡞ͱ)551ϝιουͷϚοϐϯάͰ͸ͳ͍ w TUPSBHFBTBTFSWJDF $36%PWFS)551 /P 2007 2010

Slide 32

Slide 32 text

̐ͭͷΠϯλʔϑΣΠεͷ੍໿ wϦιʔεͷࣝผ 63* wදݱʹΑΔϦιʔεૢ࡞ wࣗݾهड़తϝοηʔδ wϋΠύʔϝσΟΞ੍໿

Slide 33

Slide 33 text

Ϧιʔεͷࣝผ w ౷ҰϦιʔεࣝผࢠ 63* w ඇதԝγεςϜ 63* දݱʹΑΔૢ࡞ ࣗݾهड़తϝοηʔδ ϋΠύʔϝσΟΞ

Slide 34

Slide 34 text

දݱʹΑΔϦιʔεૢ࡞ w Ϧιʔεͱ͸දݱՄೳͳԿͰ΋ w දݱͷ࣮ଶ͸ωοτϫʔΫͰసૹՄೳόΠτྻ w ඪ४Խ͞ΕͨHTTPϝιουʢGETͱPOSTʣͷηοτ Λ࢖༻ͯ͠ަޓʹදݱΛૹ৴͢Δ͜ͱʹΑͬͯϦιʔ εΛૢ࡞ 63* දݱʹΑΔૢ࡞ ࣗݾهड़తϝοηʔδ ϋΠύʔϝσΟΞ

Slide 35

Slide 35 text

ࣗݾهड़తϝοηʔδ w )551ϝοηʔδ͸ड৴ऀ͕ཧղ͢ΔͨΊʹඞཁͳ ͢΂ͯͷ৘ใΛؚΉ 63* දݱʹΑΔૢ࡞ ࣗݾهड़తϝοηʔδ ϋΠύʔϝσΟΞ

Slide 36

Slide 36 text

w )"5&0"4)ZQFSNFEJBBTUIFFOHJOFPG BQQMJDBUJPOTUBUF w ϋΠύʔϝσΟΞίϯτϩʔϧ͸ɺΞϓϦέʔγϣϯঢ়ଶ ͷมԽͷݪಈྗ ϋΠύʔϝσΟΞ੍໿ ΞϓϦέʔγϣϯঢ়ଶͷΤϯδϯͱͯ͠ͷϋΠύʔϝσΟΞ) 63* දݱʹΑΔૢ࡞ ࣗݾهड़తϝοηʔδ ϋΠύʔϝσΟΞ

Slide 37

Slide 37 text

'JOJUF4UBUF.BDIJOF ༗ݶঢ়ଶػց

Slide 38

Slide 38 text

3FTPVSDF4UBUF "QQMJDBUJPO4UBUF Ϧιʔεঢ়ଶදݱ 3FRVFTU w4BGF w6OTBGF /FYU"DUJPO B GPSN 3FQSFTFOUBUJPOBM4UBUF

Slide 39

Slide 39 text

ͭͷΠϯλʔϑΣΠε੍໿

Slide 40

Slide 40 text

ͭͷΞʔΩςΫνϟ੍໿

Slide 41

Slide 41 text

/6--੍໿ w ੍໿͕ଘࡏͤͣίϯϙʔωϯτΛִͯΔ΋ͷ͕ͳ͍ঢ়ଶ w ̎ͭͷઃܭͷϓϩηε w ίϯϙʔωϯτ͔Βߏஙɺ૑଄ੑͱແݶͷϏδϣϯΛڧௐ w ઃܭۭؒΛ۠ผ੍͠໿Λద༻͢Δɺ཈੍ͱཧղΛڧௐɹ

Slide 42

Slide 42 text

ΫϥΠΞϯτʗαʔό w ௨৴͸ରɻ w ಠཱͨ͠௨৴ɻ $4 4UBUFMFTT $BDIF -BZFSFE $P% *'

Slide 43

Slide 43 text

εςʔτϨεੑ w ϦΫΤετؒ͸ແؔ܎ $4 4UBUFMFTT $BDIF -BZFSFE $P% *'

Slide 44

Slide 44 text

Ωϟογϡ w ࠷ߴͷύϑΥʔϚϯε͸ωοτϫʔΫΛ࢖Θͳ͍ࣄ $4 4UBUFMFTT $BDIF -BZFSFE $P% *'

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

$ $ $ $

Slide 48

Slide 48 text

NBYBHF

Slide 49

Slide 49 text

(&5CPPL + $BDIF$POUSPMNBYBHF (&5CPPL ඵ༗ޮ $

Slide 50

Slide 50 text

(&5CPPL "DDFQU-BOHVBHF+" + $BDIF$POUSPMNBYBHF 7BSZ"DDFQU-BOHVBHF (&5CPPL "DDFQU-BOHVBHF&/ & $BDIF$POUSPMNBYBHF 7BSZ"DDFQU-BOHVBHF

Slide 51

Slide 51 text

৚݅෇͖ϦΫΤετ

Slide 52

Slide 52 text

(&5DBU &5BH (&5DBU *G/POF.BUDI /PU.PEJpFE

Slide 53

Slide 53 text

(&5DBU &5BH (&5DBU *G/POF.BUDI 0,&UBH

Slide 54

Slide 54 text

Cache-Control: public

Slide 55

Slide 55 text

$ $ $ $BDIF$POUSPM QVCMJD $BDIF$POUSPM QSJWBUF $

Slide 56

Slide 56 text

Etag GET /cat ETag: 3 batch FW + APP

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

Cache-Control: 
 max-age=0,
 private, 
 must-revalidate ຊ౰ʹ ? https://.com/recipe/1416377

Slide 60

Slide 60 text

http://bearsunday.github.io/manuals/1.0/ja/http-cache.html

Slide 61

Slide 61 text

guzzle-cache- middleware https://github.com/Kevinrob/guzzle-cache-middleware

Slide 62

Slide 62 text

Ωϟογϡઃܭ w OPTUPSF ΩϟογϡෆՄೳʁʣ w OPDBDIF ʢ౎౓֬ೝඞཁʁʣ w QVCMJD QSJWBUF w NVTUSFWBMJEBUF ʢظݶ੾Ε࢖͑Δʁ w NBYBHF w &5BHΛ෇Ճ https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=ja

Slide 63

Slide 63 text

֊૚ԽγεςϜ w )551γεςϜͷதͷίϯϙʔωϯτ w ಁ໌ͳૢ࡞ $4 4UBUFMFTT $BDIF -BZFSFE $P% *'

Slide 64

Slide 64 text

ʢίʔυΦϯσϚϯυʣ w Ϧιʔεͷॲཧͷϊ΢ϋ΢ΛΫϥΠΞϯτͰ࣮ߦ $4 4UBUFMFTT $BDIF -BZFSFE $P% *'

Slide 65

Slide 65 text

ͭͷΞʔΩςΫνϟ੍໿

Slide 66

Slide 66 text

8FCͷ੒ޭཁҼ ௿͍ࢀೖোน WebΛ࢖͏ํ๏ΛֶͿͷ͸؆୯ͰɺWebαΠτΛߏங͢Δͷ΋؆୯Ͱ͢ɻ ֦ுੑ ݸʑͷWebαΠτ͸ɺΫϥΠΞϯτΛյ͢͜ͱͳ͘ɺҰ൩Ͱมߋ͢Δ͜ͱ͕Ͱ͖·͢ɻ਺े೥ ʹΘͨͬͯɺWebͷશମ͸େ෯ʹมߋ͞Ε·͕͢ɺجૅͱͳΔٕज़͸͢΂ͯ͋·ΓมԽ͠·ͤ Μɻ ෼ࢄϋΠύʔϝσΟΞ ΫϥΠΞϯτ͕αʔόͷσʔλͰͰ͖Δ͜ͱʹ͍ͭͯͷ৘ใ͸ɺσʔλͱಉ͡৔ॴʹอ࣋͞Ε ͯɺಉ͡υΩϡϝϯτͰΫϥΠΞϯτʹૹ৴͞Ε·͢ɻ Πϯλʔωοτن໛ γεςϜͷ෦෼ಉ࢜ʹ௕ظతͳؔ܎͸ͳ͘ɺҟͳΔ෦෼͸ҟͳΔ଎౓ͰมԽͰ͖·͢ɻ http://restfulwebapis.com

Slide 67

Slide 67 text

̐ͭͷΠϯλʔϑΣΠεͷ੍໿ w Ϧιʔεͷࣝผ 63* w දݱʹΑΔϦιʔεૢ࡞ w ࣗݾهड़తϝοηʔδ w ϋΠύʔϝσΟΞ੍໿

Slide 68

Slide 68 text

ͭͷΞʔΩςΫνϟ੍໿ ΫϥΠΞϯτʗαʔό Webͷશͯͷ௨৴͸ɺ1ର1Ͱ͢ɻ εςʔτϨε ΫϥΠΞϯτ͕ݱࡏϦΫΤετΛߦ͍ͬͯͳ͍ͱ͖͸ɺαʔό͸ͦͷଘࡏΛ஌Γ·ͤΜɻ Ωϟογϡ ΫϥΠΞϯτ͸Ωϟογϡ͔ΒҎલͷϨεϙϯεΛ࠶ར༻͢Δ͜ͱͰɺωοτϫʔΫ্ͷҠಈΛอଘ͢Δ͜ ͱ͕Ͱ͖·͢ɻ ֊૚ԽγεςϜ ϓϩΩγͷΑ͏ͳ஥հऀ͸ɺΫϥΠΞϯτͱαʔόͷؒʹݟ͑ͳ͍Α͏ʹૠೖ͢Δ͜ͱ͕Ͱ͖·͢ɻ ίʔυΦϯσϚϯυ αʔό͸ɺσʔλʹՃ࣮͑ͯߦՄೳͳίʔυΛૹ৴͢Δ͜ͱ͕Ͱ͖·͢ɻ͜ͷίʔυ͸ɺΫϥΠΞϯτ͕Ϧ ΫΤετͨ͠ͱ͖ʹࣗಈతʹ഑උ͞ΕɺͦΕ͕มߋ͞Εͨ৔߹͸ࣗಈతʹ࠶഑උ͞Ε·͢ɻ http://restfulwebapis.com

Slide 69

Slide 69 text

1.ඞཁͳΞʔΩςΫνϟͷಛੑΛׂΓग़͠·͢ɻ 2.ͦΕʹඞཁͳ੍໿ͷબఆΛͯ͠ɺҰॹʹಈ͘ϓϩτίϧͱଞͷඪ४ͷηοτΛઃ ܭ͠·͢ʢHTTPɺURIɺHTMLɺJavaScriptʣ γεςϜઃܭઓུ http://restfulwebapis.com ෼ࢄϋΠύʔϝσΟΞ ௿͍ࢀೖোน ֦ுੑ Πϯλʔωοτن໛

Slide 70

Slide 70 text

https://etc9.hatenablog.com/entry/2019/11/06/090000

Slide 71

Slide 71 text

3&45"1*ઃܭ

Slide 72

Slide 72 text

No content

Slide 73

Slide 73 text

$ curl -i http://example.com 
 HTTP/1.1 200 OK Content-Type: application/json Link: ; rel="profile" { "wtl": "MjAxMy0wNS0wNiAxMjo1Nzo1MyAtMDcwMA==\n", “grobb34s": […] } $ curl -i http://example.com/profile
 HTTP/1.1 200 OK Content-Type: text/plain 
 The Example.com API =================== Example.com provides access to our blog through an API. In the API, you'll see two major things of interest: `wtl` and `grobb34s` ## wtl The value provided under the `wtl` key is the time the latest blog post was posted, in "%Y-%m-%d %H:%M:%S %z" format. This value is then Base64 encoded. http://www.designinghypermediaapis.com/blog/the-profile-link-relation-and-you.html

Slide 74

Slide 74 text

http://alps.io/

Slide 75

Slide 75 text

wҙຯతهड़ࢠ w෼ྨ wؔ܎

Slide 76

Slide 76 text

No content

Slide 77

Slide 77 text

#BDLFOE%FW 10 %#%FW 'SPOU%FW "1*%FTJHO 6*%FTJHO

Slide 78

Slide 78 text

.FEJB5ZQF 1SPpMF 4UBUF $USM 3FTPVSDF SFM SFM TDIFNBPSH *"/" ϚΠϘΩϟϒϥϦ

Slide 79

Slide 79 text

ࢲͨͪͷ࢓ࣄ *OUFSOFU1SPHSBNJOH1SPHSBNJOH*OUFSOFU

Slide 80

Slide 80 text

r3&45GVM8FC"1* ೥Ҏ্ʹΘͨͬͯ8FC͸ϢʔβʔΛ޾෱ʹͯ͠ ͖ͨɻԯυϧن໛ͷఇࠃͷ༷ͳاۀ͕ݱΕͯ͸ ফ͍͕͑ͯͬͨͦΕΒ͸શͯಉ̐ͭ͡ͷٕज़Λ ࢖͍ͬͯͨɻ )551 63* )5.- BOE+BWB4DSJQU http://restfulwebapis.com

Slide 81

Slide 81 text

!NBNVOE !38"#PPL !ULBXB UBML !LPSJZN ͜ͷεϥΠυ͸'JFMEJOHࢯͷ࿦จͱɺॻ੶ʮ3&45GVM8FC"1*TʯͰ.JLF"NVOETFOࢯ͕ 'JFMEJOHത࢜ͷ3&45࿦จΛʮ"O"1*%FTJHOFS`T(VJEFUPUIF'JFMEJOH%JTTFSUBUJPOʯ ͱͯ͠঺հ͍ͯ͠ΔষΛݩʹͯ͠͞ΒʹղઆΛՃ͑ͨ΋ͷͰ͢ɻ TQFDJBMUIBOLT