Upgrade to Pro — share decks privately, control downloads, hide ads and more …

REST 6+4=9の制約

REST 6+4=9の制約

このスライドは書籍「RESTful Web APIs」の付録の中でMike Amundsen氏が
Fielding博士のREST論文を「An API Designer’s Guide to the Fielding Dissertation」
として紹介している箇所の解説です。

RESTful Web APIs
https://amzn.to/2FSF0HD

Akihito Koriyama

March 13, 2019
Tweet

More Decks by Akihito Koriyama

Other Decks in Technology

Transcript

  1. ෼ࢄϋΠύʔϝσΟΞ w දݱ΍੍ޚ৘ใ͸ϦϞʔτʹ͋Δɻมߋʹ͸αʔόʔͷೝূ͕ඞཁɻ w ෼ࢄϋΠύʔϝσΟΞͷݪଇɿ w σʔλʹΑͬͯ͋ͳ͕ͨԿΛͰ͖Δ͔ʹ͍ͭͯͷࢦࣔΛड͚औΓʢʮϓϨθϯςʔ γϣϯͱ੍ޚ৘ใʯʣɺͦΕΛσʔλࣗମͱಉ͡Α͏ʹѻ͍·͢ɻαʔό͸ɺͦͷ͢ ΂ͯΛ୲౰͍ͯ͠·͢ɻ w

    ϦιʔεؒͷϦϯΫʢ҆શͳભҠʣɺϦιʔεঢ়ଶΛมߋʢ҆શͰͳ͍ભҠʣΛड͚औ ΔɻʢγεςϜ͸μΠφϛοΫʹมߋՄೳʣ w ֎෦ʹ࣋ͯ͹ɺαʔόʔͷಈ࡞͕มΘΕ͹ΫϥΞΠϯτ͕յΕқ͘ͳΔɻΫϥΠΞϯτ Λյͣ͞ʹαʔόʔͷಈ࡞Λม͑ΒΕͳ͍ͷͰ͋Ε͹ɺʹ֦ுੑ͕ͳ͍
  2. "1*˺8FC w ௿͍ࢀೖোน ֦ுੑ w શͯͷΫϥΠΞϯτΛҰ౓ʹมߋ͢ΔඞཁɻΠϯλʔωοτن໛͸ͳ͘ͳ Δɻ෼ࢄϋΠύʔϝσΟΞͳ͠ɻʢࣾ಺"1*ʣ w Πϯλʔωοτن໛ ௿͍ࢀೖোน

    w ֦ுੑͱ෼ࢄϋΠύʔϝσΟΞΛఘΊΔʢݱࡏͷओྲྀʣ w ֦ுੑͱΠϯλʔωοτن໛ w ෼ࢄϋΠύʔϝσΟΞΛ࢖͍ɺ௿͍ࢀೖোน͸ࣦ͏
  3. • ౷ҰΠϯλϑΣʔεɿ ͜ͷ੍໿͸ RESTful API ͷઃܭͷத֩Ͱ͋Γɺ4 ͭͷଆ໘ΛؚΈ·͢ɻ
 ◦ཁٻʹΑΔϦιʔεࣝผɿ Ϧιʔε͸ཁٻͰࣝผ͞ΕɺΫϥΠΞϯτʹฦ͞ΕΔදݱͱ͸ผͰ͢ɻ
 ◦දݱʹΑΔϦιʔεૢ࡞ɿ

    ΫϥΠΞϯτ͸ϦιʔεΛදݱ͢ΔϑΝΠϧΛड͚औΓ·͢ɻ͜ΕΒͷදݱ ʹ͸ɺमਖ਼΍࡟আΛՄೳʹ͢Δͷʹे෼ͳ৘ใؚ͕·Ε͍ͯΔ͜ͱ͕ඞཁͰ͢ɻ
 ◦ࣗݾهड़తϝοηʔδɿ ΫϥΠΞϯτʹฦ͞ΕΔ֤ϝοηʔδʹ͸ɺΫϥΠΞϯτ͕৘ใΛͲͷΑ͏ ʹॲཧ͢΂͖͔Λهड़͢Δे෼ͳ৘ใؚ͕·Ε͍ͯ·͢ɻ
 ◦ΞϓϦέʔγϣϯঢ়ଶͷΤϯδϯͱͯ͠ͷϋΠύʔϝσΟΞɿ ϦιʔεʹΞΫηεͨ͠ޙɺREST Ϋϥ ΠΞϯτ͸ɺݱࡏར༻Մೳͳଞͷ͢΂ͯͷΞΫγϣϯΛϋΠύʔϦϯΫΛ௨ͯ͡ݟ͚ͭΒΕΔඞཁ͕͋ Γ·͢ɻ
 https://www.redhat.com/ja/topics/api/what-are-application-programming-interfaces
  4. දݱʹΑΔϦιʔεૢ࡞ w ϦιʔεදݱՄೳͳԿͰ΋ w දݱͷ࣮ଶ͸όΠτྻzA representation is a sequence of

    bytes” 
 ʢ= ωοτϫʔΫͰసૹՄೳʣ w ඪ४Խ͞ΕͨHTTPϝιουʢGETͱPOSTʣͷηοτΛ࢖༻ͯ͠ަޓʹ දݱΛૹ৴͢Δ͜ͱʹΑͬͯϦιʔεΛૢ࡞
  5. Web API͸ɺ৽੍͍͠໿Λಋೖ͠·͢ɻηϚϯςΟοΫΪϟοϓͰ͢ɻࢲͨͪ͸10೥Ҏ্ʹΘͨΔηϚϯςΟοΫΪϟοϓΛத৺ʹ ٞ࿦͠ɺ͍͔ͭ͘ͷϑΟʔϧσΟϯά੍໿͸·ͩॏཁͰ͋Δͱ͍͏߹ҙʹୡͨ͠΋ͷͷɺղܾࡦ͸Ͳ͜ʹ΋ݟ͍͑ͯ·ͤΜɻ͋ͳ ͕ͨ͜ͷٞ࿦ͷͲͪΒଆʹ͍Δ͔Λ͔֬ΊΔʹ͸ɺ͋ͳͨʹͱͬͯ࠷΋ॏཁͳWebͷΞʔΩςΫνϟͷಛੑΛܾఆ͢Δඞཁ͕͋Γ ·͢ɻ
 ͦΕ͸௿͍ࢀೖোนɺͭ·Γਓʑ͕αΠτݻ༗ͷτϨʔχϯάͳ͠ʹWebαΠτΛ࢖༻͢Δ͜ͱΛՄೳʹ͢ΔಛੑͰ͔͢ʁ ֦ு ੑɺͭ·ΓWebαΠτ͕ΫϥΠΞϯτΛյ͢͜ͱͳ͘׬શͳ࠶ઃܭʹ଱͑Δ͜ͱΛՄೳʹ͢ΔಛੑͰ͔͢ʁ ͦΕͱ΋Πϯλʔωο τن໛ɺͭ·Γ୭΋͕ࣗ෼ͷ޷͖ͳWebϒϥ΢βΛ࢖༻ͯ͠ɺࣗ෼ͷϖʔεͰΞοϓάϨʔυ͢Δ͜ͱΛՄೳʹ͢ΔಛੑͰ͔͢ʁ


    ࢲ͸ɺ௿͍ࢀೖোนΛ٘ਜ਼ʹͯ͠ɺ֦ுੑͱΠϯλʔωοτن໛Λબ୒͠·ͨ͠ɻͦΕ͸ɺ·͞ʹηϚϯςΟοΫΪϟοϓͦΕࣗ ମ͕ࢀೖোนΛൃੜ͍ͤͯ͞Δ͔ΒͰ͢ɻͲΜͳAPIΛ࢖༻͢Δͷ΋ɺಉ౳ͷWebαΠτΑΓࠔ೉Ͱ͢ɻϋΠύʔϝσΟΞϕʔεͷ ઃܭ͸ɺΑΓߴ͍ࢀೖোนΛൃੜͤ͞·͕͢ɺ֦ுੑͱΠϯλʔωοτن໛Λ͋ͳͨʹ༩͑·͢ɻͦΕ͸௕ظతʹෆՄܽͳ΋ͷͰ ͢ɻ
 ͦͯ͠ɺ͜Ε͸௕ظతͳϓϩδΣΫτͰ͢ɻࢲͨͪ͸ɺҰൠతͳϋΠύʔϝσΟΞλΠϓ΍ΞϓϦέʔγϣϯηϚϯςΟΫεͷڞ௨ ηοτΛ࢖༻͢Δͱ͍͏ڠఆʹΑͬͯɺΑΓݡ͍ΫϥΠΞϯτϥΠϒϥϦΛ࢖ͬͯࢀೖোนΛԼ͛Δ͜ͱ͕Ͱ͖·͢ɻ͔͠͠ɺࢲ ͕֦ͨͪுੑ΍Πϯλʔωοτن໛Λ์غͨ͠ͳΒɺͦΕΒΛऔΓ໭͢͜ͱ͸ܾͯ͠ͳ͍Ͱ͠ΐ͏ɻ http://restfulwebapis.com