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

速習XRPC / Learning XRPC

鎌倉
April 28, 2023

速習XRPC / Learning XRPC

Bluesky/ATProtocol勉強会 #1の発表資料です。
Bluesky (ATP) のAPIを叩いてみたい人向けに、基本的な概念や触り方を解説しています。

鎌倉

April 28, 2023
Tweet

More Decks by 鎌倉

Other Decks in Technology

Transcript

  1. ଎श931$
    #MVFTLZ"51SPUPDPMษڧձ
    ח૔ !PNJCTLZTPDJBM

    View Slide

  2. ࣗݾ঺հ
    w 8FCΤϯδχΞ
    w ੨Ӣͱ͍͏#MVFTLZ༻"OESPJEΫϥΠΞϯτΛ࡞ͬͯ·͢
    w IUUQTHJUIVCDPNBLJPNJLTFJVO

    View Slide

  3. લఏ஌ࣝͱΰʔϧ
    w લఏ஌ࣝ
    w Ұൠతͳ8FC"1*͕৮ΕΔ
    w ˞࣮૷ऀࢹ఺ͷ࿩͕த৺Ͱ͢
    w ΰʔϧ
    w -FYJDPOͷجຊతͳา͖ํ͕Θ͔Δ
    w ཁ఺Λ͔͍ͭ·ΜͰۦ͚଍ؾຯʹਐΈ·͢

    View Slide

  4. ΞδΣϯμ
    w ओཁͳͭͷ༻ޠ 931$ɺ-FYJDPOɺ/4*%

    w -FYJDPOೖ໳ ୳͠ํͱओཁͳܕ

    w ϦΫΤετͱೝূ
    w SFDPSEͱϦϙδτϦͷૢ࡞
    w ͦͷଞ

    View Slide

  5. ओཁͳͭͷ༻ޠ

    View Slide

  6. 931$
    w $SPTTTZTUFN3FNPUF1SPDFEVSF$BMMT
    w 31$ ԕִखଓ͖ݺͼग़͠
    ͷن֨ͷҰछ
    w H31$ 40"1
    w "51SPUPDPMͷಠࣗ࢓༷
    w )551 4
    ͷ্Ͱಈ࡞
    w 1%4ͱͷσʔλͷ΍ΓऔΓʹར༻

    View Slide

  7. -FYJDPO
    w ϨΩγίϯ
    w ӳ<໊>༻ޠूɺޠኮɺࣙॻ
    w 931$ͷϝιου΍σʔλܕͷఆ
    ٛ
    w ·ͨ͸ͦΕΒͷϑΥʔϚοτ
    +40/4DIFNB෩

    View Slide

  8. /4*%
    w /BNF4QBDFE*%
    w -FYJDPOͷϦιʔεΛҰҙʹࣝผ͢
    ΔͨΊͷ*%
    w 3FWFSTF%/4ܗࣜͰදه
    w +BWBͰΑ͘ݟΔΞϨ
    w ΤϯυϙΠϯτ·ͨ͸ܕͱͯ͠࢖༻

    View Slide

  9. "51SPUPDPM 931$
    Ͱͷ"1*ݺͼग़͠
    -FYJDPOʹΑͬͯݺͼग़͕͠ఆΊΒΕͨ
    /4*%ܗࣜͷΤϯυϙΠϯτΛίʔϧ

    View Slide

  10. -FYJDPOࣄ࢝Ί

    View Slide

  11. -FYJDPOͷ୳͠ํ
    w ެࣜυΩϡϝϯτʹҰཡ͋Γ·͢
    w IUUQTBUQSPUPDPNEPDT
    w ͨͩ͠৘ใ͕ݹ͔ͬͨΓ΍ෆ଍͍ͯ͠
    Δ৔߹΋
    w ࠷৽ͷ࢓༷ʹ͍ͭͯ͸HJUIVCͷϦϙδτ
    ϦͷMFYJDPOTΛࢀর͢Δͷ͕࣮֬
    w IUUQTHJUIVCDPNCMVFTLZTPDJBM
    BUQSPUPUSFFNBJOMFYJDPOT

    View Slide

  12. -FYJDPOͷܕ
    w PCKFDU
    w QSPDFEVSF
    w RVFSZ
    w ϓϦϛςΟϒܕ JOUFHFS΍TUSJOHͳͲ

    w ಛघͳܕ SFDPSE SFG VOJPO CMPC UPLFO TVCTDSJQUJPOͳͲ

    w ࠓճ͸SFDPSEͷΈѻ͍·͢

    View Slide

  13. PCKFDU
    {


    "id": "app.bsky.actor.defs",


    "defs": {


    "profileViewBasic": {


    "type": "object",


    "required": ["did", "handle"],


    "properties": {


    "did": { "type": "string" },


    "handle": { "type": "string" },


    "avatar": { "type": "string" },


    "viewer": { "type": "ref" },


    "labels": { "type": "array" }


    }


    }


    }


    }
    w Ұൠతͳσʔλܕ
    w SFRVJSFE͸OPUOVMM
    w ˠͷ/4*%͸
    BQQCTLZBDUPSEFGTQSP
    fi
    MF7JFX#BTJD
    ˞ൈਮ

    View Slide

  14. QSPDFEVSF
    {


    "id": "com.atproto.server.createSession",


    "defs": {


    "main": {


    "type": "procedure",


    "input": {


    "schema": {


    "properties": {


    "identifier": { "type": "string" },


    "password": { "type": "string" }


    }


    }


    },


    "output": {


    "schema": {


    "properties": {


    "accessJwt": { "type": "string" },


    "did": { "type": "string" },


    }


    }


    }


    }


    }


    }
    w ߋ৽ܥϝιου
    w JOQVUPVUQVUΛ࣋ͭ
    w ӈͷ/4*%͸
    DPNBUQSPUPTFSWFSDSFB
    UF4FTTJPO NBJO͸লུ

    ˞ൈਮ

    View Slide

  15. RVFSZ
    {


    "id": "app.bsky.feed.getTimeline",


    "defs": {


    "main": {


    "type": "query",


    "parameters": {


    "type": "params",


    "properties": {


    "cursor": { "type": "string" }


    }


    },


    "output": {


    "schema": {


    "properties": {


    "cursor": { "type": "string" },


    "feed": { "type": "array" }


    }


    }


    }


    }


    }


    }
    w ࢀরܥϝιου
    w QBSBNFUFSTPVUQVUΛ࣋ͭ
    w ˠͷ/4*%͸
    BQQCTLZGFFEHFU5JNFMJO
    F
    ˞ൈਮ

    View Slide

  16. ϦΫΤετͱೝূ

    View Slide

  17. ϦΫΤετ
    w #MVFTLZͷ৔߹͸IUUQTCTLZTPDJBMYSQDOJTEʹରͯ͠ߦ͏
    w αʔυύʔςΟ1%4ͷ৔߹͸ACTLZTPDJBMAͷ෦෼͕มΘΔ
    w ྫ
    w QSPDFEVSF1045IUUQTCTLZTPDJBMYSQD
    DPNBUQSPUPTFSWFSDSFBUF4FTTJPO
    w RVFSZ(&5IUUQTCTLZTPDJBMYSQDBQQCTLZGFFEHFU5JNFMJOF

    View Slide

  18. ϩάΠϯͷ-FYJDPO
    {


    "id": "com.atproto.server.createSession",


    "defs": {


    "main": {


    "type": "procedure",


    "input": {


    "encoding": "application/json",


    "schema": {


    "required": [ "identifier", "password" ],


    "properties": {


    "identifier": { "type": "string" },


    "password": { "type": "string" }


    }


    }


    }


    }


    }


    }
    ˞ൈਮ
    ϦΫΤετ͸1045
    ϦΫΤετ#PEZ͸+40/
    JEFOUJ
    fi
    FSͱQBTTXPSE͸ඞਢ
    IBOEMFPSFNBJM

    ΤϯυϙΠϯτ͸
    YSQDDPNBUQSPUPTFSWFSDSFBUF4FTTJPO

    View Slide

  19. ϩάΠϯͷϦΫΤετ
    curl -X POST \


    -H 'Content-Type: application/json' \


    -d '{"identifier": "tester.bsky.social", "password": "foo"}' \


    'https://bsky.social/xrpc/com.atproto.server.createSession'


    # response


    {


    "did":"did:plc:ji4f2ypncqko5cm62pmyxh67",


    ...


    "accessJwt":"...",


    "refreshJwt":"..."


    }
    ೝূ͕ඞཁͳΤϯυϙΠϯτ͸
    ฦ͖ͬͯͨ+85ΛϦΫΤετʹؚΊΔ

    View Slide

  20. RVFSZͷ-FYJDPO ϢʔβϑΟʔυͷऔಘ

    {


    "id": "app.bsky.feed.getAuthorFeed",


    "defs": {


    "main": {


    "type": "query",


    "parameters": {


    "type": "params",


    "required": ["actor"],


    "properties": {


    "cursor": { "type": "string" }


    }


    }


    }


    }


    }
    ˞ൈਮ
    ϦΫΤετ͸(&5
    ΫΤϦύϥϝʔλ
    ΤϯυϙΠϯτ͸
    YSQDBQQCTLZGFFEHFU"VUIPS'FFE
    BDUPS ͲͷϢʔβ͔
    ͸ඞਢ

    View Slide

  21. RVFSZͷϦΫΤετ ϢʔβϑΟʔυͷऔಘ

    curl -X GET


    -H 'Authorization: Bearer ${createSessionで取得したaccessJwt}'


    'https://bsky.social/xrpc/app.bsky.feed.getAuthorFeed?actor=foo'


    View Slide

  22. ϦϙδτϦͱSFDPSE

    View Slide

  23. ϦϙδτϦ %BUB3FQPTJUPSZ

    w 5-%3
    w ϦϙδτϦ͸ॺ໊σʔλͷίϨΫγϣϯ
    w HJUͷϦϙδτϦΈ͍ͨͳ΋ͷ ͨͩ͠%#ͷϨίʔυ༻

    w Ϣʔβ͸֤ʑͷެ։ΞΫςΟϏςΟΛࣗ෼ͷϦϙδτϦʹ௥ه
    w #MVFTLZ BQQCTLZ
    ͷ৔߹ɺ౤ߘɾϑΥϩʔɾ͍͍ͶͳͲ͕֨ೲ͞
    ΕΔ

    View Slide

  24. SFDPSE
    {


    "id": "app.bsky.feed.post",


    "defs": {


    "main": {


    "type": "record",


    "key": "tid",


    "record": {


    "type": "object",


    "required": ["text", "createdAt"],


    "properties": {


    "text": { "type": "string" },


    "createdAt": {


    "type": "string",


    "format": "datetime"


    }


    }


    }


    }


    }


    }
    w ϦϙδτϦ༻ͷσʔλܕ
    w ˠ͸#MVFTLZͷ౤ߘ
    QPTU
    ͷܕ
    ˞ൈਮ

    View Slide

  25. ϦϙδτϦૢ࡞
    {


    "id": "com.atproto.repo.createRecord",


    "defs": {


    "main": {


    "type": "procedure",


    "input": {


    "encoding": "application/json",


    "schema": {


    "type": "object",


    "properties": {


    "repo": { "type": "string" },


    "collection": { "type": "string" },


    "record": { "type": "unknown" }


    }


    }


    }


    }


    }


    }
    w ϦϙδτϦ΁ͷϨίʔυ
    ௥ՃͷQSPDFEVSF
    w ౤ߘ΍ϑΥϩʔͳͲ͸ର
    ৅ͱͳΔSFDPSEΛ౉ͯ͠
    ߦ͏
    ˞ൈਮ

    View Slide

  26. ౤ߘ࡞੒ͷϦΫΤετ
    curl -X POST \


    -H 'Authorization: Bearer ${accessJwt}' \


    -H 'Content-Type: application/json' \


    -d '{


    "repo": "tester.bsky.social",


    "collection": "app.bsky.feed.post",


    "record": {


    "text": "Hello, world!",


    "createdAt": "2023-04-28T22:00:00+09:00"


    }


    }' \


    'https://bsky.social/xrpc/com.atproto.repo.createRecord'


    View Slide

  27. ͦͷଞࡉ͔͍৭ʑ
    w SLFZ͸BUBMJDFIPTUDPNJPFYBNQMFTPOHZ*D[DDQBͷ
    Z*D[DDQB
    w CMPCͷܕ͸͜ͷลΛࢀর
    w େഁյҎલͷσʔλ͸SFGͱTJ[F͕ͳ͍ͷͰ஫ҙ
    w !BUQSPUPBQJͩͱࣗಈͰSFGͱTJ[FΛิ׬͢ΔΑ͏ʹͳ͍ͬͯΔ
    w ΤϥʔϋϯυϦϯά͸͜͜Λࢀর

    View Slide

  28. ิ଍ͱ͔
    w ۦ͚଍Ͱ͢Έ·ͤΜʂ
    w ʮࠓ೔ͷൃදͳΜ΋Θ͔ΒΜ͔ͬͨʯͱ͍͏ํ͸NBUUO͞Μͷʰ։ൃ
    ࢹ఺͔ΒݟΔɺ৽͍͠෼ࢄܕ4/4ʮ#MVFTLZʯͱ"51SPUPDPMͷՄೳ
    ੑʱͱ͍͏هࣄ΋νΣοΫͯ͠Έ͍ͯͩ͘͞
    w IUUQTHJIZPKQBSUJDMFCMVFTLZBUQSPUPDPM

    View Slide

  29. Ҏ্🫡

    View Slide