https://wantedly.connpass.com/event/55138/ https://github.com/Altech/rails-restful-api/pulls
ฏʗSOHEI TAKENORails 5 Ͱ࡞Δ RESTful API शձapi/v2 शձ 2017/04
View Slide
γΰτͰίίϩΦυϧ• ࣗݾհ• ಋೖഎܠ• ϓϩτίϧ• ج൫࣮• ࣮ફʢ45minʣϝχϡʔ
γΰτͰίίϩΦυϧࣗݾհ
γΰτͰίίϩΦυϧ• Sohei Takeno / @Altech_2015• 20164݄ʹ Wantedly ʹΤϯδχΞͱͯ͠ೖࣾ• Wantedy Visit ʹؔΘ͍ͬͯΔ• άϩʔε ― Push௨ϝʔϧͷσβΠϯվળɾνϡʔχϯάɺͦͷଞ UI ςετ• αʔϏε։ൃج൫ͷඋ ― BigQuery ಋೖ, σʔλղੳδϣϒγεςϜɺPush௨ج൫• Ϛονϯάվળ ― ืूΛ୳͢ػೳʢϑΟϧλɾݕࡧʣͷϩδοΫˍUIվળ• ωΠςΟϒΞϓϦ͚ͷ API ࡞ࣗݾհ
γΰτͰίίϩΦυϧ৽͍͠APIͷಋೖഎܠ
γΰτͰίίϩΦυϧ• api/v1 ͱ͍͏ API namespace ͕ݩʑ͋ͬͨ• ը໘ͱAPI͕ີ݁߹͍ͯͨ͠ʢ؇͍ 1screen - 1 request ํࣜʣ• දࣔΛॏࢹ• ɿ• νʔϜߏͷมԽʹґΔɺը໘ͱີ݁߹ʹىҼ͢Δੜ࢈ੑԼ• ϓϩτίϧ͕ͳ͍ʢϨεϙϯεͷܗࣜΛͲ͏͢Δ͔Λຖճ֬ೝʣಈػ
γΰτͰίίϩΦυϧ• RESTful ͳ API ʹΞʔΩςΫνϟΛมߋ• ϓϩτίϧͷنఆ• → api/v2 ͱͯ͠࡞• ʢɿ௨ৗͷόʔδϣχϯάతͳ͍ํͱҟͳΔʣղܾํ๏
γΰτͰίίϩΦυϧ• νʔϜͷϓϥοτϑΥʔϜ͝ͱͷ୲ํ๏• Web ͱΞϓϦͷϓϩάϥϚҰக͢Δͷ͔ɺ͠ͳ͍ͷ͔• νʔϜͷαʔϏε։ൃͷମ੍• ผʑʹػೳΛ࣮͍ͯ͘͠ͷ͔ɺ౷Ұͯ͠ਐΊ͍ͯ͘ͷ͔ɺWeb ͕ઌߦ͢Δͷ͔ɺΞϓϦ͕ઌߦ͢Δͷ͔• ϢʔβʔʢiOS, Android ϓϩάϥϚʣͷϦςϥγʔ• ΫϥΠΞϯτʢiOS ΞϓϦ, Android ΞϓϦʣͷઃܭ• ΞʔΩςΫνϟʁViewModel Έ͍ͨͳͷΛೖΕΔ͜ͱՄೳ͔ʁ• ͳͲ…લఏɿRESTful ͔ͩΒྑ͍Θ͚Ͱͳ͍API ͷΞʔΩςΫνϟΛܾఆ͢Δࡍʹґଘͨ͜͠ͱͷྫɿ
γΰτͰίίϩΦυϧv1 ࡞࣌
γΰτͰίίϩΦυϧ• Wantedly Visit ॳͷ iOS ΞϓϦϦϦʔε• ಉ͡ҰਓͷϓϩάϥϚ͕ iOS Web ॻ͘• Server-Client = 1 : 1v1࡞࣌ͷ։ൃମ੍ʢ2014/5ʣ
γΰτͰίίϩΦυϧ• Web, iOS, Android ͦΕͧΕҰਓʢUser Growth νʔϜʣ• Web Web Ͱ iterative ʹϦϦʔεɾݕূͯ͠αʔϏεվળΛ͍ͯ͘͠ͷ͕ϝΠϯλεΫ• Web ͕ઌߦ͢Δ։ൃͳͷͰ API Λॻ࣌͘Ϟσϧ͋ΔఔͰ͖͍ͯΔঢ়ଶ• ʢͪͳΈʹݱࡏ Web, iOS ͱʹೋਓʹʣv2࡞࣌ͷ։ൃମ੍ʢ2017/1ʣ
γΰτͰίίϩΦυϧ• ը໘ͷৄࡉʹ͍͍ͪͪ Web ͷΤϯδχΞ͕͍ؔͯͯ͠ੜ࢈ੑ͕Լ͕Δ• มߋͷࡍɺطʹ͋Δը໘ͷ͕ࣝલఏʹͳΔͷͰɺ͍͠• ίϛϡχέʔγϣϯͷ༰͕σʔλʹϑΥʔΧε͞ΕΔ• ϞσϧʹରԠͯ͠ΤϯυϙΠϯτͱίϯτϩʔϥΛ࡞͍ͬͯ͘ͷͰɺมߋ͖͢Օॴ͕໌֬• ઃܭʹ੍͕ՃΘΔͷͰɺΑΓͦ͜ʹϑΥʔΧε͍͍ͨ͢͠ϓϩτίϧϥΠϒϥϦΛಋೖͰ͖ΔΑ͏ʹͳΔಋೖഎܠ·ͱΊapi/v2 ͷಋೖ
γΰτͰίίϩΦυϧϓϩτίϧ
https://github.com/Altech/rails-restful-api/blob/master/README.md
γΰτͰίίϩΦυϧج൘࣮
γΰτͰίίϩΦυϧ• ActiveModelSerializers ΛϦΫΤετύϥϝʔλͱͭͳ͙• N+1 ΛγεςϚςΟοΫʹ͙Έ• ad-hoc ύϥϝʔλΛϢʔβʔʹ͑Δํ๏• ίʔυɿPull Requests · Altech/rails-restful-apiඞཁͩͬͨج൫࣮
γΰτͰίίϩΦυϧ࣮ફ
γΰτͰίίϩΦυϧ• Wantedly Visit ͷձࣾը໘ͷAPIΛ࡞Δ• Ұॹʹॻ͍͍͖ͯ·͢ʂश༰
γΰτͰίίϩΦυϧ• ɿhttps://github.com/Altech/rails-restful-api/pull/7
γΰτͰίίϩΦυϧ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