Product-apim: graphql ์ง€์›

์— ๋งŒ๋“  2018๋…„ 04์›” 08์ผ  ยท  25์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: wso2/product-apim

์—ฌ๋Ÿฌ๋ถ„ ์•ˆ๋…•ํ•˜์„ธ์š”,

WSO2์˜ ๋ฏธ๋ž˜๋ฅผ ์œ„ํ•ด GraphQL API์— ๋Œ€ํ•œ ๊ฐ•๋ ฅํ•œ ์ง€์›์ด ๊ณ„ํš๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. GraphQL์€ REST์— ๋Œ€ํ•œ ๊ฐ•๋ ฅํ•œ ์ฃผ์žฅ์œผ๋กœ API ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ ์ ์  ๋” ๋งŽ์ด ์ฑ„ํƒ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ค๋Š˜๋‚  GraphQL์„ ์œ„ํ•œ ํ›Œ๋ฅญํ•œ ๋„๊ตฌ๊ฐ€ ๋งŽ์ด ์žˆ์ง€๋งŒ ๋Œ€๊ทœ๋ชจ ์ฑ„ํƒ์˜ ํฐ ๋ณ‘๋ชฉ์€ ์˜ค๋Š˜๋‚  API ๊ฒŒ์ดํŠธ์›จ์ด์˜ ์ง€์›์ด ๋งค์šฐ ์—ด์•…ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์—ฌ์ „ํžˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. GraphQL ์—”๋“œํฌ์ธํŠธ๋Š” REST์™€ ํ˜ธํ™˜๋˜๋ฏ€๋กœ WSO2 APIM์—์„œ REST ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜ค๋Š˜๋‚  ์ด๊ฒƒ์€ ์ตœ์ ์˜ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ฉฐ ์„ค๊ณ„์ƒ ๋Œ€๋ถ€๋ถ„์˜ WSO2 APIM ๊ธฐ๋Šฅ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ ์ด์œ ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹จ์ผ ์—”๋“œํฌ์ธํŠธ์— API ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ „์ฒด ์Šคํ‚ค๋งˆ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ž์ฒด GraphQL API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ˆ˜์‹ญ ๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ์žˆ๋”๋ผ๋„ Apollo ๋„๊ตฌ https://www.apollographql.com/docs/graphql-tools/schema-stitching.html๊ณผ ๊ฐ™์€ API ๋ผ์šฐํ„ฐ๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ์ง‘๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด ๋•Œ๋ฌธ์— WSO2์—์„œ ์ œํ•œ ๋ฐ ์ˆ˜์ต ์ฐฝ์ถœ ๊ธฐ๋Šฅ์„ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ด๋Š” ์—”๋“œํฌ์ธํŠธ๋กœ ๊ตฌ์„ฑ๋˜์ง€๋งŒ GraphQL์—์„œ๋Š” GraphQL ๊ธฐ๋Šฅ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚  GraphQL ๋์ ์„ ๊ตฌ์„ฑํ•˜๋ฉด ์•ˆํ‹ฐ DDOS ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ œ์™ธํ•˜๊ณ  API ๊ฒŒ์ดํŠธ์›จ์ด์˜ ๋Œ€๋ถ€๋ถ„์˜ ์œ ์šฉ์„ฑ์„ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋‚ด GraphQL ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ณ  Apollo ์„œ๋ฒ„๋กœ ์ง‘๊ณ„ํ•˜๊ณ  WSO2 ๊ฒŒ์ดํŠธ์›จ์ด๋กœ ์ ์ ˆํ•˜๊ฒŒ ๋ณดํ˜ธํ•˜๊ณ , ์ˆ˜์ต์„ ์ฐฝ์ถœํ•˜๊ณ , ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋งŽ์€ ์ž‘์—…์ด๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ ์˜ค๋Š˜๋‚  API ๊ฒŒ์ดํŠธ์›จ์ด ์ค‘ GraphQL API์— ๋Œ€ํ•œ ์ง€์›์€ ๋„ˆ๋ฌด ๋นˆ์•ฝํ•˜์—ฌ ์ด๊ฒƒ์ด WSO2์˜ ๊ฐ•๋ ฅํ•œ ๊ฒฝ์Ÿ ์šฐ์œ„์ด์ž ํฐ ๊ธฐํšŒ๊ฐ€ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ถ„์„์˜ ๊ฒฝ์šฐ์—๋„ ํ˜„์žฌ GraphQL์— ๋Œ€ํ•œ ์˜คํ”ˆ ์†Œ์Šค ๋ถ„์„์ด ์—†์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ถ„์„์€ apollo Optics์ด๊ณ  ํ์‡„ ์†Œ์Šค์ž…๋‹ˆ๋‹ค.

