Apollo-link-rest: pollo-link-rest๋กœ ํŒŒ์ผ ๊ฐ์ฒด๋ฅผ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2019๋…„ 11์›” 11์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: apollographql/apollo-link-rest

์˜ˆ์‹œ ์ฟผ๋ฆฌ:

  mutation register {
    register(
      input: {
        email: $email
        avatar: $avatar
        password: $password
      }
    ) @rest(type: "Register", path: "auth/register", method: "POST")
  }

์–‘์‹์—๋Š” ํŒŒ์ผ ๊ฐ์ฒด๋ฅผ ๋ณด๋‚ด๋Š” ํŒŒ์ผ ์ž…๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค(์ด๊ฒƒ์€ ์•„๋ฐ”ํƒ€ ์†์„ฑ์ž…๋‹ˆ๋‹ค). ์•„๋ฐ”ํƒ€ ๋ณ€์ˆ˜๋ฅผ ๊ธฐ๋กํ•  ๋•Œ ์ด ์†์„ฑ์ด ์ •์˜๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ apollo-link-rest๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ ํŒŒ์ผ ๊ฐœ์ฒด๊ฐ€ ๋น„์–ด ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋Œ์—ฐ๋ณ€์ด๋ฅผ ๋ณด๋‚ด๊ธฐ ์ „์— ๋ณ€์ˆ˜ ๋กœ๊น…:
image

apollo๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ ๊ฐ์ฒด๋Š” ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

image

๋ฌธ์„œ์—์„œ ํŒŒ์ผ ์—…๋กœ๋“œ์— ๋Œ€ํ•œ ์–ธ๊ธ‰์„ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

help wanted ๐Ÿ›  questionโ”

๋ชจ๋“  5 ๋Œ“๊ธ€

File ๊ฐ์ฒด๋ฅผ ๋งน๊ธ€๋งํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ๋ช‡ ๊ฐ€์ง€ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ๋‚˜๋Š” ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ์—์„œ Apollo-link-rest๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๊ทผ์— ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ๋””๋ฒ„๊ทธํ•˜๊ณ  ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ํŒŒ์•…ํ•˜๋ ค๋ฉด ์†Œ์Šค๋ฅผ ์ฝ์–ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค! ์‹ค์ œ ์ˆ˜์ •์€ Apollo-link-rest๊ฐ€ ์•„๋‹ˆ๋ผ Apollo-client์— ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

๋‹ต์žฅ์„ ๋ณด๋‚ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ €๋Š” ์ฃผ๋กœ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋Š” ์„ค์ •์ด๋‚˜ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๋งํฌ์™€ ๊ฐ™์€ ๋ช…๋ฐฑํ•œ ๊ฒƒ์„ ๋†“์น˜๊ณ  ์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. :slightly_smiling_face:

์˜ˆ๋ฅผ ๋“ค์–ด ์ผ๋ฐ˜ apollo์—์„œ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋ ค๋ฉด apollo-upload-client(https://github.com/jaydenseric/apollo-upload-client)๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์–ธ๊ธ‰ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

apollo-link-rest์˜ ํด๋ผ์ด์–ธํŠธ์— ์œ ์‚ฌํ•œ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, ์—ฌ๊ธฐ์— ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ 7์›”์— ๋ˆ„๊ตฐ๊ฐ€ apollo-link-rest๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ˜์‘ ํŒŒ์ผ ์—…๋กœ๋“œ์˜ ์˜ˆ๋ฅผ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

์–ด์ฉŒ๋ฉด ์ด๊ฒƒ์ด ๋„์›€์ด ๋ ๊นŒ์š”?

https://github.com/apollographql/apollo-link-rest/issues/200#issuecomment -509287597

๋งŒ์•ฝ ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ์•Œ์•„๋‚ธ๋‹ค๋ฉด, ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฌธ์„œ ์„น์…˜์„ ์ž‘์„ฑํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

@fbartho ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๊ทธ ๋ฌธ์ œ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉฐ, bodySerializers ํŒŒ์ผ ์ธ์ฝ”๋”ฉ ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

bodySerializers: {
    fileEncode: (data: any, headers: Headers) => {
      const formData = new FormData()
      formData.append('file', data, data.name)
      headers.set('Accept', '*/*')
      return { body: formData, headers }
    }
  }

๋˜ํ•œ ์ฟผ๋ฆฌ์—์„œ ์ง๋ ฌ ๋ณ€ํ™˜๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€๋ถ„

@rest(
        type: "File"
        path: "YOUR_API_URL"
        method: "POST"
        bodySerializer: "fileEncode"
      ) {

์ด์™€ ๊ฐ™์€ ๊ฒƒ์ด ๋ฌธ์„œ์— ์žˆ๋‹ค๋ฉด ๋งค์šฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