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

REST脳脱出のためのGraphQLの命名の話

asmsuechan
December 19, 2018
260

 REST脳脱出のためのGraphQLの命名の話

asmsuechan

December 19, 2018
Tweet

Transcript

  1. REST೴୤ग़ͷͨΊͷ໋໊ͷ࿩
    asmsuechan

    View Slide

  2. asmsuechan

    ݾ

    հ
    0
    ݸਓϓϩμΫτͱ͔ͰGraphQL࢖ͬͯΔ
    ϑϩϯτɺαʔόʔɺͪΐͬͱΫϥ΢υ
    Alibaba Cloud MVP

    View Slide

  3. GraphQLͷ໊લ෇͚



    ͢
    ͜
    ͱ
    “GraphQLͬΆ͍”໊લʹ

    ͢ΔͨΊʹࢲ͕ҙ͍ࣝͯ͠Δ͜ͱ
    1
    query΍mutationͷ໊લͷ࿩

    View Slide

  4. (1) queryͷ৔߹
    ݁

    ໊લͷཪʹόοΫΤϯυͷಈ࡞͕ݟ͑Δ
    2.1
    REST೴
    ໊લͷཪʹཉ͍͠σʔλ͕ݟ͑Δ GraphQL
    ͿͬͪΌ͚queryͷ໋໊͸RESTͱ͋·Γ͕ࠩͳ͍ؾ΋͢Δ
    σʔλΛऔͬͯ͘Δ΍ͭ

    View Slide

  5. (1) GET: /users/:idΛqueryʹ͢Δ

    ͑
    ͹
    getUser(id: $id) {
    email name
    }
    (ਖ਼௚͜Ε͸શવڐͤΔ)
    ϢʔβʔΛ৘ใΛදࣔ͢ΔͨΊͷΤϯυϙΠϯτ
    2.1
    user(id: $id) {
    email name
    }
    X O
    ???ʮԶ͸getUser͍ͨ͠Μ͡Όͳͯ͘userͷ৘ใ͕ཉ͍͠ΜͩΑʯ

    View Slide

  6. (2) mutationͷ৔߹
    ݁

    ໊લͷཪʹϦιʔε͕ݟ͑Δ
    2.2
    REST೴
    ໊લͷཪʹৼΔ෣͍͕ݟ͑Δ GraphQL
    ※Ϧιʔε: αʔόʔ಺ͰऔΓѻΘΕΔσʔλͷҙ
    ※ৼΔ෣͍: ΫϥΠΞϯτͰϢʔβʔ͕࣮ߦ͢Δಈ࡞ͷҙ
    σʔλΛߋ৽͢Δ΍ͭ

    View Slide


  7. ͑
    ͹
    (2) POST: /users/:id/followΛmutationʹ͢Δ
    mutation
    createFollowee(id: $id) {
    user { id name }
    }
    mutation follow(id: $id) {
    user { id name }
    }
    FolloweeͬͯϦϨʔγϣϯ͕ݟ͑ͯ͠·͏ “follow”Ͱ1ͭͷৼΔ෣͍͕ݟ͑Δ
    (ϢʔβʔΛϑΥϩʔ͢ΔͨΊͷΤϯυϙΠϯτ)
    ײ͡Δྗ͕େࣄ
    2.2
    X O

    View Slide

  8. ͳͥ͜Ε͕ྑ͍ͱࢥ͏ͷ͔


    3
    GraphQL͸όοΫΤϯυͷσʔλߏ଄Λ஌Βͳ͍
    ΫϥΠΞϯτͷ։ൃऀͨͪͷͨΊʹ࡞ΒΕ͔ͨΒ
    ͭ·Γྺ࢙తഎܠ

    View Slide

  9. ྺ࢙తഎܠ


    3
    ΫϥΠΞϯτ࡞Δਓͱαʔόʔ࡞Δਓ͸ผ(ͷ͸ͣ)
    σΧ͍૊৫Ͱෳࡶͳσʔλߏ଄ͷαʔϏεΛӡ༻͍ͯ͠Δதɺ

    σʔλߏ଄Λ஌Βͳ͍ਓͰ΋ָʹཉ͍͠σʔλΛऔಘ͍ͨ͠
    GraphQLΛ࡞ͬͨͷ͸Facebook

    View Slide

  10. ྺ࢙తഎܠ


    3
    (࣮࢞ͷ౤ߘ)
    • ༑ୡͷ౤ߘͷதʹ༑ୡͷ༑ୡͷίϝϯτ͕ݟ͑Δ
    • ͍͍Ͷʹ͸ࣗ෼ͷ༑ୡ͕༏ઌදࣔ͞ΕΔ
    ϦϨʔγϣϯΛ͜Ͷ͘Γճ͍ͯ͠Δ

    View Slide

  11. ྺ࢙తഎܠ


    3
    ϦιʔεAΛऔ͖ͬͯͨΒͦͷidʹج͍ͮͯ

    ϦιʔεBΛऔ͖ͬͯͯ….

    Έ͍ͨͳ࿩͕άνϟάνϟʹଓ͍͍ͯ͘
    RESTͰ΍ΔͱԿ౓΋ϦΫΤετΛૹΔඞཁ͕͋Δ
    ͜ΕΛָʹͨͯ͘͠ੜ·Εͨͷ͕GraphQL

    View Slide

  12. ݴ͍͍ͨ͜ͱ
    ݁

    ໊લͷཪʹόοΫΤϯυ͕ݟ͑Δ
    5
    REST೴
    ໊લͷཪʹΫϥΠΞϯτ͕ݟ͑Δ GraphQL
    ※͜Ε͸ࢲͷࢦ਑Ͱ͋ͬͯղͰ͸͋Γ·ͤΜ

    View Slide


  13. View Slide