์ œ ์š”์ ์„ ๋“ค์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ๋งต์ด ๊ณ„ํš๋œ ๊ฒƒ์ด๋ผ๋ฉด ๋กœ๋“œ๋งต์— ๋Œ€ํ•ด ๋” ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์นœ์• ํ•˜๋Š”,

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์š”๊ตฌ ์‚ฌํ•ญ ๋ถ„์„

  • GraphQL์€ REST์˜ ๋Œ€์•ˆ์œผ๋กœ Facebook์—์„œ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ์‚ฌ์šฉ์ž๊ฐ€ API์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ •ํ™•ํžˆ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” API์šฉ ์ฟผ๋ฆฌ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.
  • Swagger ์ •์˜(Open API ์‚ฌ์–‘)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ REST API๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ GraphQL์—์„œ๋Š” SDL(์Šคํ‚ค๋งˆ ์ •์˜ ์–ธ์–ด)์„ ์‚ฌ์šฉํ•˜์—ฌ GraphQL API์šฉ ์Šคํ‚ค๋งˆ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • GraphQL API๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ GraphQL ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  GraphQL ๋ณ€ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๊ธฐ์—์„œ ์šฐ๋ฆฌ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์€ GraphQL API๋ฅผ ์ƒ์„ฑ ๋ฐ ๊ฒŒ์‹œํ•˜๊ณ  https/http๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด WSO2 APIM์˜ ์ง€์›์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ ์ ‘๊ทผ ๋ฐฉ์‹

  • GraphQL API๋ฅผ ๊ฒŒ์‹œํ•  ๋•Œ ์‚ฌ์šฉ์ž(๊ฒŒ์‹œ์ž)์—๊ฒŒ ์ •์˜๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์Šคํ‚ค๋งˆ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‚ฌ์šฉ์ž๋Š” ์ด๋ฆ„, ๋ฒ„์ „, ์ปจํ…์ŠคํŠธ ๋“ฑ๊ณผ ๊ฐ™์€ API์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ฑ„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๋Š” API๋ฅผ ์ƒ์„ฑํ•  ๋•Œ GET, POST ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑ ํ•˜๋ผ๋Š” ์š”์ฒญ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค .
    1 design page

  • ๋‹ค์Œ์œผ๋กœ ๊ตฌํ˜„ ํƒญ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•˜๋ฉด

    • API ๊ด€๋ฆฌ

      • ๋์  ์œ ํ˜• ์€ ์ž๋™์œผ๋กœ HTTP/REST ๋์  ์œผ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์‚ฌ์šฉ์ž๋Š” ์ด๊ฒƒ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค)
      • ์‚ฌ์šฉ์ž๋Š” ํ‰์†Œ์™€ ๊ฐ™์ด ์—”๋“œํฌ์ธํŠธ (ํ”„๋กœ๋•์…˜ ๋ฐ ์ƒŒ๋“œ๋ฐ•์Šค)๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • ๋‹ค๋ฅธ ํ•„๋“œ๋Š” ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
        2 implement page
    • ํ”„๋กœํ† ํƒ€์ž… API

      • ์ธ๋ผ์ธ ๊ตฌํ˜„ ๋ฐฉ์‹์—์„œ๋Š” ๋‘ ๊ฐœ์˜ GET ๋ฐ POST ๋ฐฉ์‹์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์–ด ๋‹ค์Œ ์Šคํฌ๋ฆฐ์ƒท๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
        3 implement prototype
  • API ๊ด€๋ฆฌ ์˜ต์…˜์„ ์„ ํƒํ•˜๋ฉด ๊ด€๋ฆฌ ํƒญ์—์„œ ์„ค์ •์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • ์—ฌ๊ธฐ์—์„œ๋„ ๋™์ผํ•œ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ํŠนํžˆ ์ธ๋ผ์ธ ํ”„๋กœํ† ํƒ€์ž… ๋ฐฉ์‹๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‘ ๊ฐœ์˜ GET ๋ฐ POST ๋ฐฉ์‹์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์–ด ๋‹ค์Œ ์Šคํฌ๋ฆฐ์ƒท๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      4 manage tab
  • API๊ฐ€ ๊ฒŒ์‹œ๋˜๊ฑฐ๋‚˜ ํ”„๋กœํ† ํƒ€์ž…ํ™”๋œ ํ›„

    • API๋Š” API ์Šคํ† ์–ด์—์„œ GraphQL API๋กœ ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์†Œ๋น„์ž๋Š” API Store๋ฅผ ํ†ตํ•ด ํ•ด๋‹น API์˜ ์Šคํ‚ค๋งˆ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

+1

+1

+1

+1

+1

+1

:+1:

์•ˆ๋…•ํ•˜์„ธ์š” @YannickB ์ž…๋‹ˆ๋‹ค .

์˜ฌ๋ ค์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋กœ๋“œ๋งต์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ €๋Š” GraphQL์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์š”๊ตฌ ์‚ฌํ•ญ์˜ ์ •ํ™•ํ•œ ๋ฒ”์œ„๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ๊ธฐ๋Šฅ์˜ ์ •ํ™•ํ•œ ์ œํ•œ ์‚ฌํ•ญ์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ธฐ๋ณธ์ ์œผ๋กœ Apollo ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋…ธ์ถœ๋˜๋Š” ๋‚ด์šฉ๊ณผ ํ˜„์žฌ API Gateway๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ๋…ธ์ถœํ•ด์•ผ ํ•˜๋Š”์ง€์™€ API Gateway๋ฅผ ํ†ตํ•ด ๋…ธ์ถœํ•˜๋Š” ์ด์ƒ์ ์ธ ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ธ์ง€ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”,
๋ˆ„์™„.

+1

์•ˆ๋…•ํ•˜์„ธ์š” @nuwand ์ž…๋‹ˆ๋‹ค .

๋จผ์ € ๋ฉด์ฑ… ์กฐํ•ญ์œผ๋กœ, ํ‹ฐ์ผ“์„ ์—ด์–ด๋„ ๊ธฐ๋Šฅ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ข‹์€ ์‚ฌ๋žŒ์ธ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋ฅผ GraphQL ๋ฐ API Gateway์™€ ๊ฐ™์€ ๊ฒƒ์„ ํฌํ•จํ•˜์—ฌ ์ •๋ง ์ข‹์€ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ๊ณต๋ถ€ํ•˜๋Š” ์‚ฌ๋žŒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค. ์ด ์—ฐ๊ตฌ๋ฅผ ํ•˜๋Š” ๋™์•ˆ ํ˜„์žฌ ์‹œ์žฅ์— ์žˆ๋Š” ์–ด๋–ค API ๊ฒŒ์ดํŠธ์›จ์ด๋„ GraphQL์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•˜๋„๋ก ์„ค๊ณ„๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•„์ง ์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์—†์ง€๋งŒ ์ตœ์„ ์„ ๋‹คํ•ด ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์„ค๋ช…ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์˜ˆ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•˜๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ œํ’ˆ๊ณผ ์†ก์žฅ์ด๋ผ๋Š” ๋‘ ๊ฐ์ฒด์— ๋Œ€ํ•ด CRUD ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” API๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Rest API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด http://myapi.com/api/product ๋ฐ http://myapi.com/api/invoice ๋ผ๋Š” ๋‘ ๊ฐœ์˜ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ๋Ÿฐ ๋‹ค์Œ GET/POST/PUT/DELETE ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์—.
WSO2์—์„œ๋Š” ๊ฐ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ(ํ•˜๋‚˜๋Š” ์ œํ’ˆ์šฉ์œผ๋กœ, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์†ก์žฅ์šฉ์œผ๋กœ) ๊ตฌ์„ฑํ•œ ๋‹ค์Œ WSO2์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ณด์•ˆ/์ œํ•œ/์ˆ˜์ต ์ฐฝ์ถœ ๋“ฑ... ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋„๋ก ๊ฐ ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ ํŠน์ • ๊ตฌ์„ฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ GraphQL API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ ํ˜„์žฌ ํ›จ์”ฌ ๋” ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋‘ ๊ฐœ์ฒด ๋ชจ๋‘ ๋™์ผํ•œ ๋์  http://myapi.com/graphql์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  http://myapi.com/graphql/product ๋ฐ http://myapi.com/graphql/invoice ๋์ ์„ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ GraphQL์˜ ๋ชจ๋ฒ” ์‚ฌ๋ก€์™€ ์™„์ „ํžˆ ๋ฐ˜๋Œ€ ํŒจํ„ด์ด๋ฉฐ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ƒํƒœ๊ณ„์˜ ๋„๊ตฌ๊ฐ€ ์ž‘๋™์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋“  HTTP ์ž‘์—…์ด POST๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด GraphQL ์—”๋“œํฌ์ธํŠธ์—์„œ ๋‹ค์Œ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

query {
  product(id: 1) {
    id
    name
  }
}
mutation {
  createInvoice(data: {
    'customerID': 1
    'productID': 1
    'price': 20
  }) {
    id
    number
    total
  }
}

