GraphQL
GraphQL API λ§΅νμλ call, publish, subscribe, map 컀λ₯ν°λ₯Ό μ΄μ© ν μ μμ΅λλ€.
TypeDefs
GraphQL νλ‘ν μ½μμ typeDefs μμ±μ μλΉμ€μ νμν μ μ(scalarλ₯Ό μ μΈν νμ
, μΈν°νμ΄μ€, μ΄κ±°ν λ± λͺ¨λ νν)μ μΆκ°νκ±°λ κΈ°μ‘΄ νμ
(API Gatewayμμ μ 곡νλ κΈ°λ³Έ νμ
κ³Ό λΆμ° μλΉμ€μμ μ 곡ν νμ
λ€)μ νμ₯ ν μ μμ΅λλ€.
Resolvers
μ΄ν 리쑸λ²μ κ° νμ
λ€μ νλλ₯Ό call, publish, subscribe, map 컀λ₯ν°μ λ§΅νν©λλ€.
리쑸λ²κ° ν λΉλμ§ μμ νλλ€μ source κ°μ²΄μμ λμΌν μ΄λ¦μ μμ±μΌλ‘λΆν° μ£Όμ
λ©λλ€.
Call
GraphQL APIμ Query λ° Mutation νμ
μ νλλ€μλ publish λ° call λλ map 컀λ₯ν°λ₯Ό μ΄μ© ν μ μμ΅λλ€. params λ§΅νμλ @source, @args, @context, @infoλ₯Ό μ΄μ© ν μ μμ΅λλ€.
Map
GraphQL νλ‘ν μ½μμ map 컀λ₯ν° (Inline JavaScript Function String)λ κ°λ΅νκ² field: { map: <FN_STRING> } λμ μ field: <FN_STRING> λ°©μμΌλ‘ μμ± ν μ μμ΅λλ€.
μμ²λΌ Union, Interface ꡬν νμ
μ ν΄μνκΈ° μν νΉμ νλμλ Inline JavaScript Function Stringλ₯Ό μ¬μ©ν©λλ€.
Batched Call (DataLoader)
μμ²λΌ μΈμ¦ μ 보λ₯Ό ν¬ν¨ν @contextλ GraphQL νλ μΈμμΈ @argsλ₯Ό νμ©ν΄ λμΌν μ‘μ
μ μλ‘ λ€λ₯Έ λ°©μμΌλ‘ λ§΅ν ν μ μμ΅λλ€.
λν call λ©μλλ GraphQL μμ²μμ λ°μνκΈ° μ¬μ΄ N+1 쿼리λ₯Ό λ°©μ§νκΈ° μν΄ μμ²μ λ°°μΉλ‘ μ²λ¦¬ ν μ μλλ‘ μ€κ³λμμ΅λλ€. (ref. )
ν 컨ν
μ€νΈμμ μ¬λ¬λ² νΈμΆλλ μ‘μ
μ λ°°μΉμ μ§μνλ©΄ μλ΅ μλλ₯Ό νκΈ°μ μΌλ‘ λν μ μμ΅λλ€. λ°°μΉμ νμ±ννκΈ° μν΄μλ call 컀λ₯ν°μ batchedParams νλμ λ°°μΉ μ²λ¦¬κ° κ°λ₯ν νλμ μ΄λ¦μ μμ±νκ³ , μ°κ²°λ μλΉμ€ μ‘μ
μ΄ λ°°μ΄λ‘ λ€μ΄μ€λ μΈμ λ¬Άμμ μ²λ¦¬ ν μ μλλ‘ ν©λλ€.
μμ κ°μ GraphQL μμ²μ player.get μ‘μ
μ { id: [context.user.player.id, 1, 2, 3], ...(other common params) } νμ΄λ‘λμ ν¨κ» νλ²λ§ νΈμΆνκ² λ©λλ€. μ°κ²°λ μ‘μ
μ΄ [{ ... }, { ... }, { ... }, { ... }] λ¬ΆμμΌλ‘ μλ΅μ μ£Όλ©΄ κ° νλμ ν΄λΉνλ μλ΅μ΄ ν λΉλ©λλ€.
λ§μ½ id: 3μΈ νλ μ΄μ΄κ° μλ κ²½μ° λ°°μΉ μμ²μ μ²λ¦¬νλ κ³Όμ μμ μλ¬λ₯Ό λ°μμμΌ μ μ΄ νλ¦μ λ©μΆλ λμ μ, μλ¬λ₯Ό λ°μν€μ§μκ³ λ°°μΉ μλ΅μ ν¬ν¨μν€κ³ λλ¨Έμ§ μ μ΄ νλ¦μ λ§λ¬΄λ¦¬ν©λλ€. [{ ... }, { ... }, { ... }, { message: "...", isBatchError: true, ... }] μ²λΌ isBatchError: true μμ±μ κ°λ μλ¬ κ°μ²΄λ₯Ό μλ΅μ ν¬ν¨ν©λλ€.
Subscribe
GraphQL APIμ Subscription νμ
μ νλμμλ subscribe 컀λ₯ν°λ₯Ό μ¬μ© ν μ μμ΅λλ€. params λ§΅νμλ λ§μ°¬κ°μ§λ‘ @source, @args, @context, @infoλ₯Ό μ΄μ© ν μ μμ΅λλ€. @sourceμ μ΄λ²€νΈ κ°μ²΄κ° λ§΅νλ©λλ€.
@source κ°μ²΄λ { event, payload }λ‘ κ΅¬μ±λ©λλ€. Brokerμ λ°λΌ κΈ°ν μμ±μ΄ μΆκ° λ μ μμ΅λλ€.
subscribe 컀λ₯ν°μμλ μμ²λΌ μμ λ μ΄λ²€νΈ νμ΄λ‘λλ₯Ό λ€μ map 컀λ₯ν°λ‘ λ³ν ν μ μμ΅λλ€. subscribe 컀λ₯ν° μμμ map 컀λ₯ν°κ° μ¬μ©λμ§ μλ κ²½μ° μ΄λ²€νΈ κ°μ²΄ μ 체(source)λ₯Ό λ°νν©λλ€.