RESTful な API におけるファイルアップロードについて
3&45GVMͳ"1*ʹ͓͚ΔϑΝΠϧΞοϓϩʔυʹ͍ͭͯ۔ᖒխਓ5VFTCONFIDENCIALSmartHR EngineerAPI Study #4
View Slide
CONFIDENCIAL۔ᖒ խਓ@masato_serizawa• גࣜձࣾ KUFU ΤϯδχΞ ͰɺSmartHR ͱ͍͏αʔϏεΛ։ൃ͍ͯ͠·͢• ΤϯδχΞͱͯ͠ͷΩϟϦΞͷ΄ͱΜͲΛ WebAPI ͷઃܭɾ։ൃɾӡ༻ɾൢചΛͯ͠ա͍ͯ͝͠·͢• ͨ·ʹ Hackathon ʹग़ͨΓ͠·͢• झຯ Data Visualization Ͱ͢
ຊ͓͢Δ͜ͱʰ3&45GVM"1*ʹ͓͚ΔϑΝΠϧΞοϓϩʔυʱ
CONFIDENCIALWebAPI Λ։ൃ͍ͯ͠ΔͱɺϑΝΠϧΛѻ͍͍ͨ໘ʹग़͘Θ͢͜ͱ͋Δͱࢥ͍·͢ɻͨͩɺ͍͟ REST ͷ֓೦ʹϑΝΠϧͷೖग़ྗΛͯࠐ͏ͱ͢Δͱɺ͍·͍ͪͬ͘͠Γͤ͞ΒΕͣɺΉ͜ͱʹͳΔͷͰͳ͍Ͱ͠ΐ͏͔ɻࠓճ࣮αʔϏεͷྫΛ౿·͑ͭͭɺϕετϓϥΫςΟεΛ୳ٻ͍ͯ͜͠͏ͱࢥ͍·͢ɻ
ϑΝΠϧͷૹ৴ํ๏
CONFIDENCIAL•RFC2388 Ͱఆٛ͞Ε͍ͯΔ HTTP ʹ͓͚ΔϑΝΠϧૹ৴ͷԦಓ•HTML ϑΥʔϜ͔ΒϑΝΠϧΛૹ৴͢ΔͨΊͷن֨ͰɺϑΝΠϧσʔλҎ֎ʹ༷ʑͳσʔλΛਵͤ͞ΒΕΔ•όΠφϦΛѻ͑ΔϝϦοτ͕͋Δ໘ɺJSON ϕʔεͷ API ͱͷੑ͍NVMUJQBSUGPSNEBUB
CONFIDENCIALNVMUJQBSUGPSNEBUB9O+-F;*CC(6:U[12+V$POUFOU%JTQPTJUJPOGPSNEBUBOBNFUJUMFUJUMF9O+-F;*CC(6:U[12+V$POUFOU%JTQPTJUJPOGPSNEBUBOBNFEFTDSJQUJPOEFTDSJQUJPO9O+-F;*CC(6:U[12+V$POUFOU%[email protected]9O+-F;*CC(6:U[12+V$POUFOU%[email protected]<>pMFOBNFTBNQMFQOH$POUFOU5ZQFJNBHFQOH$POUFOU-FOHUI\1VUCJOBSZDPOUFOUTUIBUZPVXBOUUPVQMPBE^UBC"1*ͷαϯϓϧΑΓҾ༻
CONFIDENCIAL•ϑΝΠϧσʔλΛ Base64 ΤϯίʔυͰจࣈྻԽͯ͠ѻ͏•ಛʹ RFC Ͱఆٛ͞Ε͍ͯΔͷͰͳ͍͕ɺେखWeb αʔϏεͷ API Ͱͷ࠾༻࣮͕͋Δ•จࣈྻͳͷͰͦͷ·· JSON ʹ٧ΊΕΔ໘ɺσʔλ༰ྔ͕͔͞ΜͰ͠·͏σϝϦοτ͕͋Δ#BTF
CONFIDENCIAL\BTTFU\LFZFYBNQMFHJG BUUBDINFOU58'V*(M[*(3QD3QCNEB9/P;82T*(WE$#WCNY*(+*(IQDZ#Z;8'[CT*(+E$#JF4#B(M[*)/QCNEC('Z*)#E87L*('V;$#QCN3M;N'B8EI:NYM*(EMCN7Z:93QCHC:HBWEYM;(EM-$#MF(/M;83[*)3P;4#[B(ZE$#;8IMC87V:6HC:H:8*(/IDNIC$#XC(7ID7Z;4^^#BTF
ϑΝΠϧͷอଘํ๏
CONFIDENCIAL•ಛఆϦιʔεͷಛఆΞτϦϏϡʔτʹରͯ͠ϑΝΠϧσʔλΛૹΔํࣜ•RESTful API Ͱ΄ͱΜͲͷ߹ɺૹ৴͢ΔϑΝΠϧσʔλԿ͔͠ΒͷϦιʔεʹඥͮͣ͘ͳͷͰɺײతͱ͍͑ײత•ϑΝΠϧΛ͍͔ͭ͘ͷϦιʔεͰ͍·Θ͍ͨ͠߹ʹ͍͍ͯͳ͍Ϧιʔεඥ͚ύλʔϯ
CONFIDENCIAL•ϑΝΠϧΞοϓϩʔυͷΤϯυϙΠϯτΛ࡞Γɺͦ͜ʹલͬͯϑΝΠϧΛૹΔํࣜ•Ξοϓϩʔυͨ͠ϑΝΠϧΛ1ͭͷϦιʔεͱͯ͠൚༻తʹѻ͍͍ͨ߹ʹ༗ޮ•ଞͷϦιʔεʹඥ͚Δ߹ɺID URLɺύεͳͲΛͦͷϦιʔεͷΞτϦϏϡʔτʹઃఆ͢͠ඞཁ͕͋Δ൚༻ϑΝΠϧΞοϓϩʔυύλʔϯ
࣮αʔϏεͷྫ
CONFIDENCIAL•Contents API ͱ͍͏൚༻ϑΝΠϧΞοϓϩʔυͷΤϯυϙΠϯτ͕͋Δ•͜ΕΛ͏͜ͱͰɺʮίϝϯτΤϦΞʹϑΝΠϧΛυϥοάΞϯυυϩοϓͯͦ͠ͷ··ϚʔΫμϯʹམͱ͠ࠐΉʯΈ͍ͨͳڍಈΛ࣮ݱ͍ͯ͠ΔͱࢥΘΕΔ•Base64 ͰσʔλΛૹ৴͢Δ(JU)VC"1*IUUQTEFWFMPQFSHJUIVCDPNWSFQPTDPOUFOUT
CONFIDENCIAL•൚༻ϑΝΠϧΞοϓϩʔυͷΤϯυϙΠϯτ͕͋Δ•Ξοϓϩʔυྃ͢ΔͱʮϑΝΠϧΩʔʯ͕ฦ͖ͬͯͯɺ͜ΕΛͬͯ֘͢ΔΞτϦϏϡʔτΛߋ৽͢Δ•ΞτϦϏϡʔτͱͷͻ͖͕ͳ͍ϑΝΠϧ3ؒͰফڈ͞ΕΔ•multipart/form-data ͰσʔλΛૹ৴͢Δ$ZCP[V"1*IUUQTDZCP[VEFW[FOEFTLDPNIDKBBSUJDMFT
CONFIDENCIAL•Ϧιʔεඥ͖ܗࣜͷϑΝΠϧΞοϓϩʔυ•Base64 ͷ΄͔ɺURL-encoded binary ͱ URL ͷܗࣜͰσʔλΛૹ৴Մೳ5VNCMS"1*•Ϧιʔεඥ͖ܗࣜϑΝΠϧΞοϓϩʔυ•multipart/form-data ͰσʔλΛૹ৴͢ΔUBC"1*IUUQTXXXUVNCMSDPNEPDTFOBQJW[email protected]@JUFNIUNM
·ͱΊ
CONFIDENCIAL•ϑΝΠϧͷૹ৴ํ๏ͱอଘํ๏ʹҎԼͷύλʔϯ͕͋Δ•API ͷੑ࣭ϑΝΠϧͷ༻్ʹԠͯ͡ɺ͜ΕΒΛదʹΈ߹ΘͤΔͷ͕ྑ͍ૹ৴ NVMUJQBSUGPSNEBUB #BTFอଘ Ϧιʔεඥ͚ ൚༻ϑΝΠϧΞοϓϩʔυ
ΤϯδχΞืूͯ͠·࠙͢ձͰ͓͠·͠ΐ͏ʂCFFSTw3VCZPO3BJMTw#͚4BB4wݹͯ͘ڊେͳ੍Λ)BDL͍ͨ͠