์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์€ ์ง€์ •๋œ ์ œํ’ˆ์˜ ์ •๋ณด๋ฅผ ์ฟผ๋ฆฌํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ ์š”์ฒญ์€ ์ด ์ œํ’ˆ์— ๋Œ€ํ•œ ์†ก์žฅ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์ฟผ๋ฆฌ ๋ชจ๋‘ http://myapi.com/graphql ๋์ ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ WSO2 ๊ฒŒ์ดํŠธ์›จ์ด์˜ ํ˜„์žฌ ์ƒํƒœ์—์„œ ๋‚ด๊ฐ€ ์ž˜๋ชปํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋์ ๋‹น ๊ตฌ์„ฑ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด http://myapi.com/graphql ๋์ ์„ ๊ตฌ์„ฑํ•˜์—ฌ createInvoice์— ๋Œ€ํ•œ ๊ฐ ํ˜ธ์ถœ์—์„œ 0.01์„ผํŠธ๋กœ ์ˆ˜์ต์„ ์ฐฝ์ถœํ•˜๋ ค๋ฉด ๊ทธ๋Ÿฌ๋ฉด ์ œํ’ˆ ํ˜ธ์ถœ๋„ 0.01์„ผํŠธ๋กœ ์ˆ˜์ต์„ ์ฐฝ์ถœํ•ฉ๋‹ˆ๋‹ค. REST๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด POST์—์„œ 0.01cent๋ฅผ http://myapi.com/api/invoice ๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ์ œ ์š”์ ์„ ์ดํ•ดํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ„๋‹จํ•œ ์˜ˆ์ด์ง€๋งŒ ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒƒ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ƒํƒœ์—์„œ๋Š” ๊ตฌ์„ฑ์˜ ์œ ์—ฐ์„ฑ ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด GraphQL์—์„œ ๊ฒŒ์ดํŠธ์›จ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋‹น์‹ ์˜ ์ž˜๋ชป์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‹œ์žฅ์— ์žˆ๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  API ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์†”๋ฃจ์…˜ IMHO๋Š” WSO2 ๊ตฌ์„ฑ์„ ๋์ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ GraphQL ๊ธฐ๋Šฅ์—๋„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์— ๊ธฐ์ˆ ์ ์ธ ๋ฌธ์ œ๋กœ ํŒ๋ช…๋  ์ˆ˜ ์žˆ์ง€๋งŒ ํ˜„์žฌ GraphQL์€ API ๊ฒŒ์ดํŠธ์›จ์ด์™€ ์ž‘๋™ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋งค์šฐ ์ €ํ•˜๋œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์žฅ์—์„œ ํ™•์‹คํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ œ์•ˆ์ด ์ƒ๋‹นํ•œ ๊ด€์‹ฌ์„ ๋Œ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ๋”ฐ๋ฅด๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ท€ํ•˜์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ WSO2๊ฐ€ ์ด ๊ธฐ๋Šฅ์„ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋„๋ก ์ดˆ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ์ƒํ™ฉ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ–ˆ์ง€๋งŒ, ์ด๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์‹ค์ œ ์˜ˆ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์นœ์• ํ•˜๋Š”,
์•ผ๋‹‰

์ž„์‹œ ์†”๋ฃจ์…˜์œผ๋กœ API ๊ฒŒ์ดํŠธ์›จ์ด์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์ง€์›์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ์„œ๋น„์Šค ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์†Œํ•œ WSO2-AM graphql ๋์ ์—์„œ ๊ฐ€์ ธ์˜ฌ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @YannickB ์ž…๋‹ˆ๋‹ค .

์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ €๋Š” ์—ฌ์ „ํžˆ ๋์ ์˜ ํ•œ๊ณ„๋ฅผ ํŒŒ์•…ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋์ ๊ณผ ๊ด€๋ จํ•˜์—ฌ API Manager์˜ ๊ธฐ๋Šฅ์„ ์„ค๋ช…ํ•˜๋ฉด ํ•œ๊ณ„๋ฅผ ์ •ํ™•ํžˆ ์ง€์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

http://myapi.com/api/invoice ๋ฐ http://myapi.com/api/product์™€ ๊ฐ™์€ ๋‘ ๊ฐœ์˜ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋์ ์ด ๋™์ผํ•œ ํ˜ธ์ŠคํŠธ(myapi.com)์— ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋™์ผํ•œ ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. API Manager์— ๋‘ ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ”„๋ก์‹œํ•˜๋Š” ๋‹จ์ผ API๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด์•ผ ํ•  ์ผ์€ ๋‘ ๊ฐœ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” POST /invoice๋กœ, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” POST /product๋กœ ์ง€์ •ํ•˜๊ณ  http://myapi.com/ api/ ๋ฅผ ํ•ด๋‹น API์˜ ๋์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹จ์ผ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ„์˜ ๋‘ ์—”๋“œํฌ์ธํŠธ์— ๋ชจ๋‘ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฒŒ์ดํŠธ์›จ์ด ํ˜ธ์ŠคํŠธ๊ฐ€ gateway.myapi.com์ด๊ณ  ์ƒ์„ฑํ•˜๋Š” API์˜ ์ปจํ…์ŠคํŠธ๊ฐ€ /graphql์ด๊ณ  ๋ฒ„์ „์ด 1.0.0์ธ ๊ฒฝ์šฐ ๋‹ค์Œ ์š”์ฒญ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ ์ ˆํ•œ ์—”๋“œํฌ์ธํŠธ๋กœ ๊ฐ๊ฐ ํ”„๋ก์‹œ๋ฉ๋‹ˆ๋‹ค.

POST http://gateway.myqpi.com/graphql/1.0.0/invoice -> POST http://myqpi.com/api/invoice
POST http://gateway.myqpi.com/graphql/1.0.0/product -> POST http://myqpi.com/api/product

๋‘ ๋์ ์„ ๋ชจ๋‘ ํ”„๋ก์‹œํ•˜๋ ค๋ฉด 1๊ฐœ์˜ API(/graphql/1.0.0)๋งŒ ์ƒ์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” ๋‚ด์šฉ์„ ๋ฐ˜๋ณตํ•ด์„œ ๋ง์”€๋“œ๋ ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋งคํ•‘์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค์˜ ์ œํ•œ ์‚ฌํ•ญ์„ ์ง€์ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ฌธ์ œ๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  GraphQL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”,
๋ˆ„์™„.

