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

お前はこれまでに作ったAPIの数を覚えているのか?

 お前はこれまでに作ったAPIの数を覚えているのか?

Nulabさんで行われたGeeks Who Drink -Public API Edition-というイベントで発表しました。

003f59d1b2e3b864c744f8eb21f68e82?s=128

Atsushi Takayama

April 17, 2018
Tweet

Transcript

  1. ͓લ͸͜Ε·Ͱʹ࡞ͬͨ APIͷ਺Λ͍֮͑ͯΔͷ͔ʁ Geeks Who Drink -Public API Edition- 2018/4/16

  2. ࣗݾ঺հ ߴࢁԹ @edvakf ϐΫγϒגࣜձࣾ ࣥߦ໾һCTO݉෱ԬΦϑΟεϚ ωʔδϟʔ JavaScript, PHP, Ruby, Go,

    Scala
  3. ࠓ೔ͷςʔϚ pixivͰ͜Ε·ͰؔΘ͖ͬͯͨ৭ΜͳAPIͷ࿩Λ͠·͢ Web APIͷ͜ͱͰ͢ ΫϥεΠϯλʔϑΣΠεͳͲͷ͜ͱͰ͸͋Γ·ͤΜ

  4. PHP→JS API 2010೥͝Ζ͔Β͋ͬͨɺ͍ΘΏΔී௨ͷJSON over HTTP API PHPͷarrayʢ഑ྻʹ΋࿈૝഑ྻʹ΋ͳΔߏ଄ʣΛjson_encodeͨ͠΋ͷ ܕఆٛͳͲແ͍ αʔόʔͱΫϥΠΞϯτΛಉ࣌ʹσϓϩΠͰ͖Δ PHP΋JS΋ʮintͬΆ͍stringΛ਺஋ͱͯ͠ѻ͑ΔʯͳͲܕʹॊೈ

    DB͔Βऔಘͨ͠஋Λͦͷ··JSONʹͨ͠Γ͍ͯͨ͠ͷͰɺͪΐͬͱةͳ͍͜ͱ ͕͋ͬͨ Τϥʔॲཧ΋ద౰
  5. JSON APIͷΤϥʔॲཧ JSONͱͯ͠ύʔεͰ͖ͳ͚Ε͹Τϥʔ PHPͷΤϥʔॲཧΛHTMLΛฦ͢৔߹ͱJSONΛฦ͢৔߹Ͱ෼͚ͯͳ͔ͬͨͷͰɺ200Ҏ֎ͩ ͱHTMLͷΤϥʔϖʔδΛฦ͍ͯͨ͠ 200Ҏ֎ͳΒΤϥʔ εςʔλείʔυ͸ϓϩΩγ΍ϩάॲཧ΍ݕࡧΤϯδϯͳͲɺࣗ෼ͨͪͰίϯτϩʔϧ͠ ʹ͍͘৔ॴͰ࢖ΘΕΔ αʔόʔͱΫϥΠΞϯτ྆ํΛࣗࣾͰ࣋ͬͯΔͳΒ͋·Γεςʔλείʔυʹ߆Βͳ͍Ͱ ͍͍

    errorͱ͍͏Ωʔ͕͋Ε͹Τϥʔʢ200Ͱ͋ͬͯ΋ʣ →Ͳͷύλʔϯ΋Α͘࢖ͬͯΔ
  6. CSV API ࠷ॳظͷpixivΞϓϦ༻API͸CSVΛฦ͍ͯͨ͠ ྫ͑͹ `id, name, age` Λฦ͢ͳΒ `1000,ࢁాଠ࿠,23` Έ͍ͨͳϨεϙϯεͩͬͨ

    ෳ਺ϨεϙϯεΛฦ͢API͸ෳ਺ߦʹͳΔ APIΛ֦ு͢Δ࣌͸ӈଆʹΧϥϜΛ௥Ճ͢Δ ࢖Θͳ͘ͳͬͨΧϥϜ͸ۭจࣈʹͳΔʢͭ·ΓΧϯϚ͕࿈ଓ͢Δʣ ΧϥϜͷఆٛ͸ࣾ಺υΩϡϝϯτʹ͋Δ ͳͥJSONΛ࢖Θͳ͔ͬͨͷ͔ܦҢ͸ෆ໌ JSONʹൺ΂ͯΩʔΛ࣋ͨͳ͍ͷͰϨεϙϯεαΠζ͸খ͍͞
  7. "Public API" 2012೥ࠒʹCSVͰ͸ͳ͍ʮͪΌΜͱͨ͠ʯεϚϗΞϓϦ޲͚API͕ཉ ͍͠ͱ͍͏੠͕ߴ·Δ ࣾ֎ͷఏܞاۀ͔Β΋APIΛٻΊΒΕΔ͜ͱ͕͋ͬͨ ʮ֎෦޲͚APIʯΛ࡞ͬͯɺΞϓϦ΋ͦΕΛ࢖͏Α͏ʹ͠Α͏ →"Public API" APIυΩϡϝϯτ΋υΩϡϝϯταΠτΛ࡞ͬͯMarkdownͰॻ͍ͨ OAuthೝূΛ͜ͷ࣮࣌૷

  8. "Public API"ͷࣦഊ Twitter API΍GitHub APIͳͲɺެ։API͕ීٴͨ࣌͠୅ͩͬͨͷͰɺෆಛ ఆଟ਺ͷ։ൃऀ͕࢖͏APIΛ૝ఆͯ͠࡞ͬͨ pixivͱ͍͏αʔϏεͷબ୒ͱͯ͠ɺAPIΛҰൠެ։͢Δ͜ͱ͸ͳ͔ͬ ͨ ͍͔ͭ͘ͷఏܞاۀͱɺࣗࣾΞϓϦɾαʔϏε͔Β͔͠࢖Θͳ͍ ࣾ֎޲͚΋૝ఆͨ͠APIͳͷʹɺࣾ಺͔Β͔͠࢖Θͳ͍Ӆ͠ύϥϝʔλ

    ͕͋ͬͨΓ υΩϡϝϯταΠτͷߋ৽΋଺͍ͬͯͨΓ
  9. LSUDsͱSSKDs Web API: The Good Parts (2014) LSUDs: Large Set

    of Unknown Developers େ੎ͷ஌Βͳ͍։ൃऀ޲͚ APIͷߋ৽͸ك SSKDs: Small Set of Known Developers গ਺ͷ஌ͬͯΔ։ൃऀ޲͚ʢࣗࣾΞϓϦ༻APIͳͲʣ APIͷߋ৽͸සൟ
  10. ࣾ಺API ࣾ಺ͷαʔόʔؒ௨৴APIΛThriftͰߏங ThriftɿAPIهड़ݴޠΛॻ͍ͯαʔόʔͷΠϯλʔϑΣΠεͱΫϥΠΞϯτϥΠϒ ϥϦΛࣗಈੜ੒͢Δπʔϧ αʔόʔͷΠϯλʔϑΣΠε࣮૷͚ͩΛ࡞Ε͹ྑ͍ ࣮૷ͱυΩϡϝϯτͷဃ཭͕΄΅ੜ·Εͳ͍ pixiv͸PHPɺपลαʔϏε͸RubyͩͬͨΓScalaͩͬͨΓGoͩͬͨΓ εϚϗΞϓϦͷAPIͱͯ͠͸࢖Θͳ͍͜ͱʹͨ͠ طʹJSON͕σϑΝΫτελϯμʔυʹͳ͍ͬͯͨ όΠφϦͳͷͰɺcurlͰͪΐͬ͜ͱୟ͘Έ͍ͨͳσόοά͕໘౗

  11. ݱࡏͷpixivΞϓϦ༻API "Public API"͸ເͱر๬Λ٧ΊࠐΜͩ΋ͷͩͬͨ ಺෦࣮૷తʹ΋ɺܧঝ΍ந৅Խͷմʹͳ͍ͬͯͨ ݱࡏͷΞϓϦ༻API͸ۃྗγϯϓϧʹɺDBݺͼग़͠ͷؔ਺Λ਺ݸݺΜ ͰJSONͷܗΛ࡞Δ͚ͩʹಛԽ CQRSʢDBҾͬுͬͯ͘Δ͚ͩͳͷʹؤுΓ͗͢Δͳʣ ຊ౰͸Command Query Responsibility

    Separation Swaggerఆٛ͸ඞͣॻ͘
  12. Swagger (Open API Spec) APIఆٛΛॻ͘πʔϧ YAMLͰॻ͘ɺιʔείʔυதʹॻ͘ɺίϝϯτͰॻ͘ͳͲ swagger-uiͱ͍͏υΩϡϝϯτϖʔδͰ࣮ࡍʹϦΫΤετΛૹͬͯΈΔ͜ ͱ͕Ͱ͖Δ swagger-codegenͰΫϥΠΞϯτϥΠϒϥϦੜ੒ ͦ͏͍͏ΤίγεςϜ͕௒ॆ࣮͍ͯ͠Δ

    ࣾ಺Ͱ͸3೥͙Β͍લʹScalaͷAPIͰಋೖͨ͠ͷΛ͖͔͚ͬʹɺRails΍PHPͰ ΋ಋೖ͕ਐΈɺݱࡏ͸Swaggerͷແ͍API͸ك
  13. Swagger-UI

  14. APIఆٛͷࣗಈςετ APIͷ࣮૷͕ఆ͔ٛΒဃ཭͍ͯ͠ͳ͍͜ͱΛ୲อ͍ͨ͠ SwaggerΛRspecͰςετ SwaggerͷAPIఆٛ͸JSON SchemaͷαϒηοτͳͷͰJSON SchemaͷπʔϧͰݕূͰ͖Δ ͋Γ͕ͪͳʮΩʔ͕૿͑ͨͷʹυΩϡϝϯτॻ͖๨ΕͯΔʯ΋ ๷͛ΔΑ͏ʹͨ͠ APIͷϦϑΝΫλϦϯά͕ѹ౗తʹϥΫʹʂ

  15. To REST or Not To REST ʮRESTʹ͢Δ΂͖͔൱͔ʯ͸Αٞ͘࿦ʹͳΔ ݸਓతʹ͸ɺಛʹRESTʹͩ͜ΘΔඞཁ͸ͳ͍ͱײ͡Δ RailsΛ࢖͍ͬͯΔͳΒRESTʹͯ͠΋ྑ͍ͷͰ͸ɺఔ౓ RailsͰ΋ϧʔςΟϯάͰଟগαϙʔτ͕͋Δ͚ͩ

    Swaggerॻ͍͓͚ͯ͹URLͷܗࣜ͸ΦϚέఔ౓ ಉ༷ʹGraphQL΋͋·Γ৯ࢦ͕ಈ͔ͳ͍ JSON+SwaggerͷΤίγεςϜ͕͜Ε͚ͩॆ࣮ͨ͠ࠓͱͳͬͯ͸…
  16. ͦͷଞ APIΛ࢖ͬͯ৭ʑͰ͖Δ࿩

  17. ΞϓϦͱ΢ΣϒͰಉ͡API

  18. Viron

  19. ·ͱΊ ࣾ಺Ͱ͔͠࢖Θͳ͍ͷͳΒγϯϓϧʹ࡞Ζ͏ APIυΩϡϝϯτ͸ઈରॻ͜͏