nuwand, ๋‚˜๋Š” ๋‹น์‹ ๋ณด๋‹ค ๋œ ๊ธฐ์ˆ ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ APIM/Identity ์„œ๋ฒ„์— ๋Œ€ํ•œ ๋‚ด ์ดํ•ด์—์„œ ์šฐ๋ฆฌ๋Š” API ์ˆ˜์ค€์—์„œ API ๊ด€๋ฆฌ(๋ณด์•ˆ, ์กฐ์ ˆ, ... ..)๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. GraphQL์€ '๋ฉ”ํƒ€' ์–ธ์–ด๋ฅผ ํ†ตํ•ด API๋ฅผ ๊ฒฐํ•ฉํ•œ ์ผ์ข…์˜ '์ˆ˜ํผ' ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ๋งŒํ•œ ๊ฒƒ์€ GraphQL์˜ ๊ฐœ๋…๊ณผ WS02 APIM์˜ ๊ฐœ๋…์ด ์–ด๋–ป๊ฒŒ ์ผ์น˜ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐœ๋…์ด ํ†ตํ•ฉ๋  ๊ฒฝ์šฐ. ๋ฌผ๋ก  ๋ชจ๋“  ๊ฒƒ์„ ์ž์ฒด์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” GraphQL als 1 ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด ๋ชจ๋“  '๋ ˆ๊ฑฐ์‹œ' ์„œ๋น„์Šค๊ฐ€ graphql ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ WS02์˜ ๊ฐ’์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

+1

GraphQL์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ๋กœ๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์—”๋“œํฌ์ธํŠธ๋งŒ ์žˆ์œผ๋ฏ€๋กœ myapi.com/graphql/invoice ๋ฐ graphql/product์™€ ๊ฐ™์€ ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉฐ ์—”๋„์ธํŠธ๋Š” "myapi.com/graphql"์ด๋ฉฐ ๊ทธ ์ดํ›„์—๋Š” ์•„๋ฌด ๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ ์ฟผ๋ฆฌ ๋ฐ ๋ณ€ํ˜•์— ๋Œ€ํ•ด ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋™์ผํ•œ URL์ด๋ฉฐ ์š”์ฒญ ๋ณธ๋ฌธ ๋‚ด๋ถ€์— ์ •์˜๋œ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ผ๋ถ€ API ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์€ ์š”์ฒญ ๋ณธ๋ฌธ์— ๋Œ€ํ•œ ๋‚ด์„ฑ, graphql ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•œ ์ง€์‹ ๋“ฑ์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹จ๊ธฐ์ ์œผ๋กœ๋Š” _๋ถˆ๊ฐ€๋Šฅ_ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. WSO2๋Š” ๊ฑฐ์˜ ๊ทธ ์ž์ฒด๋กœ GraphQL ์„œ๋ฒ„/๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ์ด๋ฅผ ํ†ตํ•ฉํ•ด์•ผ ํ•จ).

๋Œ€์‹ , ์šฐ๋ฆฌ๋Š” ์–ด๋–ค API ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์ด _๊ฐ€๋Šฅํ•œ_์ง€์— ์ดˆ์ ์„ ๋งž์ถฐ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ—ค๋”๋ฅผ ์„ค์ •ํ•˜์—ฌ WSO2์™€ ์‹ค์ œ GraphQL ์„œ๋ฒ„/๊ฒŒ์ดํŠธ์›จ์ด ๊ฐ„์˜ ํ˜‘๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ˆ˜์ตํ™”: GraphQL ์„œ๋ฒ„๋Š” ์ฟผ๋ฆฌ์˜ ๋ณต์žก์„ฑ์„ ๊ณ„์‚ฐํ•˜๊ณ  ์ด ์ •๋ณด๋ฅผ HTTP ํ—ค๋”๋กœ ์‘๋‹ต์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ WSO2๋Š” ์ด ๊ฐ’์„ ๊ฐ€๊ฒฉ์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด GraphQL ์„œ๋ฒ„๋Š” JSON ํ˜•ํƒœ์˜ ์ฟผ๋ฆฌ๋ฅผ ํœด์‹๊ณผ ์œ ์‚ฌํ•œ ์˜์‚ฌ ์—”๋“œํฌ์ธํŠธ(๋“ค)๋กœ '๋ณ€ํ™˜'ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, WSO2๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ์‘๋‹ต ํ—ค๋”์—์„œ ์ฝ์–ด ์ด๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ๋ณด์•ˆ์„ ์œ„ํ•ด ๋™์ผํ•œ ์ž‘์—…์„ 2๋‹จ๊ณ„๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, GraphQL ์„œ๋ฒ„์— ์ฟผ๋ฆฌ๋ฅผ ๋‚˜๋จธ์ง€ ์œ ํ˜•์˜ ์—”๋“œํฌ์ธํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋„๋ก ์š”์ฒญํ•˜๊ณ , WSO2๋Š” ํ†ต๊ณผ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ์ฟผ๋ฆฌ๋ฅผ ์‹ค์ œ ์—”๋“œํฌ์ธํŠธ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” WSO2๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์„œ๋ฅผ ์ฝ์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์ด ์ด๋ฏธ WSO2์— ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋” ๊ตฌ์ฒด์ ์œผ๋กœ: ์ผ๋ฐ˜์ ์œผ๋กœ ์ •ํ™•ํ•œ REST ๋์  URI์—์„œ ํŒŒ์ƒ๋˜๋Š” WSO2์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€). ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ํŒŒ์ƒ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: ํ—ค๋” ๊ฐ’ ๋˜๋Š” WSO2 ์ž์ฒด์— ๋Œ€ํ•œ ๋‹ค๋ฅธ API). ์ด๋Ÿฌํ•œ WSO2 ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋ ค๋ฉด GraphQL ์„œ๋ฒ„๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์งˆ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋‚ฎ์€ ๋งค๋‹ฌ๋ฆฐ ๊ณผ์ผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

(๋ฌผ๋ก  WSO2๊ฐ€ GraphQL์— ํฐ ๊ณต์„ ๋“ค์ด๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์ง€๋งŒ... ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์–ด๋”˜๊ฐ€์—์„œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ฃ ?)

์ข‹์€ ํ”ผ๋“œ๋ฐฑ, ๋‚˜๋„ ๊ฐ™์€ ๋Š๋‚Œ ;)

Op di 6 11์›” 2018 om 12:06 schreef four44 [email protected] :

GraphQL์—๋Š” ์‹ค์ œ๋กœ ๋‹จ ํ•˜๋‚˜์˜ ๋์ ์ด ์žˆ์œผ๋ฏ€๋กœ ๊ทธ๋Ÿฌํ•œ ๋์ ์ด ์—†์Šต๋‹ˆ๋‹ค.
myapi.com/graphql/invoice ๋ฐ graphql/product์™€ ๊ฐ™์€ ์—”๋„์ธํŠธ๋Š”
"myapi.com/graphql"๋งŒ ์žˆ๊ณ  ๊ทธ ์ดํ›„์—๋Š” ์•„๋ฌด ๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ง ๊ทธ๋Œ€๋กœ
๋‚ด๋ถ€์— ์ •์˜๋œ ์ž‘์—…๊ณผ ํ•จ๊ป˜ ๊ฐ ์ฟผ๋ฆฌ ๋ฐ ๋ณ€ํ˜•์— ๋Œ€ํ•ด ๋™์ผํ•œ URL
์š”์ฒญ์˜ ๋ณธ๋ฌธ.

๊ทธ๋Ÿฌ๋ฉด ์ผ๋ถ€ API ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์€
์š”์ฒญ ๋ณธ๋ฌธ, graphql ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•œ ์ง€์‹ ๋“ฑ
๋‹จ๊ธฐ๊ฐ„์— ์‹คํ˜„ ๋ถˆ๊ฐ€๋Šฅ : WSO2๋Š” ๊ฑฐ์˜ GraphQL์ด ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์„œ๋ฒ„/๊ฒŒ์ดํŠธ์›จ์ด ์ž์ฒด(๋˜๋Š” ํ†ตํ•ฉ).

๋Œ€์‹  ์–ด๋–ค API ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ์ด ๊ฐ€๋Šฅํ•œ์ง€์— ์ดˆ์ ์„ ๋งž์ถฐ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
WSO2์™€ ์‹ค์ œ GraphQL ๊ฐ„์˜ ํ˜‘๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์„œ๋ฒ„/๊ฒŒ์ดํŠธ์›จ์ด(์˜ˆ: ํ—ค๋” ์„ค์ •). ์˜ˆ๋ฅผ ๋“ค์–ด ์ˆ˜์ต ์ฐฝ์ถœ:
GraphQL ์„œ๋ฒ„๋Š” ์ฟผ๋ฆฌ์˜ ๋ณต์žก์„ฑ์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
WSO2๊ฐ€ ์ด๊ฒƒ์„ ๋ฒˆ์—ญํ•˜๋Š” ์‘๋‹ต์— ๋Œ€ํ•œ HTTP ํ—ค๋”๋กœ ์ •๋ณด
๊ฐ€์น˜๋ฅผ ๊ฐ€๊ฒฉ์œผ๋กœ. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด GraphQL ์„œ๋ฒ„๋Š”
JSON ํ˜•ํƒœ์˜ ์ฟผ๋ฆฌ๋ฅผ ๋‚˜๋จธ์ง€ ํ˜•ํƒœ์˜ (๋ชฉ๋ก)์œผ๋กœ '๋ณ€ํ™˜'
WSO2๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ์‘๋‹ต ํ—ค๋”์—์„œ ์ฝ๋Š” ์˜์‚ฌ ๋์ 
๋ชจ๋‹ˆํ„ฐ๋ง ์ •๋ณด. ๋ณด์•ˆ์„ ์œ„ํ•ด ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹จ๊ณ„: ๋จผ์ € GraphQL ์„œ๋ฒ„์— ์ฟผ๋ฆฌ๋ฅผ ๋‚˜๋จธ์ง€ ์ฟผ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
๋์ , WSO2๋Š” ํ†ต๊ณผ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ์ฟผ๋ฆฌ๋ฅผ ์‹ค์ œ
๋์ .

์ €๋Š” WSO2๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์„œ๋ฅผ ์ฝ์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ
์•„๋งˆ๋„ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ ์ด๋ฏธ WSO2์— ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋” ๊ตฌ์ฒด์ ์œผ๋กœ:
์ผ๋ฐ˜์ ์œผ๋กœ ์ •ํ™•ํ•œ REST ๋์ ์—์„œ ํŒŒ์ƒ๋˜๋Š” WSO2์˜ ๊ธฐ๋Šฅ
URI, ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ๋Œ€์ฒด ๋ฐฉ๋ฒ•์œผ๋กœ ํŒŒ์ƒํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€
(์˜ˆ: ํ—ค๋” ๊ฐ’ ๋˜๋Š” WSO2 ์ž์ฒด์— ๋Œ€ํ•œ ๋‹ค๋ฅธ API)). ๊ทธ๋Ÿด ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค
์ด๋Ÿฌํ•œ WSO2 ์ „์šฉ์„ ์ง€์›ํ•˜๋ ค๋ฉด GraphQL ์„œ๋ฒ„๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŠน์ง•. ์งˆ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋‚ฎ์€ ๋งค๋‹ฌ๋ฆฐ ๊ณผ์ผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

(๋ฌผ๋ก  WSO2๊ฐ€ GraphQL์— ํฐ ๊ณต์„ ๋“ค์ด๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค...
ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์–ด๋”˜๊ฐ€์—์„œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ฃ ?)

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/wso2/product-apim/issues/3184#issuecomment-436215537 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/Ad4tuNmWvNcpkc1Nk5y46DljcQeM9RPwks5usW0kgaJpZM4TLf2Q
.

--
๋ฐ”ํŠธ ๋ฐ˜ ๋ธ”๋ฆฌ์—๋ฒ ๋ฅด๊ฒŒ

์•ˆ๋…•ํ•˜์„ธ์š”,
๋‹ค์Œ์€ Apollo ์„œ๋ฒ„ ๋ฌธ์„œ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.
_"HTTP ํ—ค๋”์™€ ๊ฐ™์ด ๊ถŒํ•œ ๋ถ€์—ฌ๊ฐ€ ๋‚ด์žฅ๋œ REST API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์˜ต์…˜์ด ํ•˜๋‚˜ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. GraphQL ๊ณ„์ธต(๋ฆฌ์กธ๋ฒ„/๋ชจ๋ธ)์—์„œ ์ธ์ฆ ๋˜๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์‹  ํ—ค๋”๋‚˜ ์ฟ ํ‚ค๋ฅผ ํ†ตํ•ด REST ์—”๋“œํฌ์ธํŠธ๋กœ ์ „๋‹ฌํ•˜๊ณ  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜์‹ญ์‹œ์˜ค."_
API ํ‚ค๊ฐ€ graphql ์ฟผ๋ฆฌ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•ด ๋™์ผํ•˜๋ฉด ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ด "ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•"(API-M ์•ž์— Apollo ์„œ๋ฒ„ ๋ฐฐ์น˜)์— ๋Œ€ํ•œ ์ƒ๊ฐ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์š”๊ตฌ ์‚ฌํ•ญ ๋ถ„์„

  • GraphQL์€ REST์˜ ๋Œ€์•ˆ์œผ๋กœ Facebook์—์„œ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ์‚ฌ์šฉ์ž๊ฐ€ API์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ •ํ™•ํžˆ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” API์šฉ ์ฟผ๋ฆฌ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.
  • Swagger ์ •์˜(Open API ์‚ฌ์–‘)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ REST API๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ GraphQL์—์„œ๋Š” SDL(์Šคํ‚ค๋งˆ ์ •์˜ ์–ธ์–ด)์„ ์‚ฌ์šฉํ•˜์—ฌ GraphQL API์šฉ ์Šคํ‚ค๋งˆ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • GraphQL API๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ GraphQL ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  GraphQL ๋ณ€ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๊ธฐ์—์„œ ์šฐ๋ฆฌ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์€ GraphQL API๋ฅผ ์ƒ์„ฑ ๋ฐ ๊ฒŒ์‹œํ•˜๊ณ  https/http๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด WSO2 APIM์˜ ์ง€์›์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ ์ ‘๊ทผ ๋ฐฉ์‹

  • GraphQL API๋ฅผ ๊ฒŒ์‹œํ•  ๋•Œ ์‚ฌ์šฉ์ž(๊ฒŒ์‹œ์ž)์—๊ฒŒ ์ •์˜๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์Šคํ‚ค๋งˆ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‚ฌ์šฉ์ž๋Š” ์ด๋ฆ„, ๋ฒ„์ „, ์ปจํ…์ŠคํŠธ ๋“ฑ๊ณผ ๊ฐ™์€ API์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ฑ„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๋Š” API๋ฅผ ์ƒ์„ฑํ•  ๋•Œ GET, POST ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑ ํ•˜๋ผ๋Š” ์š”์ฒญ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค .
    1 design page

  • ๋‹ค์Œ์œผ๋กœ ๊ตฌํ˜„ ํƒญ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•˜๋ฉด

    • API ๊ด€๋ฆฌ

      • ๋์  ์œ ํ˜• ์€ ์ž๋™์œผ๋กœ HTTP/REST ๋์  ์œผ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์‚ฌ์šฉ์ž๋Š” ์ด๊ฒƒ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค)
      • ์‚ฌ์šฉ์ž๋Š” ํ‰์†Œ์™€ ๊ฐ™์ด ์—”๋“œํฌ์ธํŠธ (ํ”„๋กœ๋•์…˜ ๋ฐ ์ƒŒ๋“œ๋ฐ•์Šค)๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • ๋‹ค๋ฅธ ํ•„๋“œ๋Š” ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
        2 implement page
    • ํ”„๋กœํ† ํƒ€์ž… API

      • ์ธ๋ผ์ธ ๊ตฌํ˜„ ๋ฐฉ์‹์—์„œ๋Š” ๋‘ ๊ฐœ์˜ GET ๋ฐ POST ๋ฐฉ์‹์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์–ด ๋‹ค์Œ ์Šคํฌ๋ฆฐ์ƒท๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
        3 implement prototype
  • API ๊ด€๋ฆฌ ์˜ต์…˜์„ ์„ ํƒํ•˜๋ฉด ๊ด€๋ฆฌ ํƒญ์—์„œ ์„ค์ •์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • ์—ฌ๊ธฐ์—์„œ๋„ ๋™์ผํ•œ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ํŠนํžˆ ์ธ๋ผ์ธ ํ”„๋กœํ† ํƒ€์ž… ๋ฐฉ์‹๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‘ ๊ฐœ์˜ GET ๋ฐ POST ๋ฐฉ์‹์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์–ด ๋‹ค์Œ ์Šคํฌ๋ฆฐ์ƒท๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      4 manage tab
  • API๊ฐ€ ๊ฒŒ์‹œ๋˜๊ฑฐ๋‚˜ ํ”„๋กœํ† ํƒ€์ž…ํ™”๋œ ํ›„

    • API๋Š” API ์Šคํ† ์–ด์—์„œ GraphQL API๋กœ ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์†Œ๋น„์ž๋Š” API Store๋ฅผ ํ†ตํ•ด ํ•ด๋‹น API์˜ ์Šคํ‚ค๋งˆ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ‹์ ธ ๋ณด์ธ๋‹ค

@wasuradananjith ๋˜ํ•œ GraphQL API๊ฐ€ ์ƒ์ ์—์„œ ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋งˆ๋„ ์Šคํ‚ค๋งˆ์™€ ํ•จ๊ป˜ API ํฌํ„ธ์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ตœ์†Œํ•œ Apollo ๋Š” GraphQL ๋ฐ์ดํ„ฐ ์š”์ฒญ์— GET ์‚ฌ์šฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,

WSO2 APIM 3.0.0 ๋ฆด๋ฆฌ์Šค์™€ ๊ด€๋ จ๋œ Graphql ์ง€์› ์ •๋ณด ๋ฐ PR์„ ์ฐพ์œผ์‹ญ์‹œ์˜ค. ์ƒˆ๋กœ์šด React ๊ธฐ๋ฐ˜ UI์—์„œ WSO2 APIM 3.0.0์„ ์ถœ์‹œํ•  ์˜ˆ์ •์ด๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒˆ๋กœ์šด UI์˜ ์Šคํฌ๋ฆฐ์ƒท์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

API ๊ฒŒ์‹œ์ž
์„ค๋ช…:
API ์ž‘์„ฑ์ž๊ฐ€ API ๊ฒŒ์‹œ์ž์— graphQL ์Šคํ‚ค๋งˆ๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด ์ฟผ๋ฆฌ ๋ฐ ๋ณ€ํ˜• ์ž‘์—…์ด ๊ฒŒ์‹œ์ž ํฌํ„ธ์— ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ทธ/๊ทธ๋…€๋Š” ๋ฒ”์œ„, ์กฐ์ ˆ ์ •์ฑ…, ์ž‘์—…์— ๋Œ€ํ•œ ๋ณด์•ˆ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒŒ์‹œ์ž์˜ ๊ธฐ๋Šฅ.

  1. GraphQL SDL ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ€์ ธ์™€ GraphQL API ์ƒ์„ฑ
  2. ์Šคํ‚ค๋งˆ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์Šคํ‚ค๋งˆ ์ •์˜์—์„œ ํ•ด๋‹น ์ž‘์—…์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฒŒ์‹œ์ž์—์„œ SDL ์Šคํ‚ค๋งˆ๋ฅผ ๊ฒ€์ƒ‰/๊ฐ€์ ธ์˜ค๊ธฐ/๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ฆฌ์†Œ์Šค ๋Œ€์‹  ์ž‘์—… ํ‘œ์‹œ
  5. ์ž‘์—…์— ๋Œ€ํ•œ ์ œํ•œ, ๋ฒ”์œ„, ๋ณด์•ˆ ์ถ”๊ฐ€/์—…๋ฐ์ดํŠธ
  6. API ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ 'GRAPHQL' ๋ผ๋ฒจ์ด ๋ถ™์€ graphQL API ๋ณด๊ธฐ

API ์Šคํ† ์–ด
๊ฒŒ์‹œ์ž ์‚ฌ์šฉ์ž๊ฐ€ API๋ฅผ ๊ฒŒ์‹œํ•˜๋ฉด SDL ์Šคํ‚ค๋งˆ์˜ ๋ชจ๋“  ์ž‘์—…์ด ๊ฐœ๋ฐœ์ž ํฌํ„ธ์— ์ฑ„์›Œ์ง€๊ณ  ์Šคํ‚ค๋งˆ ํŒŒ์ผ๋„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” GET ๋ฐ POST ์š”์ฒญ ์œ ํ˜•์ด ์žˆ๋Š” Tryout ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ์ ์˜ ๊ธฐ๋Šฅ.

  1. API ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ 'GRAPHQL' ๋ผ๋ฒจ์ด ๋ถ™์€ graphQL API ๋ณด๊ธฐ
  2. ํŠน์ • API์— ๋Œ€ํ•œ ์ž‘์—… ๋ณด๊ธฐ
  3. SDL ์Šคํ‚ค๋งˆ ๊ฒ€์ƒ‰ ์Šคํ‚ค๋งˆ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅ
  4. API๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž ์ฝ˜์†”์— GET ๋ฐ POST ์ œ๊ณต

์กฐํšŒ์ˆ˜ ์Šคํฌ๋ฆฐ์ƒท

  1. GrpahQL API ํŽ˜์ด์ง€ ์ƒ์„ฑ
    homepage
  1. ์Šคํ‚ค๋งˆ ํŽ˜์ด์ง€ ์—…๋กœ๋“œ
    Screen Shot 2019-08-29 at 10 36 40 AM

  2. ๋‹ค์Œ์„ ํด๋ฆญํ•˜๊ณ  ์–‘์‹์„ ์ฑ„์›Œ ์„ธ๋ถ€์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.
    Screen Shot 2019-08-30 at 10 36 12 AM

  3. GraphQL API ๊ฐœ์š” ํŽ˜์ด์ง€ ์ƒ์„ฑ
    GraphQL API page

  4. GraphQL API ์ž‘์—… ๋ณด๊ธฐ
    Operations

  5. ์—…๋กœ๋“œ๋œ ์Šคํ‚ค๋งˆ ์ •์˜
    schema definition

  6. ๋ฒ”์œ„ ์ถ”๊ฐ€/์—…๋ฐ์ดํŠธ, ์กฐ์ ˆ, ๋ณด์•ˆ
    operation page

  7. ๋งค์žฅ ์šด์˜ ๊ฐœ์š”
    Store operations

  8. ์Šคํ‚ค๋งˆ ๋‹ค์šด๋กœ๋“œ
    Screen Shot 2019-08-29 at 11 28 03 AM

  9. ๊ฐœ๋ฐœ์ž ์ฝ˜์†”
    developer console

Graphql API ํ˜ธ์ถœ ์‹œ๊ฐ„

  1. ๊ถŒํ•œ ๋ถ€์—ฌ - API ์ž‘์„ฑ์ž๋Š” ๊ฒŒ์‹œ์ž์—์„œ ์ž‘์—…๋ณ„๋กœ ๋ฒ”์œ„๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    APP ์‚ฌ์šฉ์ž๊ฐ€ ์ฟผ๋ฆฌ/๋ณ€์ด(์ฝ๊ธฐ ์ „์šฉ/์ฝ๊ธฐ-์“ฐ๊ธฐ) ์ž‘์—…์œผ๋กœ graphQL API๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด API ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ํŽ˜์ด๋กœ๋“œ์— ํฌํ•จ๋œ ์ž‘์—…์„ ์‹๋ณ„ํ•˜๊ณ  ์‚ฌ์šฉ์ž์˜ ํ† ํฐ ๋ฒ”์œ„์— ๋”ฐ๋ผ ์ผ์น˜์‹œํ‚ต๋‹ˆ๋‹ค. ํŽ˜์ด๋กœ๋“œ์— ์—ฌ๋Ÿฌ ๋ฒ”์œ„๊ฐ€ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์ž‘์—…์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ ํ† ํฐ์—๋Š” ์ž‘์—… ๋ฒ”์œ„์˜ ์ตœ์†Œํ•œ ํ†ตํ•ฉ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ:- ์ฟผ๋ฆฌ์— ๋‹ค์Œ์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ (์ž‘์—… A - ๋ฒ”์œ„ 1, ์ž‘์—… B - ๋ฒ”์œ„ 2)
    ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋Š” ์‚ฌ์šฉ์ž์˜ ํ† ํฐ์—๋Š” ๋‘ ๋ฒ”์œ„(scope1 ๋ฐ scope2)๊ฐ€ ๋ชจ๋‘ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ณด์•ˆ - API Creator๋Š” ๊ฒŒ์‹œ์ž์˜ ์ž‘์—…๋ณ„๋กœ ๋ณด์•ˆ์„ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์ฟผ๋ฆฌ ์š”์ฒญ์— ์—ฌ๋Ÿฌ ์ž‘์—… ์ด๋ฆ„์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณด์•ˆ์€ ์ž‘์—… ๋ณด์•ˆ์˜ ํ†ตํ•ฉ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์ž‘์—…์ด ๋ณด์•ˆ์„ ํ™œ์„ฑํ™”ํ•œ ๊ฒฝ์šฐ ์ „์ฒด ์š”์ฒญ์— ๋Œ€ํ•œ ๋ณด์•ˆ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  3. ์กฐ์ ˆ - API ์ž‘์„ฑ์ž๋Š” ๊ฒŒ์‹œ์ž์˜ ์ž‘์—…๋ณ„๋กœ ์กฐ์ ˆ ์ •์ฑ…์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์ฟผ๋ฆฌ ์š”์ฒญ์ด ์—ฌ๋Ÿฌ ์ž‘์—… ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๊ฒฝ์šฐ ์ œํ•œ ์ •์ฑ…์ด ์ž‘์—…๋ณ„๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์˜ ํ•œ ์ž‘์—… ์ด๋ฆ„์ด ํ•ด๋‹น ์ •์ฑ…์— ๋”ฐ๋ผ ์กฐ์ ˆ๋œ ๊ฒฝ์šฐ ์ „์ฒด ์š”์ฒญ์ด ์กฐ์ ˆ๋œ ์ž‘์—…์˜ ๊ฒฝ์šฐ ์กฐ์ ˆ๋ฉ๋‹ˆ๋‹ค.

PR์€ https://github.com/wso2/carbon-apimgt/pull/6784์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด ์ˆ˜์ค€์—์„œ๋Š” ์ฟผ๋ฆฌ ๊ฒ€์‚ฌ ๋ฐ ๋ถ„์„ ์ง€์›, GraphQL ์—”๋“œํฌ์ธํŠธ์šฉ API MicroGateway ์ง€์›, ์ธ๋ฐ”์šด๋“œ ์—”๋“œํฌ์ธํŠธ(์›น ์†Œ์ผ“ API)๋กœ Graphql ๊ตฌ๋… ์ง€์›, ์ž‘์—… ํ˜ธ์ถœ ํšŸ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ Graphql API์šฉ ์ถ”๊ฐ€ ์œ„์ ฏ ํฌํ•จ ๋”ฐ๋ผ์„œ ํ–ฅํ›„ ๋กœ๋“œ๋งต์— ๋Œ€ํ•œ ๊ด€๋ จ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ์—ด๋ ธ์Šต๋‹ˆ๋‹ค.
  1. https://github.com/wso2/product-apim/issues/5432
  2. https://github.com/wso2/product-apim/issues/5431
  3. https://github.com/wso2/product-microgateway/issues/773
  4. https://github.com/wso2/analytics-solutions/issues/310

์ด์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์ƒ๊ฐ๊ณผ ๊ท€์ค‘ํ•œ ์ •๋ณด๋ฅผ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,

WSO2 APIM 3.0.0 ๋ฆด๋ฆฌ์Šค์™€ ๊ด€๋ จ๋œ Graphql ์ง€์› ์ •๋ณด ๋ฐ PR์„ ์ฐพ์œผ์‹ญ์‹œ์˜ค. ์ƒˆ๋กœ์šด React ๊ธฐ๋ฐ˜ UI์—์„œ WSO2 APIM 3.0.0์„ ์ถœ์‹œํ•  ์˜ˆ์ •์ด๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒˆ๋กœ์šด UI์˜ ์Šคํฌ๋ฆฐ์ƒท์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

API ๊ฒŒ์‹œ์ž
์„ค๋ช…:
API ์ž‘์„ฑ์ž๊ฐ€ API ๊ฒŒ์‹œ์ž์— graphQL ์Šคํ‚ค๋งˆ๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด ์ฟผ๋ฆฌ ๋ฐ ๋ณ€ํ˜• ์ž‘์—…์ด ๊ฒŒ์‹œ์ž ํฌํ„ธ์— ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ทธ/๊ทธ๋…€๋Š” ๋ฒ”์œ„, ์กฐ์ ˆ ์ •์ฑ…, ์ž‘์—…์— ๋Œ€ํ•œ ๋ณด์•ˆ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒŒ์‹œ์ž์˜ ๊ธฐ๋Šฅ.

1. Create a GraphQL APIs by importing GraphQL SDL schema

2. Validate the schema and extract its operations from the schema definition

3. Retrieve/Import/Download  SDL schema at the publisher.

4. Shows operations instead of resources

5. Add/Update throttling,scopes,security against operations

6. View graphQL APIs labeling 'GRAPHQL' at API Listing Page

API ์Šคํ† ์–ด
๊ฒŒ์‹œ์ž ์‚ฌ์šฉ์ž๊ฐ€ API๋ฅผ ๊ฒŒ์‹œํ•˜๋ฉด SDL ์Šคํ‚ค๋งˆ์˜ ๋ชจ๋“  ์ž‘์—…์ด ๊ฐœ๋ฐœ์ž ํฌํ„ธ์— ์ฑ„์›Œ์ง€๊ณ  ์Šคํ‚ค๋งˆ ํŒŒ์ผ๋„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” GET ๋ฐ POST ์š”์ฒญ ์œ ํ˜•์ด ์žˆ๋Š” Tryout ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ์ ์˜ ๊ธฐ๋Šฅ.

1. View graphQL APIs labeling 'GRAPHQL' at API Listing Page

2. View operations for particular API

3. Able to download SDL schema retrieving schema

4. Provide developer console with GET and POST to invoke the API

์กฐํšŒ์ˆ˜ ์Šคํฌ๋ฆฐ์ƒท

1. Create GrpahQL API page

homepage

1. Upload schema page

Screen Shot 2019-08-29 at 10 36 40 AM

1. Click next and populate a form to fill details

Screen Shot 2019-08-30 at 10 36 12 AM

1. Created GraphQL API overview page

GraphQL API page

1. GraphQL API operation view

Operations

1. Uploaded schema definition

schema definition

1. Add/Update scopes,throttling,security

operation page

1. Store operation overview

Store operations

1. Schema download

Screen Shot 2019-08-29 at 11 28 03 AM

1. Developer Console

developer console

Graphql API ํ˜ธ์ถœ ์‹œ๊ฐ„

1. Authorization - API Creator can add scopes per operations at the publisher
   When the APP user invokes the graphQL API with query/mutation (read-only/ read-write) operation, API gateway will identify which operations are containing in the payload and match them according to the token scope of the user. If the payload contains multiple operations with multiple scopes, the token should have at least a union of the operation scopes.
   Eg:- Let's say when a query contains, (operation A  - scope 1, operation B -  scope 2)
   the token of the user who is going to execute the query should have both scopes (scope1 and scope2)

2. Security - API Creator can enable/disable security per operations at the publisher.
   When a query request comes with multiple operation names, security has been considered as the union of the operations security. If one operation has been enabled the security, we support security for whole request.

3. Throttling - API Creator can add throttling policy per operations at the publisher.
   When a query request comes with multiple operation names, throttle policies will apply per operation. If one operation name of the request has been throttled out according to its policy, the whole request is going to be throttled out in the case of throttled operation.

PR์€ wso2/carbon-apimgt#6784 ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

* At this level, we are not going to support on inspecting and analyzing queries, support API MicroGateway for GraphQL endpoints, support Graphql subscriptions with the inbound endpoints(Web socket APIs), Include an extra widget for Graphql APIs to see the count of operation invocation based on operation types, etc. Therefore, new issues have been opened to add relevant support for our future roadmap.


1. #5432

2. #5431

3. [wso2/product-microgateway#773](https://github.com/wso2/product-microgateway/issues/773)

4. [wso2/analytics-solutions#310](https://github.com/wso2/analytics-solutions/issues/310)

์ด์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์ƒ๊ฐ๊ณผ ๊ท€์ค‘ํ•œ ์ •๋ณด๋ฅผ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!

์•ˆ๋…•ํ•˜์„ธ์š” @HiranyaKavishani ,
์ด ์ง€์›์€ ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ wso apim์„ ํ†ตํ•ด ๊ธฐ์กด API์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ APIM์„ ํ†ตํ•ด ๊ธฐ์กด GraphQL API ๊ฒŒ์‹œ๋ฅผ ๋„์ž…ํ•ฉ๋‹ˆ๊นŒ?

๋˜ํ•œ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•  ๋ฒ ํƒ€/์•ŒํŒŒ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ ํ•ด์š” !

์•ˆ๋…•ํ•˜์„ธ์š” @arvindkannan ,

๊ธฐ์กด Graphql API์˜ ๊ฒฝ์šฐ ๋‚˜๋จธ์ง€ API์™€ ๋น„๊ตํ•  ๋•Œ graphql์ด ์ง€์›ํ•˜๋Š” ๋ฐฉ์‹์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— API๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์‹œ ๊ฒŒ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ฒฝ์šฐ ๊ธฐ์กด ๊ณ ๊ฐ์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ๊ธฐ์กด ํ† ํฐ๊ณผ ๊ธฐ์กด URL์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ 10์›”์— ์ถœ์‹œ๋  APIM 3.0.0์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!

APIM 3.0.0 ๋ฒ ํƒ€ ๋ฒ„์ „์—์„œ ์ด ์ง€์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

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